From b9805bacadd4d0474fd3358cf0c7153042ce50c3 Mon Sep 17 00:00:00 2001 From: tbbdev Date: Wed, 13 Sep 2017 16:17:55 +0300 Subject: [PATCH] Committing Intel(R) TBB 2018 source code --- .gitattributes | 45 + .gitignore | 86 + CHANGES | 2412 +++ LICENSE | 201 + Makefile | 84 + README | 11 + README.md | 35 +- build/AIX.gcc.inc | 75 + build/AIX.inc | 66 + build/FreeBSD.clang.inc | 110 + build/FreeBSD.gcc.inc | 93 + build/FreeBSD.inc | 74 + build/Makefile.rml | 166 + build/Makefile.tbb | 118 + build/Makefile.tbbmalloc | 240 + build/Makefile.tbbproxy | 109 + build/Makefile.test | 317 + build/SunOS.gcc.inc | 92 + build/SunOS.inc | 83 + build/SunOS.suncc.inc | 92 + build/android.clang.inc | 118 + build/android.gcc.inc | 117 + build/android.icc.inc | 120 + build/android.inc | 63 + build/android.linux.inc | 67 + build/android.linux.launcher.sh | 148 + build/android.macos.inc | 76 + build/android.windows.inc | 78 + build/big_iron.inc | 76 + build/codecov.txt | 7 + build/common.inc | 166 + build/common_rules.inc | 168 + build/detect.js | 199 + build/generate_tbbvars.bat | 66 + build/generate_tbbvars.sh | 71 + build/index.html | 242 + build/ios.clang.inc | 23 + build/ios.macos.inc | 36 + build/linux.clang.inc | 115 + build/linux.gcc.inc | 155 + build/linux.icc.inc | 120 + build/linux.inc | 142 + build/linux.pathcc.inc | 93 + build/linux.xl.inc | 104 + build/macos.clang.inc | 123 + build/macos.gcc.inc | 112 + build/macos.icc.inc | 106 + build/macos.inc | 107 + build/mic.icc.inc | 79 + build/mic.linux.inc | 43 + build/mic.linux.launcher.sh | 161 + build/mic.offload.inc | 118 + build/suncc.map.pause | 1 + build/test_launcher.bat | 74 + build/test_launcher.sh | 94 + build/version_info_aix.sh | 34 + build/version_info_android.sh | 33 + build/version_info_linux.sh | 34 + build/version_info_macos.sh | 32 + build/version_info_sunos.sh | 31 + build/version_info_windows.js | 95 + build/vs2013/index.html | 30 + build/vs2013/makefile.sln | 80 + build/vs2013/tbb.vcxproj | 696 + build/vs2013/tbbmalloc.vcxproj | 558 + build/vs2013/tbbmalloc_proxy.vcxproj | 425 + build/vs2013/version_string.ver | 1 + build/windows.cl.inc | 158 + build/windows.gcc.inc | 142 + build/windows.icl.inc | 178 + build/windows.inc | 111 + cmake/README.rst | 285 + cmake/TBBBuild.cmake | 197 + cmake/TBBGet.cmake | 298 + cmake/TBBMakeConfig.cmake | 162 + cmake/templates/TBBConfig.cmake.in | 89 + cmake/templates/TBBConfigForSource.cmake.in | 82 + cmake/templates/TBBConfigVersion.cmake.in | 28 + doc/Release_Notes.txt | 137 + doc/html/a00001.html | 59 + doc/html/a00002.html | 55 + doc/html/a00003.html | 57 + doc/html/a00004.html | 43 + doc/html/a00005.html | 59 + doc/html/a00006.html | 53 + doc/html/a00007.html | 57 + doc/html/a00008.html | 54 + doc/html/a00009.html | 144 + doc/html/a00009.png | Bin 0 -> 1881 bytes doc/html/a00010.html | 66 + doc/html/a00011.html | 125 + doc/html/a00011.png | Bin 0 -> 1067 bytes doc/html/a00012.html | 151 + doc/html/a00012.png | Bin 0 -> 843 bytes doc/html/a00013.html | 129 + doc/html/a00013.png | Bin 0 -> 1567 bytes doc/html/a00014.html | 82 + doc/html/a00015.html | 95 + doc/html/a00016.html | 95 + doc/html/a00017.html | 65 + doc/html/a00017.png | Bin 0 -> 1138 bytes doc/html/a00018.html | 56 + doc/html/a00019.html | 91 + doc/html/a00019.png | Bin 0 -> 595 bytes doc/html/a00020.html | 90 + doc/html/a00020.png | Bin 0 -> 688 bytes doc/html/a00021.html | 63 + doc/html/a00022.html | 81 + doc/html/a00022.png | Bin 0 -> 490 bytes doc/html/a00023.html | 66 + doc/html/a00024.html | 84 + doc/html/a00024.png | Bin 0 -> 2213 bytes doc/html/a00025.html | 98 + doc/html/a00025.png | Bin 0 -> 1561 bytes doc/html/a00026.html | 325 + doc/html/a00027.html | 120 + doc/html/a00028.html | 127 + doc/html/a00029.html | 56 + doc/html/a00030.html | 96 + doc/html/a00030.png | Bin 0 -> 1110 bytes doc/html/a00031.html | 147 + doc/html/a00032.html | 88 + doc/html/a00033.html | 76 + doc/html/a00034.html | 78 + doc/html/a00034.png | Bin 0 -> 1229 bytes doc/html/a00035.html | 75 + doc/html/a00035.png | Bin 0 -> 1232 bytes doc/html/a00036.html | 214 + doc/html/a00036.png | Bin 0 -> 835 bytes doc/html/a00037.html | 110 + doc/html/a00038.html | 56 + doc/html/a00039.html | 411 + doc/html/a00039.png | Bin 0 -> 766 bytes doc/html/a00040.html | 1089 ++ doc/html/a00040.png | Bin 0 -> 1052 bytes doc/html/a00041.html | 92 + doc/html/a00041.png | Bin 0 -> 1068 bytes doc/html/a00042.html | 606 + doc/html/a00043.html | 224 + doc/html/a00043.png | Bin 0 -> 872 bytes doc/html/a00044.html | 167 + doc/html/a00044.png | Bin 0 -> 2163 bytes doc/html/a00045.html | 101 + doc/html/a00046.html | 158 + doc/html/a00046.png | Bin 0 -> 2174 bytes doc/html/a00047.html | 158 + doc/html/a00047.png | Bin 0 -> 2109 bytes doc/html/a00048.html | 158 + doc/html/a00048.png | Bin 0 -> 2095 bytes doc/html/a00049.html | 100 + doc/html/a00050.html | 810 + doc/html/a00050.png | Bin 0 -> 1057 bytes doc/html/a00051.html | 142 + doc/html/a00051.png | Bin 0 -> 1888 bytes doc/html/a00052.html | 63 + doc/html/a00053.html | 332 + doc/html/a00053.png | Bin 0 -> 1579 bytes doc/html/a00054.html | 102 + doc/html/a00054.png | Bin 0 -> 621 bytes doc/html/a00055.html | 66 + doc/html/a00056.html | 66 + doc/html/a00057.html | 118 + doc/html/a00057.png | Bin 0 -> 1704 bytes doc/html/a00058.html | 56 + doc/html/a00059.html | 66 + doc/html/a00060.html | 94 + doc/html/a00061.html | 84 + doc/html/a00061.png | Bin 0 -> 1053 bytes doc/html/a00062.html | 261 + doc/html/a00062.png | Bin 0 -> 1259 bytes doc/html/a00063.html | 146 + doc/html/a00063.png | Bin 0 -> 757 bytes doc/html/a00064.html | 102 + doc/html/a00065.html | 73 + doc/html/a00066.html | 79 + doc/html/a00066.png | Bin 0 -> 574 bytes doc/html/a00067.html | 125 + doc/html/a00068.html | 81 + doc/html/a00069.html | 93 + doc/html/a00069.png | Bin 0 -> 839 bytes doc/html/a00070.html | 107 + doc/html/a00071.html | 100 + doc/html/a00072.html | 82 + doc/html/a00073.html | 388 + doc/html/a00073.png | Bin 0 -> 1120 bytes doc/html/a00074.html | 131 + doc/html/a00075.html | 88 + doc/html/a00075.png | Bin 0 -> 1478 bytes doc/html/a00076.html | 99 + doc/html/a00077.html | 81 + doc/html/a00077.png | Bin 0 -> 495 bytes doc/html/a00078.html | 109 + doc/html/a00079.html | 81 + doc/html/a00079.png | Bin 0 -> 638 bytes doc/html/a00080.html | 86 + doc/html/a00080.png | Bin 0 -> 966 bytes doc/html/a00081.html | 56 + doc/html/a00082.html | 89 + doc/html/a00082.png | Bin 0 -> 671 bytes doc/html/a00083.html | 179 + doc/html/a00084.html | 128 + doc/html/a00085.html | 98 + doc/html/a00086.html | 81 + doc/html/a00086.png | Bin 0 -> 489 bytes doc/html/a00087.html | 230 + doc/html/a00087.png | Bin 0 -> 960 bytes doc/html/a00088.html | 174 + doc/html/a00088.png | Bin 0 -> 680 bytes doc/html/a00089.html | 106 + doc/html/a00089.png | Bin 0 -> 1052 bytes doc/html/a00090.html | 95 + doc/html/a00090.png | Bin 0 -> 704 bytes doc/html/a00091.html | 95 + doc/html/a00091.png | Bin 0 -> 724 bytes doc/html/a00092.html | 56 + doc/html/a00093.html | 126 + doc/html/a00093.png | Bin 0 -> 1132 bytes doc/html/a00094.html | 146 + doc/html/a00094.png | Bin 0 -> 1179 bytes doc/html/a00095.html | 137 + doc/html/a00095.png | Bin 0 -> 1161 bytes doc/html/a00096.html | 185 + doc/html/a00097.html | 107 + doc/html/a00098.html | 123 + doc/html/a00099.html | 119 + doc/html/a00099.png | Bin 0 -> 1158 bytes doc/html/a00100.html | 56 + doc/html/a00101.html | 86 + doc/html/a00101.png | Bin 0 -> 1611 bytes doc/html/a00102.html | 86 + doc/html/a00102.png | Bin 0 -> 1585 bytes doc/html/a00103.html | 88 + doc/html/a00103.png | Bin 0 -> 1284 bytes doc/html/a00104.html | 118 + doc/html/a00104.png | Bin 0 -> 871 bytes doc/html/a00105.html | 84 + doc/html/a00106.html | 135 + doc/html/a00106.png | Bin 0 -> 1176 bytes doc/html/a00107.html | 165 + doc/html/a00107.png | Bin 0 -> 612 bytes doc/html/a00108.html | 139 + doc/html/a00109.html | 73 + doc/html/a00110.html | 56 + doc/html/a00111.html | 105 + doc/html/a00111.png | Bin 0 -> 754 bytes doc/html/a00112.html | 110 + doc/html/a00112.png | Bin 0 -> 776 bytes doc/html/a00113.html | 231 + doc/html/a00113.png | Bin 0 -> 657 bytes doc/html/a00114.html | 67 + doc/html/a00115.html | 66 + doc/html/a00116.html | 67 + doc/html/a00117.html | 66 + doc/html/a00118.html | 67 + doc/html/a00119.html | 67 + doc/html/a00120.html | 67 + doc/html/a00121.html | 67 + doc/html/a00122.html | 66 + doc/html/a00123.html | 66 + doc/html/a00124.html | 241 + doc/html/a00124.png | Bin 0 -> 1020 bytes doc/html/a00125.html | 93 + doc/html/a00125.png | Bin 0 -> 1063 bytes doc/html/a00126.html | 162 + doc/html/a00126.png | Bin 0 -> 766 bytes doc/html/a00127.html | 56 + doc/html/a00128.html | 56 + doc/html/a00129.html | 56 + doc/html/a00130.html | 321 + doc/html/a00130.png | Bin 0 -> 616 bytes doc/html/a00131.html | 145 + doc/html/a00132.html | 88 + doc/html/a00133.html | 96 + doc/html/a00133.png | Bin 0 -> 604 bytes doc/html/a00134.html | 129 + doc/html/a00134.png | Bin 0 -> 622 bytes doc/html/a00135.html | 110 + doc/html/a00135.png | Bin 0 -> 542 bytes doc/html/a00136.html | 136 + doc/html/a00136.png | Bin 0 -> 594 bytes doc/html/a00137.html | 209 + doc/html/a00137.png | Bin 0 -> 655 bytes doc/html/a00138.html | 100 + doc/html/a00138.png | Bin 0 -> 798 bytes doc/html/a00139.html | 110 + doc/html/a00139.png | Bin 0 -> 645 bytes doc/html/a00140.html | 90 + doc/html/a00140.png | Bin 0 -> 574 bytes doc/html/a00141.html | 74 + doc/html/a00141.png | Bin 0 -> 743 bytes doc/html/a00142.html | 155 + doc/html/a00142.png | Bin 0 -> 651 bytes doc/html/a00143.html | 99 + doc/html/a00143.png | Bin 0 -> 839 bytes doc/html/a00144.html | 196 + doc/html/a00144.png | Bin 0 -> 973 bytes doc/html/a00145.html | 182 + doc/html/a00145.png | Bin 0 -> 729 bytes doc/html/a00146.html | 236 + doc/html/a00146.png | Bin 0 -> 777 bytes doc/html/a00147.html | 118 + doc/html/a00147.png | Bin 0 -> 961 bytes doc/html/a00148.html | 56 + doc/html/a00149.html | 435 + doc/html/a00149.png | Bin 0 -> 656 bytes doc/html/a00150.html | 131 + doc/html/a00150.png | Bin 0 -> 891 bytes doc/html/a00151.html | 114 + doc/html/a00151.png | Bin 0 -> 1324 bytes doc/html/a00152.html | 60 + doc/html/a00153.html | 94 + doc/html/a00153.png | Bin 0 -> 538 bytes doc/html/a00154.html | 74 + doc/html/a00154.png | Bin 0 -> 620 bytes doc/html/a00155.html | 211 + doc/html/a00155.png | Bin 0 -> 565 bytes doc/html/a00156.html | 269 + doc/html/a00156.png | Bin 0 -> 906 bytes doc/html/a00157.html | 185 + doc/html/a00157.png | Bin 0 -> 906 bytes doc/html/a00158.html | 160 + doc/html/a00159.html | 88 + doc/html/a00160.html | 226 + doc/html/a00160.png | Bin 0 -> 1423 bytes doc/html/a00161.html | 117 + doc/html/a00162.html | 185 + doc/html/a00163.html | 160 + doc/html/a00163.png | Bin 0 -> 757 bytes doc/html/a00164.html | 96 + doc/html/a00164.png | Bin 0 -> 794 bytes doc/html/a00165.html | 110 + doc/html/a00165.png | Bin 0 -> 815 bytes doc/html/a00166.html | 103 + doc/html/a00166.png | Bin 0 -> 857 bytes doc/html/a00167.html | 80 + doc/html/a00167.png | Bin 0 -> 1409 bytes doc/html/a00168.html | 101 + doc/html/a00169.html | 172 + doc/html/a00169.png | Bin 0 -> 2153 bytes doc/html/a00170.html | 153 + doc/html/a00170.png | Bin 0 -> 978 bytes doc/html/a00171.html | 69 + doc/html/a00172.html | 66 + doc/html/a00173.html | 81 + doc/html/a00173.png | Bin 0 -> 468 bytes doc/html/a00174.html | 133 + doc/html/a00174.png | Bin 0 -> 638 bytes doc/html/a00175.html | 102 + doc/html/a00175.png | Bin 0 -> 679 bytes doc/html/a00193.html | 190 + doc/html/a00198.html | 99 + doc/html/a00217.html | 194 + doc/html/a00236.html | 116 + doc/html/a00239.html | 686 + doc/html/a00260.html | 2187 +++ doc/html/a00261.html | 67 + doc/html/a00262.html | 382 + doc/html/a00263.html | 125 + doc/html/a00264.html | 52 + doc/html/a00265.html | 52 + doc/html/a00267.html | 53 + doc/html/a00268.html | 65 + doc/html/a00269.html | 58 + doc/html/a00270.html | 60 + doc/html/a00271.html | 60 + doc/html/a00272.html | 71 + doc/html/a00273.html | 67 + doc/html/a00274.html | 69 + doc/html/a00275.html | 75 + doc/html/a00276.html | 57 + doc/html/a00277.html | 59 + doc/html/a00278.html | 57 + doc/html/a00279.html | 68 + doc/html/a00280.html | 90 + doc/html/a00281.html | 134 + doc/html/a00282.html | 60 + doc/html/a00283.html | 73 + doc/html/a00284.html | 63 + doc/html/a00285.html | 60 + doc/html/a00286.html | 62 + doc/html/a00287.html | 60 + doc/html/a00288.html | 64 + doc/html/a00289.html | 57 + doc/html/a00290.html | 57 + doc/html/a00291.html | 61 + doc/html/a00292.html | 61 + doc/html/a00293.html | 68 + doc/html/a00294.html | 68 + doc/html/a00295.html | 61 + doc/html/a00296.html | 62 + doc/html/a00297.html | 62 + doc/html/a00298.html | 64 + doc/html/a00299.html | 68 + doc/html/a00300.html | 63 + doc/html/a00301.html | 75 + doc/html/a00302.html | 57 + doc/html/a00303.html | 59 + doc/html/a00304.html | 57 + doc/html/a00305.html | 65 + doc/html/a00306.html | 63 + doc/html/a00307.html | 73 + doc/html/a00308.html | 67 + doc/html/a00309.html | 62 + doc/html/a00310.html | 72 + doc/html/a00311.html | 68 + doc/html/a00312.html | 67 + doc/html/a00313.html | 79 + doc/html/a00314.html | 57 + doc/html/a00315.html | 59 + doc/html/a00316.html | 57 + doc/html/a00317.html | 68 + doc/html/a00318.html | 57 + doc/html/a00319.html | 60 + doc/html/a00320.html | 57 + doc/html/a00321.html | 58 + doc/html/a00322.html | 57 + doc/html/a00323.html | 57 + doc/html/a00324.html | 57 + doc/html/a00325.html | 57 + doc/html/a00326.html | 63 + doc/html/a00327.html | 69 + doc/html/a00328.html | 70 + doc/html/a00329.html | 60 + doc/html/a00330.html | 65 + doc/html/a00331.html | 81 + doc/html/a00332.html | 90 + doc/html/a00333.html | 73 + doc/html/a00334.html | 88 + doc/html/a00335.html | 93 + doc/html/a00336.html | 59 + doc/html/a00337.html | 61 + doc/html/a00338.html | 71 + doc/html/a00339.html | 60 + doc/html/a00340.html | 68 + doc/html/a00341.html | 94 + doc/html/a00342.html | 70 + doc/html/a00343.html | 58 + doc/html/a00344.html | 59 + doc/html/a00345.html | 73 + doc/html/a00346.html | 72 + doc/html/a00347.html | 76 + doc/html/a00348.html | 76 + doc/html/a00349.html | 77 + doc/html/a00350.html | 61 + doc/html/a00351.html | 60 + doc/html/a00352.html | 59 + doc/html/a00353.html | 59 + doc/html/a00354.html | 64 + doc/html/a00355.html | 64 + doc/html/a00356.html | 64 + doc/html/a00357.html | 75 + doc/html/a00358.html | 79 + doc/html/a00359.html | 57 + doc/html/a00360.html | 57 + doc/html/a00361.html | 69 + doc/html/a00362.html | 70 + doc/html/a00363.html | 63 + doc/html/a00364.html | 63 + doc/html/a00365.html | 57 + doc/html/a00366.html | 143 + doc/html/a00367.html | 66 + doc/html/a00368.html | 57 + doc/html/a00369.html | 60 + doc/html/a00370.html | 60 + doc/html/a00371.html | 68 + doc/html/a00372.html | 66 + doc/html/a00373.html | 84 + doc/html/a00374.html | 65 + doc/html/a00375.html | 86 + doc/html/a00376.html | 83 + doc/html/a00377.html | 65 + doc/html/a00378.html | 83 + doc/html/a00379.html | 83 + doc/html/a00380.html | 70 + doc/html/a00381.html | 61 + doc/html/a00382.html | 61 + doc/html/a00383.html | 58 + doc/html/a00384.html | 57 + doc/html/a00385.html | 65 + doc/html/a00386.html | 59 + doc/html/a00387.html | 61 + doc/html/a00388.html | 60 + doc/html/a00389.html | 96 + doc/html/a00390.html | 73 + doc/html/a00391.html | 80 + doc/html/a00392.html | 57 + doc/html/a00393.html | 67 + doc/html/a00394.html | 57 + doc/html/a00395.html | 58 + doc/html/a00396.html | 58 + doc/html/a00397.html | 58 + doc/html/a00398.html | 65 + doc/html/a00399.html | 72 + doc/html/a00400.html | 71 + doc/html/a00401.html | 67 + doc/html/a00402.html | 67 + doc/html/a00403.html | 58 + doc/html/a00404.html | 76 + doc/html/a00405.html | 63 + doc/html/a00406.html | 65 + doc/html/a00407.html | 58 + doc/html/a00408.html | 57 + doc/html/a00409.html | 67 + doc/html/a00410.html | 65 + doc/html/a00411.html | 61 + doc/html/a00412.html | 58 + doc/html/a00413.html | 61 + doc/html/a00414.html | 62 + doc/html/a00415.html | 63 + doc/html/a00416.html | 75 + doc/html/a00417.html | 68 + doc/html/a00418.html | 83 + doc/html/annotated.html | 235 + doc/html/bc_s.png | Bin 0 -> 676 bytes doc/html/bdwn.png | Bin 0 -> 147 bytes doc/html/classes.html | 118 + doc/html/closed.png | Bin 0 -> 132 bytes doc/html/dir_525f2cc589630bacbdc3bb450847427e.html | 52 + doc/html/dir_63fb2cc293d133785b96e521fa051167.html | 52 + doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html | 171 + doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html | 52 + doc/html/doxygen.css | 1186 ++ doc/html/doxygen.png | Bin 0 -> 3779 bytes doc/html/dynsections.js | 97 + doc/html/files.html | 55 + doc/html/ftv2blank.png | Bin 0 -> 86 bytes doc/html/ftv2cl.png | Bin 0 -> 453 bytes doc/html/ftv2doc.png | Bin 0 -> 746 bytes doc/html/ftv2folderclosed.png | Bin 0 -> 616 bytes doc/html/ftv2folderopen.png | Bin 0 -> 597 bytes doc/html/ftv2lastnode.png | Bin 0 -> 86 bytes doc/html/ftv2link.png | Bin 0 -> 746 bytes doc/html/ftv2mlastnode.png | Bin 0 -> 246 bytes doc/html/ftv2mnode.png | Bin 0 -> 246 bytes doc/html/ftv2mo.png | Bin 0 -> 403 bytes doc/html/ftv2node.png | Bin 0 -> 86 bytes doc/html/ftv2ns.png | Bin 0 -> 388 bytes doc/html/ftv2plastnode.png | Bin 0 -> 229 bytes doc/html/ftv2pnode.png | Bin 0 -> 229 bytes doc/html/ftv2splitbar.png | Bin 0 -> 314 bytes doc/html/ftv2vertline.png | Bin 0 -> 86 bytes doc/html/functions.html | 129 + doc/html/functions_0x62.html | 113 + doc/html/functions_0x63.html | 170 + doc/html/functions_0x64.html | 123 + doc/html/functions_0x65.html | 171 + doc/html/functions_0x66.html | 111 + doc/html/functions_0x67.html | 109 + doc/html/functions_0x68.html | 90 + doc/html/functions_0x69.html | 139 + doc/html/functions_0x6a.html | 90 + doc/html/functions_0x6c.html | 110 + doc/html/functions_0x6d.html | 122 + doc/html/functions_0x6e.html | 99 + doc/html/functions_0x6f.html | 152 + doc/html/functions_0x70.html | 123 + doc/html/functions_0x71.html | 93 + doc/html/functions_0x72.html | 183 + doc/html/functions_0x73.html | 159 + doc/html/functions_0x74.html | 171 + doc/html/functions_0x75.html | 101 + doc/html/functions_0x76.html | 95 + doc/html/functions_0x77.html | 95 + doc/html/functions_0x7e.html | 165 + doc/html/functions_enum.html | 70 + doc/html/functions_eval.html | 85 + doc/html/functions_func.html | 122 + doc/html/functions_func_0x62.html | 108 + doc/html/functions_func_0x63.html | 161 + doc/html/functions_func_0x64.html | 114 + doc/html/functions_func_0x65.html | 135 + doc/html/functions_func_0x66.html | 98 + doc/html/functions_func_0x67.html | 108 + doc/html/functions_func_0x68.html | 89 + doc/html/functions_func_0x69.html | 127 + doc/html/functions_func_0x6a.html | 89 + doc/html/functions_func_0x6c.html | 106 + doc/html/functions_func_0x6d.html | 111 + doc/html/functions_func_0x6e.html | 94 + doc/html/functions_func_0x6f.html | 141 + doc/html/functions_func_0x70.html | 113 + doc/html/functions_func_0x71.html | 92 + doc/html/functions_func_0x72.html | 170 + doc/html/functions_func_0x73.html | 141 + doc/html/functions_func_0x74.html | 170 + doc/html/functions_func_0x75.html | 100 + doc/html/functions_func_0x77.html | 94 + doc/html/functions_func_0x7e.html | 164 + doc/html/functions_rela.html | 74 + doc/html/functions_type.html | 186 + doc/html/functions_vars.html | 96 + doc/html/globals.html | 85 + doc/html/globals_func.html | 85 + doc/html/hierarchy.html | 271 + doc/html/index.html | 53 + doc/html/jquery.js | 31 + doc/html/modules.html | 52 + doc/html/namespacemembers.html | 153 + doc/html/namespacemembers_enum.html | 61 + doc/html/namespacemembers_eval.html | 67 + doc/html/namespacemembers_func.html | 99 + doc/html/namespacemembers_type.html | 61 + doc/html/namespaces.html | 54 + doc/html/nav_f.png | Bin 0 -> 153 bytes doc/html/nav_g.png | Bin 0 -> 95 bytes doc/html/nav_h.png | Bin 0 -> 98 bytes doc/html/open.png | Bin 0 -> 123 bytes doc/html/pages.html | 47 + doc/html/sync_off.png | Bin 0 -> 853 bytes doc/html/sync_on.png | Bin 0 -> 845 bytes doc/html/tab_a.png | Bin 0 -> 142 bytes doc/html/tab_b.png | Bin 0 -> 169 bytes doc/html/tab_h.png | Bin 0 -> 177 bytes doc/html/tab_s.png | Bin 0 -> 184 bytes doc/html/tabs.css | 60 + download.md | 145 - examples/GettingStarted/index.html | 344 + examples/GettingStarted/sub_string_finder/Makefile | 74 + .../sub_string_finder/Makefile.windows | 59 + .../sub_string_finder/msvs/sub_string_finder.sln | 48 + .../msvs/sub_string_finder.vcxproj | 198 + .../msvs/sub_string_finder_extended.vcxproj | 198 + .../msvs/sub_string_finder_pretty.vcxproj | 198 + .../GettingStarted/sub_string_finder/readme.html | 416 + .../sub_string_finder/sub_string_finder.cpp | 78 + .../sub_string_finder_extended.cpp | 166 + .../sub_string_finder/sub_string_finder_pretty.cpp | 98 + .../sub_string_finder.xcodeproj/project.pbxproj | 573 + examples/Makefile | 159 + examples/common/copy_libraries.bat | 77 + examples/common/examples-common.inc | 38 + examples/common/gui/Makefile.gmake | 90 + examples/common/gui/Makefile.win | 74 + examples/common/gui/convideo.cpp | 136 + examples/common/gui/d2dvideo.cpp | 201 + examples/common/gui/dxcheck.bat | 28 + examples/common/gui/gdivideo.cpp | 146 + examples/common/gui/macvideo.cpp | 164 + examples/common/gui/video.h | 241 + examples/common/gui/winvideo.h | 283 + examples/common/gui/xcode/tbbExample/OpenGLView.h | 60 + examples/common/gui/xcode/tbbExample/OpenGLView.m | 147 + examples/common/gui/xcode/tbbExample/PkgInfo | 1 + .../xcode/tbbExample/en.lproj/InfoPlist.strings | 2 + .../gui/xcode/tbbExample/en.lproj/MainMenu.nib | Bin 0 -> 3312 bytes .../gui/xcode/tbbExample/en.lproj/MainMenu.xib | 48 + .../common/gui/xcode/tbbExample/iOS.storyboard | 28 + examples/common/gui/xcode/tbbExample/main.m | 51 + .../common/gui/xcode/tbbExample/tbbAppDelegate.h | 51 + .../common/gui/xcode/tbbExample/tbbAppDelegate.m | 66 + .../gui/xcode/tbbExample/tbbExample-Info.ios.plist | 44 + .../gui/xcode/tbbExample/tbbExample-Info.plist | 45 + .../gui/xcode/tbbExample/tbbExample-Prefix.pch | 36 + examples/common/gui/xvideo.cpp | 386 + examples/common/index.html | 397 + examples/common/toolset.props | 9 + examples/common/utility/fast_random.h | 82 + examples/common/utility/utility.h | 526 + .../concurrent_hash_map/count_strings/Makefile | 59 + .../count_strings/Makefile.windows | 51 + .../count_strings/count_strings.cpp | 235 + .../count_strings/msvs/count_strings.sln | 28 + .../count_strings/msvs/count_strings.vcxproj | 201 + .../concurrent_hash_map/count_strings/readme.html | 401 + .../xcode/count_strings.xcodeproj/project.pbxproj | 305 + examples/concurrent_hash_map/index.html | 344 + examples/concurrent_priority_queue/index.html | 344 + .../concurrent_priority_queue/shortpath/Makefile | 61 + .../shortpath/Makefile.windows | 50 + .../shortpath/msvs/shortpath.sln | 28 + .../shortpath/msvs/shortpath.vcxproj | 201 + .../shortpath/readme.html | 427 + .../shortpath/shortpath.cpp | 369 + .../xcode/shortpath.xcodeproj/project.pbxproj | 305 + examples/graph/binpack/Makefile | 58 + examples/graph/binpack/Makefile.windows | 50 + examples/graph/binpack/binpack.cpp | 300 + examples/graph/binpack/msvs/binpack.sln | 28 + examples/graph/binpack/msvs/binpack.vcxproj | 201 + examples/graph/binpack/readme.html | 415 + .../xcode/binpack.xcodeproj/project.pbxproj | 305 + examples/graph/cholesky/Makefile | 56 + examples/graph/cholesky/Makefile.windows | 50 + examples/graph/cholesky/cholesky.cpp | 715 + examples/graph/cholesky/init.cpp | 138 + examples/graph/cholesky/msvs/cholesky.sln | 28 + examples/graph/cholesky/msvs/cholesky.vcxproj | 206 + examples/graph/cholesky/readme.html | 415 + .../xcode/cholesky.xcodeproj/project.pbxproj | 309 + examples/graph/dining_philosophers/Makefile | 55 + .../graph/dining_philosophers/Makefile.windows | 46 + .../dining_philosophers/dining_philosophers.cpp | 306 + .../msvs/dining_philosophers.sln | 28 + .../msvs/dining_philosophers.vcxproj | 201 + examples/graph/dining_philosophers/readme.html | 383 + .../dining_philosophers.xcodeproj/project.pbxproj | 305 + examples/graph/fgbzip2/Makefile | 57 + examples/graph/fgbzip2/Makefile.windows | 54 + examples/graph/fgbzip2/blocksort.cpp | 1146 ++ examples/graph/fgbzip2/bzlib.cpp | 1624 ++ examples/graph/fgbzip2/bzlib.h | 334 + examples/graph/fgbzip2/bzlib_private.h | 561 + examples/graph/fgbzip2/compress.cpp | 724 + examples/graph/fgbzip2/crctable.cpp | 156 + examples/graph/fgbzip2/decompress.cpp | 698 + examples/graph/fgbzip2/fgbzip2.cpp | 501 + examples/graph/fgbzip2/huffman.cpp | 257 + examples/graph/fgbzip2/msvs/fgbzip2.sln | 28 + examples/graph/fgbzip2/msvs/fgbzip2.vcxproj | 216 + examples/graph/fgbzip2/randtable.cpp | 136 + examples/graph/fgbzip2/readme.html | 466 + .../xcode/fgbzip2.xcodeproj/project.pbxproj | 265 + examples/graph/index.html | 358 + examples/graph/logic_sim/D_latch.h | 60 + examples/graph/logic_sim/Makefile | 57 + examples/graph/logic_sim/Makefile.windows | 53 + examples/graph/logic_sim/basics.h | 560 + examples/graph/logic_sim/four_bit_adder.h | 62 + examples/graph/logic_sim/msvs/logic_sim.sln | 28 + examples/graph/logic_sim/msvs/logic_sim.vcxproj | 201 + examples/graph/logic_sim/one_bit_adder.h | 103 + examples/graph/logic_sim/readme.html | 406 + examples/graph/logic_sim/test_all.cpp | 646 + examples/graph/logic_sim/two_bit_adder.h | 59 + examples/graph/matmult/Makefile | 56 + examples/graph/matmult/Makefile.windows | 53 + examples/graph/matmult/matmult.cpp | 374 + examples/graph/matmult/msvs/matmult.sln | 28 + examples/graph/matmult/msvs/matmult.vcxproj | 145 + examples/graph/matmult/readme.html | 414 + examples/graph/som/Makefile | 60 + examples/graph/som/Makefile.windows | 46 + examples/graph/som/msvs/som.sln | 28 + examples/graph/som/msvs/som.vcxproj | 217 + examples/graph/som/readme.html | 391 + examples/graph/som/som.cpp | 217 + examples/graph/som/som.h | 161 + examples/graph/som/som_graph.cpp | 423 + .../graph/som/xcode/som.xcodeproj/project.pbxproj | 313 + examples/graph/stereo/Makefile | 72 + examples/graph/stereo/Makefile.windows | 57 + examples/graph/stereo/imageEffects.cl | 56 + examples/graph/stereo/lodepng.cpp | 6227 +++++++ examples/graph/stereo/lodepng.h | 1778 ++ examples/graph/stereo/msvs/stereo.sln | 28 + examples/graph/stereo/msvs/stereo.vcxproj | 163 + examples/graph/stereo/readme.html | 445 + examples/graph/stereo/stereo.cpp | 439 + examples/graph/stereo/utils.h | 104 + .../stereo/xcode/stereo.xcodeproj/project.pbxproj | 321 + examples/index.html | 575 + examples/parallel_do/index.html | 344 + examples/parallel_do/parallel_preorder/Graph.cpp | 101 + examples/parallel_do/parallel_preorder/Graph.h | 80 + examples/parallel_do/parallel_preorder/Makefile | 63 + .../parallel_do/parallel_preorder/Makefile.windows | 54 + examples/parallel_do/parallel_preorder/Matrix.h | 60 + examples/parallel_do/parallel_preorder/main.cpp | 93 + .../parallel_preorder/msvs/parallel_preorder.sln | 28 + .../msvs/parallel_preorder.vcxproj | 207 + .../parallel_preorder/parallel_preorder.cpp | 56 + examples/parallel_do/parallel_preorder/readme.html | 444 + .../parallel_preorder.xcodeproj/project.pbxproj | 317 + examples/parallel_for/game_of_life/Makefile | 53 + .../parallel_for/game_of_life/Makefile.windows | 46 + .../game_of_life/msvs/Game_of_life.sln | 40 + .../game_of_life/msvs/Game_of_life.vcxproj | 451 + examples/parallel_for/game_of_life/msvs/app.ico | Bin 0 -> 1078 bytes examples/parallel_for/game_of_life/msvs/app.rc | 63 + examples/parallel_for/game_of_life/msvs/resource.h | 23 + examples/parallel_for/game_of_life/readme.html | 392 + .../parallel_for/game_of_life/src/AssemblyInfo.cpp | 58 + examples/parallel_for/game_of_life/src/Board.h | 107 + .../parallel_for/game_of_life/src/Evolution.cpp | 243 + examples/parallel_for/game_of_life/src/Evolution.h | 195 + examples/parallel_for/game_of_life/src/Form1.h | 306 + .../parallel_for/game_of_life/src/Game_of_life.cpp | 230 + .../parallel_for/game_of_life/src/Update_state.cpp | 402 + .../xcode/game_of_life.xcodeproj/project.pbxproj | 317 + examples/parallel_for/index.html | 350 + examples/parallel_for/polygon_overlay/Makefile | 90 + .../parallel_for/polygon_overlay/Makefile.windows | 60 + .../polygon_overlay/msvs/polygon_overlay.sln | 40 + .../parallel_for/polygon_overlay/msvs/pover.rc | 61 + .../polygon_overlay/msvs/pover.vcxproj | 448 + .../parallel_for/polygon_overlay/msvs/resource.h | 34 + examples/parallel_for/polygon_overlay/polymain.cpp | 620 + examples/parallel_for/polygon_overlay/polymain.h | 45 + examples/parallel_for/polygon_overlay/polyover.cpp | 668 + examples/parallel_for/polygon_overlay/polyover.h | 41 + .../parallel_for/polygon_overlay/pover_global.h | 93 + .../parallel_for/polygon_overlay/pover_video.cpp | 175 + .../parallel_for/polygon_overlay/pover_video.h | 64 + examples/parallel_for/polygon_overlay/readme.html | 476 + examples/parallel_for/polygon_overlay/rpolygon.h | 155 + examples/parallel_for/polygon_overlay/speedup.gif | Bin 0 -> 7162 bytes .../polygon_overlay.xcodeproj/project.pbxproj | 527 + .../xcshareddata/xcschemes/tbbExample.ios.xcscheme | 91 + .../xcshareddata/xcschemes/tbbExample.xcscheme | 99 + examples/parallel_for/seismic/Makefile | 97 + examples/parallel_for/seismic/Makefile.windows | 67 + examples/parallel_for/seismic/main.cpp | 151 + .../seismic/msvs/SeismicSimulation.ico | Bin 0 -> 23558 bytes .../parallel_for/seismic/msvs/SeismicSimulation.rc | 145 + .../seismic/msvs/SeismicSimulation.vcxproj | 451 + examples/parallel_for/seismic/msvs/resource.h | 52 + examples/parallel_for/seismic/msvs/seismic.sln | 40 + examples/parallel_for/seismic/msvs/small.ico | Bin 0 -> 23558 bytes examples/parallel_for/seismic/readme.html | 471 + examples/parallel_for/seismic/seismic_video.cpp | 148 + examples/parallel_for/seismic/seismic_video.h | 54 + examples/parallel_for/seismic/universe.cpp | 221 + examples/parallel_for/seismic/universe.h | 118 + .../xcode/seismic.xcodeproj/project.pbxproj | 548 + .../xcshareddata/xcschemes/tbbExample.ios.xcscheme | 119 + .../xcshareddata/xcschemes/tbbExample.xcscheme | 99 + examples/parallel_for/tachyon/Makefile | 184 + examples/parallel_for/tachyon/Makefile.windows | 150 + examples/parallel_for/tachyon/dat/820spheres.dat | 1671 ++ examples/parallel_for/tachyon/dat/balls.dat | 14804 +++++++++++++++ examples/parallel_for/tachyon/dat/balls3.dat | 14804 +++++++++++++++ examples/parallel_for/tachyon/dat/lattice.dat | 18012 +++++++++++++++++++ examples/parallel_for/tachyon/dat/model2.dat | 104 + examples/parallel_for/tachyon/dat/teapot.dat | 9279 ++++++++++ examples/parallel_for/tachyon/dat/trypsin4pti.dat | 538 + examples/parallel_for/tachyon/msvs/gui.ico | Bin 0 -> 23558 bytes examples/parallel_for/tachyon/msvs/gui.rc | 90 + examples/parallel_for/tachyon/msvs/resource.h | 28 + examples/parallel_for/tachyon/msvs/small.ico | Bin 0 -> 23558 bytes .../tachyon/msvs/tachyon.serial.vcxproj | 393 + examples/parallel_for/tachyon/msvs/tachyon.sln | 94 + .../parallel_for/tachyon/msvs/tachyon.tbb.vcxproj | 445 + .../tachyon/msvs/tachyon.tbb1d.vcxproj | 445 + examples/parallel_for/tachyon/msvs/tachyon.vcxproj | 455 + examples/parallel_for/tachyon/msvs/win8ui/App.xaml | 15 + .../parallel_for/tachyon/msvs/win8ui/App.xaml.cpp | 54 + .../parallel_for/tachyon/msvs/win8ui/App.xaml.h | 41 + .../tachyon/msvs/win8ui/Assets/Logo.png | Bin 0 -> 35141 bytes .../tachyon/msvs/win8ui/Assets/SmallLogo.png | Bin 0 -> 2552 bytes .../tachyon/msvs/win8ui/Assets/SplashScreen.png | Bin 0 -> 144360 bytes .../tachyon/msvs/win8ui/Assets/StoreLogo.png | Bin 0 -> 6321 bytes .../tachyon/msvs/win8ui/Common/StandardStyles.xaml | 1007 ++ .../tachyon/msvs/win8ui/DirectXBase.cpp | 413 + .../parallel_for/tachyon/msvs/win8ui/DirectXBase.h | 92 + .../tachyon/msvs/win8ui/DirectXPage.xaml | 31 + .../tachyon/msvs/win8ui/DirectXPage.xaml.cpp | 133 + .../tachyon/msvs/win8ui/DirectXPage.xaml.h | 48 + .../tachyon/msvs/win8ui/Package.appxmanifest | 30 + .../msvs/win8ui/copy_libraries_and_assets.bat | 69 + examples/parallel_for/tachyon/msvs/win8ui/pch.h | 29 + .../tachyon/msvs/win8ui/tbbTachyon.sln | 32 + .../tachyon/msvs/win8ui/tbbTachyon.vcxproj | 239 + .../tachyon/msvs/win8ui/tbbTachyon.vcxproj.filters | 215 + .../tachyon/msvs/win8ui/tbbTachyonRenderer.cpp | 190 + .../tachyon/msvs/win8ui/tbbTachyonRenderer.h | 46 + examples/parallel_for/tachyon/readme.html | 572 + examples/parallel_for/tachyon/src/api.cpp | 418 + examples/parallel_for/tachyon/src/api.h | 208 + examples/parallel_for/tachyon/src/apigeom.cpp | 268 + examples/parallel_for/tachyon/src/apitrigeom.cpp | 226 + examples/parallel_for/tachyon/src/apitrigeom.h | 60 + examples/parallel_for/tachyon/src/bndbox.cpp | 182 + examples/parallel_for/tachyon/src/bndbox.h | 74 + examples/parallel_for/tachyon/src/box.cpp | 168 + examples/parallel_for/tachyon/src/box.h | 69 + examples/parallel_for/tachyon/src/camera.cpp | 109 + examples/parallel_for/tachyon/src/camera.h | 56 + examples/parallel_for/tachyon/src/coordsys.cpp | 96 + examples/parallel_for/tachyon/src/coordsys.h | 60 + examples/parallel_for/tachyon/src/cylinder.cpp | 271 + examples/parallel_for/tachyon/src/cylinder.h | 78 + examples/parallel_for/tachyon/src/extvol.cpp | 311 + examples/parallel_for/tachyon/src/extvol.h | 73 + examples/parallel_for/tachyon/src/global.cpp | 74 + examples/parallel_for/tachyon/src/global.h | 68 + examples/parallel_for/tachyon/src/grid.cpp | 679 + examples/parallel_for/tachyon/src/grid.h | 120 + examples/parallel_for/tachyon/src/imageio.cpp | 147 + examples/parallel_for/tachyon/src/imageio.h | 65 + examples/parallel_for/tachyon/src/imap.cpp | 168 + examples/parallel_for/tachyon/src/imap.h | 61 + examples/parallel_for/tachyon/src/intersect.cpp | 177 + examples/parallel_for/tachyon/src/intersect.h | 67 + examples/parallel_for/tachyon/src/jpeg.cpp | 129 + examples/parallel_for/tachyon/src/jpeg.h | 56 + examples/parallel_for/tachyon/src/light.cpp | 128 + examples/parallel_for/tachyon/src/light.h | 71 + examples/parallel_for/tachyon/src/machine.h | 66 + examples/parallel_for/tachyon/src/macros.h | 79 + examples/parallel_for/tachyon/src/main.cpp | 385 + examples/parallel_for/tachyon/src/objbound.cpp | 336 + examples/parallel_for/tachyon/src/objbound.h | 66 + examples/parallel_for/tachyon/src/parse.cpp | 863 + examples/parallel_for/tachyon/src/parse.h | 111 + examples/parallel_for/tachyon/src/plane.cpp | 105 + examples/parallel_for/tachyon/src/plane.h | 72 + examples/parallel_for/tachyon/src/ppm.cpp | 129 + examples/parallel_for/tachyon/src/ppm.h | 60 + examples/parallel_for/tachyon/src/pthread.cpp | 156 + examples/parallel_for/tachyon/src/pthread_w.h | 109 + examples/parallel_for/tachyon/src/quadric.cpp | 170 + examples/parallel_for/tachyon/src/quadric.h | 75 + examples/parallel_for/tachyon/src/render.cpp | 91 + examples/parallel_for/tachyon/src/render.h | 57 + examples/parallel_for/tachyon/src/ring.cpp | 131 + examples/parallel_for/tachyon/src/ring.h | 73 + examples/parallel_for/tachyon/src/shade.cpp | 258 + examples/parallel_for/tachyon/src/shade.h | 62 + examples/parallel_for/tachyon/src/sphere.cpp | 133 + examples/parallel_for/tachyon/src/sphere.h | 73 + .../parallel_for/tachyon/src/tachyon_video.cpp | 120 + examples/parallel_for/tachyon/src/tachyon_video.h | 62 + examples/parallel_for/tachyon/src/texture.cpp | 385 + examples/parallel_for/tachyon/src/texture.h | 69 + examples/parallel_for/tachyon/src/tgafile.cpp | 237 + examples/parallel_for/tachyon/src/tgafile.h | 61 + examples/parallel_for/tachyon/src/trace.h | 98 + examples/parallel_for/tachyon/src/trace.serial.cpp | 177 + examples/parallel_for/tachyon/src/trace.simple.cpp | 182 + examples/parallel_for/tachyon/src/trace.tbb.cpp | 269 + examples/parallel_for/tachyon/src/trace.tbb1d.cpp | 205 + examples/parallel_for/tachyon/src/trace_rest.cpp | 138 + examples/parallel_for/tachyon/src/triangle.cpp | 245 + examples/parallel_for/tachyon/src/triangle.h | 94 + examples/parallel_for/tachyon/src/types.h | 226 + examples/parallel_for/tachyon/src/ui.cpp | 115 + examples/parallel_for/tachyon/src/ui.h | 68 + examples/parallel_for/tachyon/src/util.cpp | 175 + examples/parallel_for/tachyon/src/util.h | 88 + examples/parallel_for/tachyon/src/vector.cpp | 134 + examples/parallel_for/tachyon/src/vector.h | 68 + examples/parallel_for/tachyon/src/vol.cpp | 302 + examples/parallel_for/tachyon/src/vol.h | 63 + .../xcode/tachyon.xcodeproj/project.pbxproj | 1205 ++ .../xcshareddata/xcschemes/tachyon.serial.xcscheme | 104 + .../xcschemes/tachyon.tbb.ios.xcscheme | 97 + .../xcshareddata/xcschemes/tachyon.tbb.xcscheme | 105 + .../xcshareddata/xcschemes/tachyon.tbb1d.xcscheme | 105 + examples/parallel_reduce/convex_hull/Makefile | 64 + .../parallel_reduce/convex_hull/Makefile.windows | 56 + examples/parallel_reduce/convex_hull/convex_hull.h | 188 + .../convex_hull/convex_hull_bench.cpp | 635 + .../convex_hull/convex_hull_sample.cpp | 297 + .../convex_hull/msvs/convex_hull.sln | 38 + .../convex_hull/msvs/convex_hull_benchmark.vcxproj | 206 + .../convex_hull/msvs/convex_hull_sample.vcxproj | 203 + examples/parallel_reduce/convex_hull/readme.html | 400 + .../xcode/convex_hull.xcodeproj/project.pbxproj | 441 + examples/parallel_reduce/index.html | 346 + examples/parallel_reduce/primes/Makefile | 68 + examples/parallel_reduce/primes/Makefile.windows | 52 + examples/parallel_reduce/primes/main.cpp | 124 + examples/parallel_reduce/primes/msvs/primes.sln | 28 + .../parallel_reduce/primes/msvs/primes.vcxproj | 205 + examples/parallel_reduce/primes/primes.cpp | 309 + examples/parallel_reduce/primes/primes.h | 44 + examples/parallel_reduce/primes/readme.html | 407 + .../primes/xcode/primes.xcodeproj/project.pbxproj | 311 + examples/pipeline/index.html | 344 + examples/pipeline/square/Makefile | 61 + examples/pipeline/square/Makefile.windows | 50 + examples/pipeline/square/gen_input.cpp | 62 + examples/pipeline/square/msvs/square.sln | 28 + examples/pipeline/square/msvs/square.vcxproj | 202 + examples/pipeline/square/readme.html | 417 + examples/pipeline/square/square.cpp | 279 + .../square/xcode/square.xcodeproj/project.pbxproj | 309 + examples/task/index.html | 344 + examples/task/tree_sum/Makefile | 59 + examples/task/tree_sum/Makefile.windows | 52 + .../task/tree_sum/OptimizedParallelSumTree.cpp | 69 + examples/task/tree_sum/SerialSumTree.cpp | 30 + examples/task/tree_sum/SimpleParallelSumTree.cpp | 62 + examples/task/tree_sum/TreeMaker.h | 116 + examples/task/tree_sum/common.h | 36 + examples/task/tree_sum/main.cpp | 108 + examples/task/tree_sum/msvs/tree_sum.sln | 28 + examples/task/tree_sum/msvs/tree_sum.vcxproj | 208 + examples/task/tree_sum/readme.html | 423 + .../xcode/tree_sum.xcodeproj/project.pbxproj | 325 + examples/task_arena/fractal/Makefile | 87 + examples/task_arena/fractal/Makefile.windows | 66 + examples/task_arena/fractal/fractal.cpp | 305 + examples/task_arena/fractal/fractal.h | 163 + examples/task_arena/fractal/fractal_video.h | 90 + examples/task_arena/fractal/main.cpp | 92 + examples/task_arena/fractal/msvs/fractal.sln | 40 + examples/task_arena/fractal/msvs/fractal.vcxproj | 450 + examples/task_arena/fractal/msvs/gui.ico | Bin 0 -> 23558 bytes examples/task_arena/fractal/msvs/gui.rc | 90 + examples/task_arena/fractal/msvs/resource.h | 28 + examples/task_arena/fractal/msvs/small.ico | Bin 0 -> 23558 bytes examples/task_arena/fractal/readme.html | 447 + .../xcode/fractal.xcodeproj/project.pbxproj | 529 + .../xcshareddata/xcschemes/tbbExample.ios.xcscheme | 91 + .../xcshareddata/xcschemes/tbbExample.xcscheme | 93 + examples/task_arena/index.html | 343 + examples/task_group/index.html | 343 + examples/task_group/sudoku/Makefile | 74 + examples/task_group/sudoku/Makefile.windows | 50 + examples/task_group/sudoku/input1 | 19 + examples/task_group/sudoku/input2 | 18 + examples/task_group/sudoku/input3 | 19 + examples/task_group/sudoku/input4 | 19 + examples/task_group/sudoku/msvs/sudoku.sln | 28 + examples/task_group/sudoku/msvs/sudoku.vcxproj | 201 + examples/task_group/sudoku/readme.html | 417 + examples/task_group/sudoku/sudoku.cpp | 333 + .../sudoku/xcode/sudoku.xcodeproj/project.pbxproj | 305 + examples/test_all/fibonacci/Fibonacci.cpp | 609 + examples/test_all/fibonacci/Makefile | 52 + examples/test_all/fibonacci/Makefile.windows | 45 + examples/test_all/fibonacci/msvs/fibonacci.sln | 28 + examples/test_all/fibonacci/msvs/fibonacci.vcxproj | 201 + examples/test_all/fibonacci/readme.html | 402 + .../xcode/fibonacci.xcodeproj/project.pbxproj | 305 + examples/test_all/index.html | 344 + include/index.html | 25 + include/serial/tbb/parallel_for.h | 219 + include/serial/tbb/tbb_annotate.h | 36 + include/tbb/aggregator.h | 202 + include/tbb/aligned_space.h | 47 + include/tbb/atomic.h | 558 + include/tbb/blocked_range.h | 158 + include/tbb/blocked_range2d.h | 108 + include/tbb/blocked_range3d.h | 127 + include/tbb/cache_aligned_allocator.h | 137 + include/tbb/combinable.h | 85 + include/tbb/compat/condition_variable | 476 + include/tbb/compat/ppl.h | 62 + include/tbb/compat/thread | 60 + include/tbb/compat/tuple | 488 + include/tbb/concurrent_hash_map.h | 1499 ++ include/tbb/concurrent_lru_cache.h | 287 + include/tbb/concurrent_priority_queue.h | 490 + include/tbb/concurrent_queue.h | 458 + include/tbb/concurrent_unordered_map.h | 299 + include/tbb/concurrent_unordered_set.h | 256 + include/tbb/concurrent_vector.h | 1363 ++ include/tbb/critical_section.h | 133 + include/tbb/enumerable_thread_specific.h | 1137 ++ include/tbb/flow_graph.h | 4252 +++++ include/tbb/flow_graph_abstractions.h | 57 + include/tbb/flow_graph_opencl_node.h | 1481 ++ include/tbb/gfx_factory.h | 359 + include/tbb/global_control.h | 86 + include/tbb/index.html | 29 + include/tbb/internal/_aggregator_impl.h | 184 + include/tbb/internal/_concurrent_queue_impl.h | 1075 ++ include/tbb/internal/_concurrent_unordered_impl.h | 1518 ++ include/tbb/internal/_flow_graph_async_msg_impl.h | 157 + include/tbb/internal/_flow_graph_impl.h | 847 + include/tbb/internal/_flow_graph_indexer_impl.h | 484 + .../tbb/internal/_flow_graph_item_buffer_impl.h | 288 + include/tbb/internal/_flow_graph_join_impl.h | 2003 +++ include/tbb/internal/_flow_graph_node_impl.h | 829 + include/tbb/internal/_flow_graph_streaming_node.h | 745 + .../tbb/internal/_flow_graph_tagged_buffer_impl.h | 253 + include/tbb/internal/_flow_graph_trace_impl.h | 304 + include/tbb/internal/_flow_graph_types_impl.h | 713 + include/tbb/internal/_mutex_padding.h | 102 + include/tbb/internal/_range_iterator.h | 70 + include/tbb/internal/_tbb_hash_compare_impl.h | 109 + include/tbb/internal/_tbb_strings.h | 68 + include/tbb/internal/_tbb_windef.h | 73 + include/tbb/internal/_template_helpers.h | 158 + include/tbb/internal/_x86_eliding_mutex_impl.h | 148 + include/tbb/internal/_x86_rtm_rw_mutex_impl.h | 225 + include/tbb/machine/gcc_armv7.h | 217 + include/tbb/machine/gcc_generic.h | 184 + include/tbb/machine/gcc_ia32_common.h | 112 + include/tbb/machine/gcc_itsx.h | 123 + include/tbb/machine/ibm_aix51.h | 70 + include/tbb/machine/icc_generic.h | 262 + include/tbb/machine/linux_common.h | 84 + include/tbb/machine/linux_ia32.h | 232 + include/tbb/machine/linux_ia64.h | 181 + include/tbb/machine/linux_intel64.h | 96 + include/tbb/machine/mac_ppc.h | 313 + include/tbb/machine/macos_common.h | 133 + include/tbb/machine/mic_common.h | 57 + include/tbb/machine/msvc_armv7.h | 171 + include/tbb/machine/msvc_ia32_common.h | 280 + include/tbb/machine/sunos_sparc.h | 203 + include/tbb/machine/windows_api.h | 69 + include/tbb/machine/windows_ia32.h | 109 + include/tbb/machine/windows_intel64.h | 74 + include/tbb/memory_pool.h | 279 + include/tbb/mutex.h | 233 + include/tbb/null_mutex.h | 54 + include/tbb/null_rw_mutex.h | 56 + include/tbb/parallel_do.h | 551 + include/tbb/parallel_for.h | 407 + include/tbb/parallel_for_each.h | 137 + include/tbb/parallel_invoke.h | 455 + include/tbb/parallel_reduce.h | 569 + include/tbb/parallel_scan.h | 348 + include/tbb/parallel_sort.h | 266 + include/tbb/parallel_while.h | 186 + include/tbb/partitioner.h | 680 + include/tbb/pipeline.h | 665 + include/tbb/queuing_mutex.h | 110 + include/tbb/queuing_rw_mutex.h | 150 + include/tbb/reader_writer_lock.h | 232 + include/tbb/recursive_mutex.h | 234 + include/tbb/runtime_loader.h | 180 + include/tbb/scalable_allocator.h | 342 + include/tbb/spin_mutex.h | 212 + include/tbb/spin_rw_mutex.h | 259 + include/tbb/task.h | 1056 ++ include/tbb/task_arena.h | 407 + include/tbb/task_group.h | 243 + include/tbb/task_scheduler_init.h | 161 + include/tbb/task_scheduler_observer.h | 174 + include/tbb/tbb.h | 85 + include/tbb/tbb_allocator.h | 207 + include/tbb/tbb_config.h | 774 + include/tbb/tbb_disable_exceptions.h | 35 + include/tbb/tbb_exception.h | 360 + include/tbb/tbb_machine.h | 982 + include/tbb/tbb_profiling.h | 284 + include/tbb/tbb_stddef.h | 549 + include/tbb/tbb_thread.h | 332 + include/tbb/tbbmalloc_proxy.h | 66 + include/tbb/tick_count.h | 140 + index.html | 50 + jni/Android.mk | 66 + jni/Application.mk | 68 + python/Makefile | 38 + python/index.html | 75 + python/setup.py | 116 + python/tbb.i | 145 + python/tbb.src.py | 840 + src/Makefile | 269 + src/index.html | 76 + src/old/concurrent_queue_v2.cpp | 367 + src/old/concurrent_queue_v2.h | 324 + src/old/concurrent_vector_v2.cpp | 256 + src/old/concurrent_vector_v2.h | 512 + src/old/spin_rw_mutex_v2.cpp | 156 + src/old/spin_rw_mutex_v2.h | 175 + src/old/task_v2.cpp | 38 + src/old/test_concurrent_queue_v2.cpp | 348 + src/old/test_concurrent_vector_v2.cpp | 558 + src/old/test_mutex_v2.cpp | 242 + src/old/test_task_scheduler_observer_v3.cpp | 121 + src/perf/coarse_grained_raii_lru_cache.h | 147 + src/perf/cpq_pdes.cpp | 230 + src/perf/fibonacci_impl_tbb.cpp | 78 + src/perf/perf.cpp | 860 + src/perf/perf.h | 257 + src/perf/perf_sched.cpp | 456 + src/perf/run_statistics.sh | 32 + src/perf/statistics.cpp | 444 + src/perf/statistics.h | 191 + src/perf/statistics_xml.h | 200 + src/perf/time_cpq_throughput_test.cpp | 294 + src/perf/time_fibonacci_cutoff.cpp | 130 + src/perf/time_framework.h | 351 + src/perf/time_hash_map.cpp | 261 + src/perf/time_hash_map_fill.cpp | 167 + src/perf/time_hash_map_fill.html | 122 + src/perf/time_locked_work.cpp | 166 + src/perf/time_lru_cache_throughput.cpp | 217 + src/perf/time_parallel_for_each.cpp | 70 + src/perf/time_sandbox.h | 171 + src/perf/time_split_node.cpp | 120 + src/perf/time_vector.cpp | 249 + src/rml/client/index.html | 42 + src/rml/client/library_assert.h | 34 + src/rml/client/omp_dynamic_link.cpp | 24 + src/rml/client/omp_dynamic_link.h | 30 + src/rml/client/rml_factory.h | 94 + src/rml/client/rml_omp.cpp | 46 + src/rml/client/rml_tbb.cpp | 48 + src/rml/include/index.html | 29 + src/rml/include/rml_base.h | 188 + src/rml/include/rml_omp.h | 130 + src/rml/include/rml_tbb.h | 101 + src/rml/index.html | 31 + src/rml/perfor/omp_nested.cpp | 144 + src/rml/perfor/omp_simple.cpp | 160 + src/rml/perfor/tbb_multi_omp.cpp | 186 + src/rml/perfor/tbb_simple.cpp | 191 + src/rml/perfor/thread_level.h | 134 + src/rml/server/index.html | 18 + src/rml/server/irml.rc | 116 + src/rml/server/job_automaton.h | 145 + src/rml/server/lin-rml-export.def | 30 + src/rml/server/rml_server.cpp | 3309 ++++ src/rml/server/thread_monitor.h | 270 + src/rml/server/wait_counter.h | 73 + src/rml/server/win32-rml-export.def | 27 + src/rml/server/win64-rml-export.def | 27 + src/rml/test/rml_omp_stub.cpp | 72 + src/rml/test/test_job_automaton.cpp | 152 + src/rml/test/test_rml_mixed.cpp | 318 + src/rml/test/test_rml_omp.cpp | 203 + src/rml/test/test_rml_omp_c_linkage.c | 26 + src/rml/test/test_rml_tbb.cpp | 205 + src/rml/test/test_server.h | 433 + src/rml/test/test_thread_monitor.cpp | 117 + src/tbb/arena.cpp | 993 + src/tbb/arena.h | 459 + src/tbb/cache_aligned_allocator.cpp | 258 + src/tbb/cilk-tbb-interop.h | 115 + src/tbb/concurrent_hash_map.cpp | 58 + src/tbb/concurrent_monitor.cpp | 137 + src/tbb/concurrent_monitor.h | 241 + src/tbb/concurrent_queue.cpp | 676 + src/tbb/concurrent_vector.cpp | 618 + src/tbb/condition_variable.cpp | 199 + src/tbb/critical_section.cpp | 31 + src/tbb/custom_scheduler.h | 706 + src/tbb/dynamic_link.cpp | 578 + src/tbb/dynamic_link.h | 121 + src/tbb/governor.cpp | 379 + src/tbb/governor.h | 163 + src/tbb/ia32-masm/atomic_support.asm | 188 + src/tbb/ia32-masm/itsx.asm | 80 + src/tbb/ia32-masm/lock_byte.asm | 38 + src/tbb/ia64-gas/atomic_support.s | 670 + src/tbb/ia64-gas/ia64_misc.s | 99 + src/tbb/ia64-gas/lock_byte.s | 46 + src/tbb/ia64-gas/log2.s | 58 + src/tbb/ia64-gas/pause.s | 33 + src/tbb/ibm_aix51/atomic_support.c | 55 + src/tbb/index.html | 31 + src/tbb/intel64-masm/atomic_support.asm | 72 + src/tbb/intel64-masm/intel64_misc.asm | 33 + src/tbb/intel64-masm/itsx.asm | 76 + src/tbb/intrusive_list.h | 246 + src/tbb/itt_notify.cpp | 98 + src/tbb/itt_notify.h | 128 + src/tbb/lin32-tbb-export.def | 49 + src/tbb/lin32-tbb-export.lst | 404 + src/tbb/lin64-tbb-export.def | 46 + src/tbb/lin64-tbb-export.lst | 385 + src/tbb/lin64ipf-tbb-export.def | 48 + src/tbb/lin64ipf-tbb-export.lst | 417 + src/tbb/mac32-tbb-export.def | 23 + src/tbb/mac32-tbb-export.lst | 403 + src/tbb/mac64-tbb-export.def | 23 + src/tbb/mac64-tbb-export.lst | 400 + src/tbb/mailbox.h | 235 + src/tbb/market.cpp | 866 + src/tbb/market.h | 372 + src/tbb/mutex.cpp | 152 + src/tbb/observer_proxy.cpp | 426 + src/tbb/observer_proxy.h | 176 + src/tbb/pipeline.cpp | 781 + src/tbb/private_server.cpp | 416 + src/tbb/queuing_mutex.cpp | 108 + src/tbb/queuing_rw_mutex.cpp | 492 + src/tbb/reader_writer_lock.cpp | 347 + src/tbb/recursive_mutex.cpp | 136 + src/tbb/scheduler.cpp | 1340 ++ src/tbb/scheduler.h | 732 + src/tbb/scheduler_common.h | 444 + src/tbb/scheduler_utility.h | 133 + src/tbb/semaphore.cpp | 94 + src/tbb/semaphore.h | 254 + src/tbb/spin_mutex.cpp | 58 + src/tbb/spin_rw_mutex.cpp | 159 + src/tbb/task.cpp | 277 + src/tbb/task_group_context.cpp | 489 + src/tbb/task_stream.h | 172 + src/tbb/tbb_assert_impl.h | 103 + src/tbb/tbb_main.cpp | 563 + src/tbb/tbb_main.h | 96 + src/tbb/tbb_misc.cpp | 321 + src/tbb/tbb_misc.h | 275 + src/tbb/tbb_misc_ex.cpp | 405 + src/tbb/tbb_resource.rc | 116 + src/tbb/tbb_statistics.cpp | 187 + src/tbb/tbb_statistics.h | 240 + src/tbb/tbb_thread.cpp | 196 + src/tbb/tbb_version.h | 119 + src/tbb/tls.h | 124 + src/tbb/tools_api/disable_warnings.h | 39 + src/tbb/tools_api/ittnotify.h | 3837 ++++ src/tbb/tools_api/ittnotify_config.h | 503 + src/tbb/tools_api/ittnotify_static.c | 1042 ++ src/tbb/tools_api/ittnotify_static.h | 328 + src/tbb/tools_api/ittnotify_types.h | 77 + src/tbb/tools_api/legacy/ittnotify.h | 1002 ++ src/tbb/win32-tbb-export.def | 28 + src/tbb/win32-tbb-export.lst | 344 + src/tbb/win64-gcc-tbb-export.def | 44 + src/tbb/win64-gcc-tbb-export.lst | 384 + src/tbb/win64-tbb-export.def | 26 + src/tbb/win64-tbb-export.lst | 339 + src/tbb/winrt-tbb-export.lst | 300 + src/tbb/x86_rtm_rw_mutex.cpp | 277 + src/tbbmalloc/Customize.h | 231 + src/tbbmalloc/MapMemory.h | 121 + src/tbbmalloc/Statistics.h | 129 + src/tbbmalloc/TypeDefinitions.h | 62 + src/tbbmalloc/backend.cpp | 1554 ++ src/tbbmalloc/backref.cpp | 342 + src/tbbmalloc/frontend.cpp | 3207 ++++ src/tbbmalloc/index.html | 54 + src/tbbmalloc/large_objects.cpp | 976 + src/tbbmalloc/lin32-proxy-export.def | 59 + src/tbbmalloc/lin32-tbbmalloc-export.def | 76 + src/tbbmalloc/lin64-proxy-export.def | 59 + src/tbbmalloc/lin64-tbbmalloc-export.def | 76 + src/tbbmalloc/lin64ipf-proxy-export.def | 59 + src/tbbmalloc/lin64ipf-tbbmalloc-export.def | 76 + src/tbbmalloc/mac32-tbbmalloc-export.def | 48 + src/tbbmalloc/mac64-tbbmalloc-export.def | 48 + src/tbbmalloc/proxy.cpp | 692 + src/tbbmalloc/proxy.h | 66 + src/tbbmalloc/proxy_overload_osx.h | 190 + src/tbbmalloc/shared_utils.h | 89 + src/tbbmalloc/tbb_function_replacement.cpp | 482 + src/tbbmalloc/tbb_function_replacement.h | 79 + src/tbbmalloc/tbbmalloc.cpp | 122 + src/tbbmalloc/tbbmalloc.rc | 119 + src/tbbmalloc/tbbmalloc_internal.h | 1153 ++ src/tbbmalloc/tbbmalloc_internal_api.h | 44 + src/tbbmalloc/win32-gcc-tbbmalloc-export.def | 52 + src/tbbmalloc/win32-tbbmalloc-export.def | 47 + src/tbbmalloc/win64-gcc-tbbmalloc-export.def | 52 + src/tbbmalloc/win64-tbbmalloc-export.def | 48 + src/tbbproxy/tbbproxy-windows.asm | 111 + src/tbbproxy/tbbproxy.cpp | 612 + src/test/harness.h | 836 + src/test/harness_allocator.h | 620 + src/test/harness_allocator_overload.h | 39 + src/test/harness_assert.h | 41 + src/test/harness_bad_expr.h | 77 + src/test/harness_barrier.h | 140 + src/test/harness_checktype.h | 99 + src/test/harness_concurrency.h | 105 + src/test/harness_concurrency_tracker.h | 174 + src/test/harness_cpu.h | 120 + src/test/harness_defs.h | 196 + src/test/harness_dynamic_libs.h | 122 + src/test/harness_eh.h | 317 + src/test/harness_fp.h | 172 + src/test/harness_graph.h | 1027 ++ src/test/harness_inject_scheduler.h | 86 + src/test/harness_iterator.h | 164 + src/test/harness_m128.h | 114 + src/test/harness_memory.h | 113 + src/test/harness_mic.h | 46 + src/test/harness_preload.h | 47 + src/test/harness_report.h | 178 + src/test/harness_runtime_loader.h | 37 + src/test/harness_state_trackable.h | 147 + src/test/harness_task.h | 55 + src/test/harness_tbb_independence.h | 87 + src/test/harness_test_cases_framework.h | 240 + src/test/harness_tls.h | 79 + src/test/harness_tsx.h | 70 + src/test/test_ScalableAllocator.cpp | 212 + src/test/test_ScalableAllocator_STL.cpp | 42 + src/test/test_aggregator.cpp | 185 + src/test/test_aligned_space.cpp | 119 + src/test/test_allocator.h | 275 + src/test/test_allocator_STL.h | 136 + src/test/test_assembly.cpp | 164 + src/test/test_async_msg.cpp | 608 + src/test/test_async_node.cpp | 608 + src/test/test_atomic.cpp | 1605 ++ src/test/test_blocked_range.cpp | 188 + src/test/test_blocked_range2d.cpp | 148 + src/test/test_blocked_range3d.cpp | 179 + src/test/test_broadcast_node.cpp | 342 + src/test/test_buffer_node.cpp | 445 + src/test/test_cache_aligned_allocator.cpp | 80 + src/test/test_cache_aligned_allocator_STL.cpp | 35 + src/test/test_cilk_common.h | 83 + src/test/test_cilk_dynamic_load.cpp | 156 + src/test/test_cilk_interop.cpp | 155 + src/test/test_combinable.cpp | 520 + src/test/test_composite_node.cpp | 580 + src/test/test_concurrent_hash_map.cpp | 1424 ++ src/test/test_concurrent_lru_cache.cpp | 466 + src/test/test_concurrent_monitor.cpp | 369 + src/test/test_concurrent_priority_queue.cpp | 1092 ++ src/test/test_concurrent_queue.cpp | 1724 ++ src/test/test_concurrent_queue_whitebox.cpp | 101 + src/test/test_concurrent_unordered_common.h | 954 + src/test/test_concurrent_unordered_map.cpp | 337 + src/test/test_concurrent_unordered_set.cpp | 203 + src/test/test_concurrent_vector.cpp | 1789 ++ src/test/test_condition_variable.h | 767 + src/test/test_container_move_support.h | 898 + src/test/test_continue_node.cpp | 379 + src/test/test_critical_section.cpp | 216 + src/test/test_dynamic_link.cpp | 84 + src/test/test_eh_algorithms.cpp | 1583 ++ src/test/test_eh_flow_graph.cpp | 2044 +++ src/test/test_eh_tasks.cpp | 791 + src/test/test_enumerable_thread_specific.cpp | 1384 ++ src/test/test_examples_common_utility.cpp | 602 + src/test/test_fast_random.cpp | 200 + src/test/test_flow_graph.cpp | 376 + src/test/test_flow_graph_whitebox.cpp | 708 + src/test/test_fp.cpp | 385 + src/test/test_function_node.cpp | 595 + src/test/test_gfx_factory.cpp | 309 + src/test/test_global_control.cpp | 792 + src/test/test_global_control_whitebox.cpp | 83 + src/test/test_halt.cpp | 113 + src/test/test_handle_perror.cpp | 58 + src/test/test_hw_concurrency.cpp | 56 + src/test/test_indexer_node.cpp | 884 + src/test/test_initializer_list.h | 173 + src/test/test_inits_loop.cpp | 94 + src/test/test_intrusive_list.cpp | 150 + src/test/test_ittnotify.cpp | 93 + src/test/test_join_node.cpp | 130 + src/test/test_join_node.h | 2156 +++ src/test/test_join_node_key_matching.cpp | 71 + src/test/test_join_node_msg_key_matching.cpp | 67 + src/test/test_lambda.cpp | 238 + src/test/test_limiter_node.cpp | 546 + src/test/test_malloc_atexit.cpp | 161 + src/test/test_malloc_compliance.cpp | 1125 ++ src/test/test_malloc_init_shutdown.cpp | 176 + src/test/test_malloc_lib_unload.cpp | 218 + src/test/test_malloc_overload.cpp | 429 + src/test/test_malloc_pools.cpp | 863 + src/test/test_malloc_pure_c.c | 123 + src/test/test_malloc_regression.cpp | 190 + src/test/test_malloc_used_by_lib.cpp | 171 + src/test/test_malloc_whitebox.cpp | 1180 ++ src/test/test_model_plugin.cpp | 220 + src/test/test_multifunction_node.cpp | 702 + src/test/test_mutex.cpp | 684 + src/test/test_mutex_native_threads.cpp | 221 + src/test/test_opencl_kernel_32.spir | Bin 0 -> 1440 bytes src/test/test_opencl_kernel_64.spir | Bin 0 -> 1468 bytes src/test/test_opencl_node.cl | 189 + src/test/test_opencl_node.cpp | 867 + src/test/test_opencl_precompiled_kernel_gpu_32.ir | Bin 0 -> 4110 bytes src/test/test_opencl_precompiled_kernel_gpu_64.ir | Bin 0 -> 4186 bytes src/test/test_openmp.cpp | 250 + src/test/test_overwrite_node.cpp | 160 + src/test/test_parallel_do.cpp | 428 + src/test/test_parallel_for.cpp | 764 + src/test/test_parallel_for_each.cpp | 248 + src/test/test_parallel_for_vectorization.cpp | 75 + src/test/test_parallel_invoke.cpp | 321 + src/test/test_parallel_pipeline.cpp | 668 + src/test/test_parallel_reduce.cpp | 362 + src/test/test_parallel_scan.cpp | 292 + src/test/test_parallel_sort.cpp | 571 + src/test/test_parallel_while.cpp | 171 + src/test/test_partitioner.h | 593 + src/test/test_partitioner_whitebox.cpp | 149 + src/test/test_partitioner_whitebox.h | 396 + src/test/test_pipeline.cpp | 313 + src/test/test_pipeline_with_tbf.cpp | 527 + src/test/test_priority_queue_node.cpp | 352 + src/test/test_queue_node.cpp | 467 + src/test/test_range_based_for.h | 64 + src/test/test_reader_writer_lock.cpp | 238 + src/test/test_runtime_loader.cpp | 283 + src/test/test_rwm_upgrade_downgrade.cpp | 74 + src/test/test_semaphore.cpp | 316 + src/test/test_sequencer_node.cpp | 404 + src/test/test_source_node.cpp | 419 + src/test/test_split_node.cpp | 360 + src/test/test_static_assert.cpp | 89 + src/test/test_std_thread.cpp | 43 + src/test/test_streaming_node.cpp | 917 + src/test/test_tagged_msg.cpp | 263 + src/test/test_task.cpp | 820 + src/test/test_task_arena.cpp | 1359 ++ src/test/test_task_assertions.cpp | 94 + src/test/test_task_auto_init.cpp | 202 + src/test/test_task_enqueue.cpp | 381 + src/test/test_task_group.cpp | 996 + src/test/test_task_leaks.cpp | 272 + src/test/test_task_priority.cpp | 676 + src/test/test_task_scheduler_init.cpp | 371 + src/test/test_task_scheduler_observer.cpp | 424 + src/test/test_task_steal_limit.cpp | 79 + src/test/test_tbb_condition_variable.cpp | 29 + src/test/test_tbb_fork.cpp | 330 + src/test/test_tbb_header.cpp | 318 + src/test/test_tbb_thread.cpp | 33 + src/test/test_tbb_version.cpp | 288 + src/test/test_thread.h | 309 + src/test/test_tick_count.cpp | 209 + src/test/test_tuple.cpp | 204 + src/test/test_write_once_node.cpp | 169 + src/test/test_yield.cpp | 68 + 1492 files changed, 362800 insertions(+), 164 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 CHANGES create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README create mode 100644 build/AIX.gcc.inc create mode 100644 build/AIX.inc create mode 100644 build/FreeBSD.clang.inc create mode 100644 build/FreeBSD.gcc.inc create mode 100644 build/FreeBSD.inc create mode 100644 build/Makefile.rml create mode 100644 build/Makefile.tbb create mode 100644 build/Makefile.tbbmalloc create mode 100644 build/Makefile.tbbproxy create mode 100644 build/Makefile.test create mode 100644 build/SunOS.gcc.inc create mode 100644 build/SunOS.inc create mode 100644 build/SunOS.suncc.inc create mode 100644 build/android.clang.inc create mode 100644 build/android.gcc.inc create mode 100644 build/android.icc.inc create mode 100644 build/android.inc create mode 100644 build/android.linux.inc create mode 100644 build/android.linux.launcher.sh create mode 100644 build/android.macos.inc create mode 100644 build/android.windows.inc create mode 100644 build/big_iron.inc create mode 100644 build/codecov.txt create mode 100644 build/common.inc create mode 100644 build/common_rules.inc create mode 100644 build/detect.js create mode 100644 build/generate_tbbvars.bat create mode 100644 build/generate_tbbvars.sh create mode 100644 build/index.html create mode 100644 build/ios.clang.inc create mode 100644 build/ios.macos.inc create mode 100644 build/linux.clang.inc create mode 100644 build/linux.gcc.inc create mode 100644 build/linux.icc.inc create mode 100644 build/linux.inc create mode 100644 build/linux.pathcc.inc create mode 100644 build/linux.xl.inc create mode 100644 build/macos.clang.inc create mode 100644 build/macos.gcc.inc create mode 100644 build/macos.icc.inc create mode 100644 build/macos.inc create mode 100644 build/mic.icc.inc create mode 100644 build/mic.linux.inc create mode 100644 build/mic.linux.launcher.sh create mode 100644 build/mic.offload.inc create mode 100644 build/suncc.map.pause create mode 100644 build/test_launcher.bat create mode 100644 build/test_launcher.sh create mode 100644 build/version_info_aix.sh create mode 100644 build/version_info_android.sh create mode 100644 build/version_info_linux.sh create mode 100644 build/version_info_macos.sh create mode 100644 build/version_info_sunos.sh create mode 100644 build/version_info_windows.js create mode 100644 build/vs2013/index.html create mode 100644 build/vs2013/makefile.sln create mode 100644 build/vs2013/tbb.vcxproj create mode 100644 build/vs2013/tbbmalloc.vcxproj create mode 100644 build/vs2013/tbbmalloc_proxy.vcxproj create mode 100644 build/vs2013/version_string.ver create mode 100644 build/windows.cl.inc create mode 100644 build/windows.gcc.inc create mode 100644 build/windows.icl.inc create mode 100644 build/windows.inc create mode 100644 cmake/README.rst create mode 100644 cmake/TBBBuild.cmake create mode 100644 cmake/TBBGet.cmake create mode 100644 cmake/TBBMakeConfig.cmake create mode 100644 cmake/templates/TBBConfig.cmake.in create mode 100644 cmake/templates/TBBConfigForSource.cmake.in create mode 100644 cmake/templates/TBBConfigVersion.cmake.in create mode 100644 doc/Release_Notes.txt create mode 100644 doc/html/a00001.html create mode 100644 doc/html/a00002.html create mode 100644 doc/html/a00003.html create mode 100644 doc/html/a00004.html create mode 100644 doc/html/a00005.html create mode 100644 doc/html/a00006.html create mode 100644 doc/html/a00007.html create mode 100644 doc/html/a00008.html create mode 100644 doc/html/a00009.html create mode 100644 doc/html/a00009.png create mode 100644 doc/html/a00010.html create mode 100644 doc/html/a00011.html create mode 100644 doc/html/a00011.png create mode 100644 doc/html/a00012.html create mode 100644 doc/html/a00012.png create mode 100644 doc/html/a00013.html create mode 100644 doc/html/a00013.png create mode 100644 doc/html/a00014.html create mode 100644 doc/html/a00015.html create mode 100644 doc/html/a00016.html create mode 100644 doc/html/a00017.html create mode 100644 doc/html/a00017.png create mode 100644 doc/html/a00018.html create mode 100644 doc/html/a00019.html create mode 100644 doc/html/a00019.png create mode 100644 doc/html/a00020.html create mode 100644 doc/html/a00020.png create mode 100644 doc/html/a00021.html create mode 100644 doc/html/a00022.html create mode 100644 doc/html/a00022.png create mode 100644 doc/html/a00023.html create mode 100644 doc/html/a00024.html create mode 100644 doc/html/a00024.png create mode 100644 doc/html/a00025.html create mode 100644 doc/html/a00025.png create mode 100644 doc/html/a00026.html create mode 100644 doc/html/a00027.html create mode 100644 doc/html/a00028.html create mode 100644 doc/html/a00029.html create mode 100644 doc/html/a00030.html create mode 100644 doc/html/a00030.png create mode 100644 doc/html/a00031.html create mode 100644 doc/html/a00032.html create mode 100644 doc/html/a00033.html create mode 100644 doc/html/a00034.html create mode 100644 doc/html/a00034.png create mode 100644 doc/html/a00035.html create mode 100644 doc/html/a00035.png create mode 100644 doc/html/a00036.html create mode 100644 doc/html/a00036.png create mode 100644 doc/html/a00037.html create mode 100644 doc/html/a00038.html create mode 100644 doc/html/a00039.html create mode 100644 doc/html/a00039.png create mode 100644 doc/html/a00040.html create mode 100644 doc/html/a00040.png create mode 100644 doc/html/a00041.html create mode 100644 doc/html/a00041.png create mode 100644 doc/html/a00042.html create mode 100644 doc/html/a00043.html create mode 100644 doc/html/a00043.png create mode 100644 doc/html/a00044.html create mode 100644 doc/html/a00044.png create mode 100644 doc/html/a00045.html create mode 100644 doc/html/a00046.html create mode 100644 doc/html/a00046.png create mode 100644 doc/html/a00047.html create mode 100644 doc/html/a00047.png create mode 100644 doc/html/a00048.html create mode 100644 doc/html/a00048.png create mode 100644 doc/html/a00049.html create mode 100644 doc/html/a00050.html create mode 100644 doc/html/a00050.png create mode 100644 doc/html/a00051.html create mode 100644 doc/html/a00051.png create mode 100644 doc/html/a00052.html create mode 100644 doc/html/a00053.html create mode 100644 doc/html/a00053.png create mode 100644 doc/html/a00054.html create mode 100644 doc/html/a00054.png create mode 100644 doc/html/a00055.html create mode 100644 doc/html/a00056.html create mode 100644 doc/html/a00057.html create mode 100644 doc/html/a00057.png create mode 100644 doc/html/a00058.html create mode 100644 doc/html/a00059.html create mode 100644 doc/html/a00060.html create mode 100644 doc/html/a00061.html create mode 100644 doc/html/a00061.png create mode 100644 doc/html/a00062.html create mode 100644 doc/html/a00062.png create mode 100644 doc/html/a00063.html create mode 100644 doc/html/a00063.png create mode 100644 doc/html/a00064.html create mode 100644 doc/html/a00065.html create mode 100644 doc/html/a00066.html create mode 100644 doc/html/a00066.png create mode 100644 doc/html/a00067.html create mode 100644 doc/html/a00068.html create mode 100644 doc/html/a00069.html create mode 100644 doc/html/a00069.png create mode 100644 doc/html/a00070.html create mode 100644 doc/html/a00071.html create mode 100644 doc/html/a00072.html create mode 100644 doc/html/a00073.html create mode 100644 doc/html/a00073.png create mode 100644 doc/html/a00074.html create mode 100644 doc/html/a00075.html create mode 100644 doc/html/a00075.png create mode 100644 doc/html/a00076.html create mode 100644 doc/html/a00077.html create mode 100644 doc/html/a00077.png create mode 100644 doc/html/a00078.html create mode 100644 doc/html/a00079.html create mode 100644 doc/html/a00079.png create mode 100644 doc/html/a00080.html create mode 100644 doc/html/a00080.png create mode 100644 doc/html/a00081.html create mode 100644 doc/html/a00082.html create mode 100644 doc/html/a00082.png create mode 100644 doc/html/a00083.html create mode 100644 doc/html/a00084.html create mode 100644 doc/html/a00085.html create mode 100644 doc/html/a00086.html create mode 100644 doc/html/a00086.png create mode 100644 doc/html/a00087.html create mode 100644 doc/html/a00087.png create mode 100644 doc/html/a00088.html create mode 100644 doc/html/a00088.png create mode 100644 doc/html/a00089.html create mode 100644 doc/html/a00089.png create mode 100644 doc/html/a00090.html create mode 100644 doc/html/a00090.png create mode 100644 doc/html/a00091.html create mode 100644 doc/html/a00091.png create mode 100644 doc/html/a00092.html create mode 100644 doc/html/a00093.html create mode 100644 doc/html/a00093.png create mode 100644 doc/html/a00094.html create mode 100644 doc/html/a00094.png create mode 100644 doc/html/a00095.html create mode 100644 doc/html/a00095.png create mode 100644 doc/html/a00096.html create mode 100644 doc/html/a00097.html create mode 100644 doc/html/a00098.html create mode 100644 doc/html/a00099.html create mode 100644 doc/html/a00099.png create mode 100644 doc/html/a00100.html create mode 100644 doc/html/a00101.html create mode 100644 doc/html/a00101.png create mode 100644 doc/html/a00102.html create mode 100644 doc/html/a00102.png create mode 100644 doc/html/a00103.html create mode 100644 doc/html/a00103.png create mode 100644 doc/html/a00104.html create mode 100644 doc/html/a00104.png create mode 100644 doc/html/a00105.html create mode 100644 doc/html/a00106.html create mode 100644 doc/html/a00106.png create mode 100644 doc/html/a00107.html create mode 100644 doc/html/a00107.png create mode 100644 doc/html/a00108.html create mode 100644 doc/html/a00109.html create mode 100644 doc/html/a00110.html create mode 100644 doc/html/a00111.html create mode 100644 doc/html/a00111.png create mode 100644 doc/html/a00112.html create mode 100644 doc/html/a00112.png create mode 100644 doc/html/a00113.html create mode 100644 doc/html/a00113.png create mode 100644 doc/html/a00114.html create mode 100644 doc/html/a00115.html create mode 100644 doc/html/a00116.html create mode 100644 doc/html/a00117.html create mode 100644 doc/html/a00118.html create mode 100644 doc/html/a00119.html create mode 100644 doc/html/a00120.html create mode 100644 doc/html/a00121.html create mode 100644 doc/html/a00122.html create mode 100644 doc/html/a00123.html create mode 100644 doc/html/a00124.html create mode 100644 doc/html/a00124.png create mode 100644 doc/html/a00125.html create mode 100644 doc/html/a00125.png create mode 100644 doc/html/a00126.html create mode 100644 doc/html/a00126.png create mode 100644 doc/html/a00127.html create mode 100644 doc/html/a00128.html create mode 100644 doc/html/a00129.html create mode 100644 doc/html/a00130.html create mode 100644 doc/html/a00130.png create mode 100644 doc/html/a00131.html create mode 100644 doc/html/a00132.html create mode 100644 doc/html/a00133.html create mode 100644 doc/html/a00133.png create mode 100644 doc/html/a00134.html create mode 100644 doc/html/a00134.png create mode 100644 doc/html/a00135.html create mode 100644 doc/html/a00135.png create mode 100644 doc/html/a00136.html create mode 100644 doc/html/a00136.png create mode 100644 doc/html/a00137.html create mode 100644 doc/html/a00137.png create mode 100644 doc/html/a00138.html create mode 100644 doc/html/a00138.png create mode 100644 doc/html/a00139.html create mode 100644 doc/html/a00139.png create mode 100644 doc/html/a00140.html create mode 100644 doc/html/a00140.png create mode 100644 doc/html/a00141.html create mode 100644 doc/html/a00141.png create mode 100644 doc/html/a00142.html create mode 100644 doc/html/a00142.png create mode 100644 doc/html/a00143.html create mode 100644 doc/html/a00143.png create mode 100644 doc/html/a00144.html create mode 100644 doc/html/a00144.png create mode 100644 doc/html/a00145.html create mode 100644 doc/html/a00145.png create mode 100644 doc/html/a00146.html create mode 100644 doc/html/a00146.png create mode 100644 doc/html/a00147.html create mode 100644 doc/html/a00147.png create mode 100644 doc/html/a00148.html create mode 100644 doc/html/a00149.html create mode 100644 doc/html/a00149.png create mode 100644 doc/html/a00150.html create mode 100644 doc/html/a00150.png create mode 100644 doc/html/a00151.html create mode 100644 doc/html/a00151.png create mode 100644 doc/html/a00152.html create mode 100644 doc/html/a00153.html create mode 100644 doc/html/a00153.png create mode 100644 doc/html/a00154.html create mode 100644 doc/html/a00154.png create mode 100644 doc/html/a00155.html create mode 100644 doc/html/a00155.png create mode 100644 doc/html/a00156.html create mode 100644 doc/html/a00156.png create mode 100644 doc/html/a00157.html create mode 100644 doc/html/a00157.png create mode 100644 doc/html/a00158.html create mode 100644 doc/html/a00159.html create mode 100644 doc/html/a00160.html create mode 100644 doc/html/a00160.png create mode 100644 doc/html/a00161.html create mode 100644 doc/html/a00162.html create mode 100644 doc/html/a00163.html create mode 100644 doc/html/a00163.png create mode 100644 doc/html/a00164.html create mode 100644 doc/html/a00164.png create mode 100644 doc/html/a00165.html create mode 100644 doc/html/a00165.png create mode 100644 doc/html/a00166.html create mode 100644 doc/html/a00166.png create mode 100644 doc/html/a00167.html create mode 100644 doc/html/a00167.png create mode 100644 doc/html/a00168.html create mode 100644 doc/html/a00169.html create mode 100644 doc/html/a00169.png create mode 100644 doc/html/a00170.html create mode 100644 doc/html/a00170.png create mode 100644 doc/html/a00171.html create mode 100644 doc/html/a00172.html create mode 100644 doc/html/a00173.html create mode 100644 doc/html/a00173.png create mode 100644 doc/html/a00174.html create mode 100644 doc/html/a00174.png create mode 100644 doc/html/a00175.html create mode 100644 doc/html/a00175.png create mode 100644 doc/html/a00193.html create mode 100644 doc/html/a00198.html create mode 100644 doc/html/a00217.html create mode 100644 doc/html/a00236.html create mode 100644 doc/html/a00239.html create mode 100644 doc/html/a00260.html create mode 100644 doc/html/a00261.html create mode 100644 doc/html/a00262.html create mode 100644 doc/html/a00263.html create mode 100644 doc/html/a00264.html create mode 100644 doc/html/a00265.html create mode 100644 doc/html/a00267.html create mode 100644 doc/html/a00268.html create mode 100644 doc/html/a00269.html create mode 100644 doc/html/a00270.html create mode 100644 doc/html/a00271.html create mode 100644 doc/html/a00272.html create mode 100644 doc/html/a00273.html create mode 100644 doc/html/a00274.html create mode 100644 doc/html/a00275.html create mode 100644 doc/html/a00276.html create mode 100644 doc/html/a00277.html create mode 100644 doc/html/a00278.html create mode 100644 doc/html/a00279.html create mode 100644 doc/html/a00280.html create mode 100644 doc/html/a00281.html create mode 100644 doc/html/a00282.html create mode 100644 doc/html/a00283.html create mode 100644 doc/html/a00284.html create mode 100644 doc/html/a00285.html create mode 100644 doc/html/a00286.html create mode 100644 doc/html/a00287.html create mode 100644 doc/html/a00288.html create mode 100644 doc/html/a00289.html create mode 100644 doc/html/a00290.html create mode 100644 doc/html/a00291.html create mode 100644 doc/html/a00292.html create mode 100644 doc/html/a00293.html create mode 100644 doc/html/a00294.html create mode 100644 doc/html/a00295.html create mode 100644 doc/html/a00296.html create mode 100644 doc/html/a00297.html create mode 100644 doc/html/a00298.html create mode 100644 doc/html/a00299.html create mode 100644 doc/html/a00300.html create mode 100644 doc/html/a00301.html create mode 100644 doc/html/a00302.html create mode 100644 doc/html/a00303.html create mode 100644 doc/html/a00304.html create mode 100644 doc/html/a00305.html create mode 100644 doc/html/a00306.html create mode 100644 doc/html/a00307.html create mode 100644 doc/html/a00308.html create mode 100644 doc/html/a00309.html create mode 100644 doc/html/a00310.html create mode 100644 doc/html/a00311.html create mode 100644 doc/html/a00312.html create mode 100644 doc/html/a00313.html create mode 100644 doc/html/a00314.html create mode 100644 doc/html/a00315.html create mode 100644 doc/html/a00316.html create mode 100644 doc/html/a00317.html create mode 100644 doc/html/a00318.html create mode 100644 doc/html/a00319.html create mode 100644 doc/html/a00320.html create mode 100644 doc/html/a00321.html create mode 100644 doc/html/a00322.html create mode 100644 doc/html/a00323.html create mode 100644 doc/html/a00324.html create mode 100644 doc/html/a00325.html create mode 100644 doc/html/a00326.html create mode 100644 doc/html/a00327.html create mode 100644 doc/html/a00328.html create mode 100644 doc/html/a00329.html create mode 100644 doc/html/a00330.html create mode 100644 doc/html/a00331.html create mode 100644 doc/html/a00332.html create mode 100644 doc/html/a00333.html create mode 100644 doc/html/a00334.html create mode 100644 doc/html/a00335.html create mode 100644 doc/html/a00336.html create mode 100644 doc/html/a00337.html create mode 100644 doc/html/a00338.html create mode 100644 doc/html/a00339.html create mode 100644 doc/html/a00340.html create mode 100644 doc/html/a00341.html create mode 100644 doc/html/a00342.html create mode 100644 doc/html/a00343.html create mode 100644 doc/html/a00344.html create mode 100644 doc/html/a00345.html create mode 100644 doc/html/a00346.html create mode 100644 doc/html/a00347.html create mode 100644 doc/html/a00348.html create mode 100644 doc/html/a00349.html create mode 100644 doc/html/a00350.html create mode 100644 doc/html/a00351.html create mode 100644 doc/html/a00352.html create mode 100644 doc/html/a00353.html create mode 100644 doc/html/a00354.html create mode 100644 doc/html/a00355.html create mode 100644 doc/html/a00356.html create mode 100644 doc/html/a00357.html create mode 100644 doc/html/a00358.html create mode 100644 doc/html/a00359.html create mode 100644 doc/html/a00360.html create mode 100644 doc/html/a00361.html create mode 100644 doc/html/a00362.html create mode 100644 doc/html/a00363.html create mode 100644 doc/html/a00364.html create mode 100644 doc/html/a00365.html create mode 100644 doc/html/a00366.html create mode 100644 doc/html/a00367.html create mode 100644 doc/html/a00368.html create mode 100644 doc/html/a00369.html create mode 100644 doc/html/a00370.html create mode 100644 doc/html/a00371.html create mode 100644 doc/html/a00372.html create mode 100644 doc/html/a00373.html create mode 100644 doc/html/a00374.html create mode 100644 doc/html/a00375.html create mode 100644 doc/html/a00376.html create mode 100644 doc/html/a00377.html create mode 100644 doc/html/a00378.html create mode 100644 doc/html/a00379.html create mode 100644 doc/html/a00380.html create mode 100644 doc/html/a00381.html create mode 100644 doc/html/a00382.html create mode 100644 doc/html/a00383.html create mode 100644 doc/html/a00384.html create mode 100644 doc/html/a00385.html create mode 100644 doc/html/a00386.html create mode 100644 doc/html/a00387.html create mode 100644 doc/html/a00388.html create mode 100644 doc/html/a00389.html create mode 100644 doc/html/a00390.html create mode 100644 doc/html/a00391.html create mode 100644 doc/html/a00392.html create mode 100644 doc/html/a00393.html create mode 100644 doc/html/a00394.html create mode 100644 doc/html/a00395.html create mode 100644 doc/html/a00396.html create mode 100644 doc/html/a00397.html create mode 100644 doc/html/a00398.html create mode 100644 doc/html/a00399.html create mode 100644 doc/html/a00400.html create mode 100644 doc/html/a00401.html create mode 100644 doc/html/a00402.html create mode 100644 doc/html/a00403.html create mode 100644 doc/html/a00404.html create mode 100644 doc/html/a00405.html create mode 100644 doc/html/a00406.html create mode 100644 doc/html/a00407.html create mode 100644 doc/html/a00408.html create mode 100644 doc/html/a00409.html create mode 100644 doc/html/a00410.html create mode 100644 doc/html/a00411.html create mode 100644 doc/html/a00412.html create mode 100644 doc/html/a00413.html create mode 100644 doc/html/a00414.html create mode 100644 doc/html/a00415.html create mode 100644 doc/html/a00416.html create mode 100644 doc/html/a00417.html create mode 100644 doc/html/a00418.html create mode 100644 doc/html/annotated.html create mode 100644 doc/html/bc_s.png create mode 100644 doc/html/bdwn.png create mode 100644 doc/html/classes.html create mode 100644 doc/html/closed.png create mode 100644 doc/html/dir_525f2cc589630bacbdc3bb450847427e.html create mode 100644 doc/html/dir_63fb2cc293d133785b96e521fa051167.html create mode 100644 doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html create mode 100644 doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html create mode 100644 doc/html/doxygen.css create mode 100644 doc/html/doxygen.png create mode 100644 doc/html/dynsections.js create mode 100644 doc/html/files.html create mode 100644 doc/html/ftv2blank.png create mode 100644 doc/html/ftv2cl.png create mode 100644 doc/html/ftv2doc.png create mode 100644 doc/html/ftv2folderclosed.png create mode 100644 doc/html/ftv2folderopen.png create mode 100644 doc/html/ftv2lastnode.png create mode 100644 doc/html/ftv2link.png create mode 100644 doc/html/ftv2mlastnode.png create mode 100644 doc/html/ftv2mnode.png create mode 100644 doc/html/ftv2mo.png create mode 100644 doc/html/ftv2node.png create mode 100644 doc/html/ftv2ns.png create mode 100644 doc/html/ftv2plastnode.png create mode 100644 doc/html/ftv2pnode.png create mode 100644 doc/html/ftv2splitbar.png create mode 100644 doc/html/ftv2vertline.png create mode 100644 doc/html/functions.html create mode 100644 doc/html/functions_0x62.html create mode 100644 doc/html/functions_0x63.html create mode 100644 doc/html/functions_0x64.html create mode 100644 doc/html/functions_0x65.html create mode 100644 doc/html/functions_0x66.html create mode 100644 doc/html/functions_0x67.html create mode 100644 doc/html/functions_0x68.html create mode 100644 doc/html/functions_0x69.html create mode 100644 doc/html/functions_0x6a.html create mode 100644 doc/html/functions_0x6c.html create mode 100644 doc/html/functions_0x6d.html create mode 100644 doc/html/functions_0x6e.html create mode 100644 doc/html/functions_0x6f.html create mode 100644 doc/html/functions_0x70.html create mode 100644 doc/html/functions_0x71.html create mode 100644 doc/html/functions_0x72.html create mode 100644 doc/html/functions_0x73.html create mode 100644 doc/html/functions_0x74.html create mode 100644 doc/html/functions_0x75.html create mode 100644 doc/html/functions_0x76.html create mode 100644 doc/html/functions_0x77.html create mode 100644 doc/html/functions_0x7e.html create mode 100644 doc/html/functions_enum.html create mode 100644 doc/html/functions_eval.html create mode 100644 doc/html/functions_func.html create mode 100644 doc/html/functions_func_0x62.html create mode 100644 doc/html/functions_func_0x63.html create mode 100644 doc/html/functions_func_0x64.html create mode 100644 doc/html/functions_func_0x65.html create mode 100644 doc/html/functions_func_0x66.html create mode 100644 doc/html/functions_func_0x67.html create mode 100644 doc/html/functions_func_0x68.html create mode 100644 doc/html/functions_func_0x69.html create mode 100644 doc/html/functions_func_0x6a.html create mode 100644 doc/html/functions_func_0x6c.html create mode 100644 doc/html/functions_func_0x6d.html create mode 100644 doc/html/functions_func_0x6e.html create mode 100644 doc/html/functions_func_0x6f.html create mode 100644 doc/html/functions_func_0x70.html create mode 100644 doc/html/functions_func_0x71.html create mode 100644 doc/html/functions_func_0x72.html create mode 100644 doc/html/functions_func_0x73.html create mode 100644 doc/html/functions_func_0x74.html create mode 100644 doc/html/functions_func_0x75.html create mode 100644 doc/html/functions_func_0x77.html create mode 100644 doc/html/functions_func_0x7e.html create mode 100644 doc/html/functions_rela.html create mode 100644 doc/html/functions_type.html create mode 100644 doc/html/functions_vars.html create mode 100644 doc/html/globals.html create mode 100644 doc/html/globals_func.html create mode 100644 doc/html/hierarchy.html create mode 100644 doc/html/index.html create mode 100644 doc/html/jquery.js create mode 100644 doc/html/modules.html create mode 100644 doc/html/namespacemembers.html create mode 100644 doc/html/namespacemembers_enum.html create mode 100644 doc/html/namespacemembers_eval.html create mode 100644 doc/html/namespacemembers_func.html create mode 100644 doc/html/namespacemembers_type.html create mode 100644 doc/html/namespaces.html create mode 100644 doc/html/nav_f.png create mode 100644 doc/html/nav_g.png create mode 100644 doc/html/nav_h.png create mode 100644 doc/html/open.png create mode 100644 doc/html/pages.html create mode 100644 doc/html/sync_off.png create mode 100644 doc/html/sync_on.png create mode 100644 doc/html/tab_a.png create mode 100644 doc/html/tab_b.png create mode 100644 doc/html/tab_h.png create mode 100644 doc/html/tab_s.png create mode 100644 doc/html/tabs.css delete mode 100644 download.md create mode 100644 examples/GettingStarted/index.html create mode 100644 examples/GettingStarted/sub_string_finder/Makefile create mode 100644 examples/GettingStarted/sub_string_finder/Makefile.windows create mode 100644 examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln create mode 100644 examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj create mode 100644 examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj create mode 100644 examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj create mode 100644 examples/GettingStarted/sub_string_finder/readme.html create mode 100644 examples/GettingStarted/sub_string_finder/sub_string_finder.cpp create mode 100644 examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp create mode 100644 examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp create mode 100644 examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj create mode 100644 examples/Makefile create mode 100644 examples/common/copy_libraries.bat create mode 100644 examples/common/examples-common.inc create mode 100644 examples/common/gui/Makefile.gmake create mode 100644 examples/common/gui/Makefile.win create mode 100644 examples/common/gui/convideo.cpp create mode 100644 examples/common/gui/d2dvideo.cpp create mode 100644 examples/common/gui/dxcheck.bat create mode 100644 examples/common/gui/gdivideo.cpp create mode 100644 examples/common/gui/macvideo.cpp create mode 100644 examples/common/gui/video.h create mode 100644 examples/common/gui/winvideo.h create mode 100644 examples/common/gui/xcode/tbbExample/OpenGLView.h create mode 100644 examples/common/gui/xcode/tbbExample/OpenGLView.m create mode 100644 examples/common/gui/xcode/tbbExample/PkgInfo create mode 100644 examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings create mode 100644 examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.nib create mode 100644 examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib create mode 100644 examples/common/gui/xcode/tbbExample/iOS.storyboard create mode 100644 examples/common/gui/xcode/tbbExample/main.m create mode 100644 examples/common/gui/xcode/tbbExample/tbbAppDelegate.h create mode 100644 examples/common/gui/xcode/tbbExample/tbbAppDelegate.m create mode 100644 examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist create mode 100644 examples/common/gui/xcode/tbbExample/tbbExample-Info.plist create mode 100644 examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch create mode 100644 examples/common/gui/xvideo.cpp create mode 100644 examples/common/index.html create mode 100644 examples/common/toolset.props create mode 100644 examples/common/utility/fast_random.h create mode 100644 examples/common/utility/utility.h create mode 100644 examples/concurrent_hash_map/count_strings/Makefile create mode 100644 examples/concurrent_hash_map/count_strings/Makefile.windows create mode 100644 examples/concurrent_hash_map/count_strings/count_strings.cpp create mode 100644 examples/concurrent_hash_map/count_strings/msvs/count_strings.sln create mode 100644 examples/concurrent_hash_map/count_strings/msvs/count_strings.vcxproj create mode 100644 examples/concurrent_hash_map/count_strings/readme.html create mode 100644 examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj create mode 100644 examples/concurrent_hash_map/index.html create mode 100644 examples/concurrent_priority_queue/index.html create mode 100644 examples/concurrent_priority_queue/shortpath/Makefile create mode 100644 examples/concurrent_priority_queue/shortpath/Makefile.windows create mode 100644 examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln create mode 100644 examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj create mode 100644 examples/concurrent_priority_queue/shortpath/readme.html create mode 100644 examples/concurrent_priority_queue/shortpath/shortpath.cpp create mode 100644 examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj create mode 100644 examples/graph/binpack/Makefile create mode 100644 examples/graph/binpack/Makefile.windows create mode 100644 examples/graph/binpack/binpack.cpp create mode 100644 examples/graph/binpack/msvs/binpack.sln create mode 100644 examples/graph/binpack/msvs/binpack.vcxproj create mode 100644 examples/graph/binpack/readme.html create mode 100644 examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj create mode 100644 examples/graph/cholesky/Makefile create mode 100644 examples/graph/cholesky/Makefile.windows create mode 100644 examples/graph/cholesky/cholesky.cpp create mode 100644 examples/graph/cholesky/init.cpp create mode 100644 examples/graph/cholesky/msvs/cholesky.sln create mode 100644 examples/graph/cholesky/msvs/cholesky.vcxproj create mode 100644 examples/graph/cholesky/readme.html create mode 100644 examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj create mode 100644 examples/graph/dining_philosophers/Makefile create mode 100644 examples/graph/dining_philosophers/Makefile.windows create mode 100644 examples/graph/dining_philosophers/dining_philosophers.cpp create mode 100644 examples/graph/dining_philosophers/msvs/dining_philosophers.sln create mode 100644 examples/graph/dining_philosophers/msvs/dining_philosophers.vcxproj create mode 100644 examples/graph/dining_philosophers/readme.html create mode 100644 examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj create mode 100644 examples/graph/fgbzip2/Makefile create mode 100644 examples/graph/fgbzip2/Makefile.windows create mode 100644 examples/graph/fgbzip2/blocksort.cpp create mode 100644 examples/graph/fgbzip2/bzlib.cpp create mode 100644 examples/graph/fgbzip2/bzlib.h create mode 100644 examples/graph/fgbzip2/bzlib_private.h create mode 100644 examples/graph/fgbzip2/compress.cpp create mode 100644 examples/graph/fgbzip2/crctable.cpp create mode 100644 examples/graph/fgbzip2/decompress.cpp create mode 100644 examples/graph/fgbzip2/fgbzip2.cpp create mode 100644 examples/graph/fgbzip2/huffman.cpp create mode 100644 examples/graph/fgbzip2/msvs/fgbzip2.sln create mode 100644 examples/graph/fgbzip2/msvs/fgbzip2.vcxproj create mode 100644 examples/graph/fgbzip2/randtable.cpp create mode 100644 examples/graph/fgbzip2/readme.html create mode 100644 examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj create mode 100644 examples/graph/index.html create mode 100644 examples/graph/logic_sim/D_latch.h create mode 100644 examples/graph/logic_sim/Makefile create mode 100644 examples/graph/logic_sim/Makefile.windows create mode 100644 examples/graph/logic_sim/basics.h create mode 100644 examples/graph/logic_sim/four_bit_adder.h create mode 100644 examples/graph/logic_sim/msvs/logic_sim.sln create mode 100644 examples/graph/logic_sim/msvs/logic_sim.vcxproj create mode 100644 examples/graph/logic_sim/one_bit_adder.h create mode 100644 examples/graph/logic_sim/readme.html create mode 100644 examples/graph/logic_sim/test_all.cpp create mode 100644 examples/graph/logic_sim/two_bit_adder.h create mode 100644 examples/graph/matmult/Makefile create mode 100644 examples/graph/matmult/Makefile.windows create mode 100644 examples/graph/matmult/matmult.cpp create mode 100644 examples/graph/matmult/msvs/matmult.sln create mode 100644 examples/graph/matmult/msvs/matmult.vcxproj create mode 100644 examples/graph/matmult/readme.html create mode 100644 examples/graph/som/Makefile create mode 100644 examples/graph/som/Makefile.windows create mode 100644 examples/graph/som/msvs/som.sln create mode 100644 examples/graph/som/msvs/som.vcxproj create mode 100644 examples/graph/som/readme.html create mode 100644 examples/graph/som/som.cpp create mode 100644 examples/graph/som/som.h create mode 100644 examples/graph/som/som_graph.cpp create mode 100644 examples/graph/som/xcode/som.xcodeproj/project.pbxproj create mode 100644 examples/graph/stereo/Makefile create mode 100644 examples/graph/stereo/Makefile.windows create mode 100644 examples/graph/stereo/imageEffects.cl create mode 100644 examples/graph/stereo/lodepng.cpp create mode 100644 examples/graph/stereo/lodepng.h create mode 100644 examples/graph/stereo/msvs/stereo.sln create mode 100644 examples/graph/stereo/msvs/stereo.vcxproj create mode 100644 examples/graph/stereo/readme.html create mode 100644 examples/graph/stereo/stereo.cpp create mode 100644 examples/graph/stereo/utils.h create mode 100644 examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj create mode 100644 examples/index.html create mode 100644 examples/parallel_do/index.html create mode 100644 examples/parallel_do/parallel_preorder/Graph.cpp create mode 100644 examples/parallel_do/parallel_preorder/Graph.h create mode 100644 examples/parallel_do/parallel_preorder/Makefile create mode 100644 examples/parallel_do/parallel_preorder/Makefile.windows create mode 100644 examples/parallel_do/parallel_preorder/Matrix.h create mode 100644 examples/parallel_do/parallel_preorder/main.cpp create mode 100644 examples/parallel_do/parallel_preorder/msvs/parallel_preorder.sln create mode 100644 examples/parallel_do/parallel_preorder/msvs/parallel_preorder.vcxproj create mode 100644 examples/parallel_do/parallel_preorder/parallel_preorder.cpp create mode 100644 examples/parallel_do/parallel_preorder/readme.html create mode 100644 examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj create mode 100644 examples/parallel_for/game_of_life/Makefile create mode 100644 examples/parallel_for/game_of_life/Makefile.windows create mode 100644 examples/parallel_for/game_of_life/msvs/Game_of_life.sln create mode 100644 examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj create mode 100644 examples/parallel_for/game_of_life/msvs/app.ico create mode 100644 examples/parallel_for/game_of_life/msvs/app.rc create mode 100644 examples/parallel_for/game_of_life/msvs/resource.h create mode 100644 examples/parallel_for/game_of_life/readme.html create mode 100644 examples/parallel_for/game_of_life/src/AssemblyInfo.cpp create mode 100644 examples/parallel_for/game_of_life/src/Board.h create mode 100644 examples/parallel_for/game_of_life/src/Evolution.cpp create mode 100644 examples/parallel_for/game_of_life/src/Evolution.h create mode 100644 examples/parallel_for/game_of_life/src/Form1.h create mode 100644 examples/parallel_for/game_of_life/src/Game_of_life.cpp create mode 100644 examples/parallel_for/game_of_life/src/Update_state.cpp create mode 100644 examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj create mode 100644 examples/parallel_for/index.html create mode 100644 examples/parallel_for/polygon_overlay/Makefile create mode 100644 examples/parallel_for/polygon_overlay/Makefile.windows create mode 100644 examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln create mode 100644 examples/parallel_for/polygon_overlay/msvs/pover.rc create mode 100644 examples/parallel_for/polygon_overlay/msvs/pover.vcxproj create mode 100644 examples/parallel_for/polygon_overlay/msvs/resource.h create mode 100644 examples/parallel_for/polygon_overlay/polymain.cpp create mode 100644 examples/parallel_for/polygon_overlay/polymain.h create mode 100644 examples/parallel_for/polygon_overlay/polyover.cpp create mode 100644 examples/parallel_for/polygon_overlay/polyover.h create mode 100644 examples/parallel_for/polygon_overlay/pover_global.h create mode 100644 examples/parallel_for/polygon_overlay/pover_video.cpp create mode 100644 examples/parallel_for/polygon_overlay/pover_video.h create mode 100644 examples/parallel_for/polygon_overlay/readme.html create mode 100644 examples/parallel_for/polygon_overlay/rpolygon.h create mode 100644 examples/parallel_for/polygon_overlay/speedup.gif create mode 100644 examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj create mode 100644 examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme create mode 100644 examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme create mode 100644 examples/parallel_for/seismic/Makefile create mode 100644 examples/parallel_for/seismic/Makefile.windows create mode 100644 examples/parallel_for/seismic/main.cpp create mode 100644 examples/parallel_for/seismic/msvs/SeismicSimulation.ico create mode 100644 examples/parallel_for/seismic/msvs/SeismicSimulation.rc create mode 100644 examples/parallel_for/seismic/msvs/SeismicSimulation.vcxproj create mode 100644 examples/parallel_for/seismic/msvs/resource.h create mode 100644 examples/parallel_for/seismic/msvs/seismic.sln create mode 100644 examples/parallel_for/seismic/msvs/small.ico create mode 100644 examples/parallel_for/seismic/readme.html create mode 100644 examples/parallel_for/seismic/seismic_video.cpp create mode 100644 examples/parallel_for/seismic/seismic_video.h create mode 100644 examples/parallel_for/seismic/universe.cpp create mode 100644 examples/parallel_for/seismic/universe.h create mode 100644 examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj create mode 100644 examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme create mode 100644 examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme create mode 100644 examples/parallel_for/tachyon/Makefile create mode 100644 examples/parallel_for/tachyon/Makefile.windows create mode 100644 examples/parallel_for/tachyon/dat/820spheres.dat create mode 100644 examples/parallel_for/tachyon/dat/balls.dat create mode 100644 examples/parallel_for/tachyon/dat/balls3.dat create mode 100644 examples/parallel_for/tachyon/dat/lattice.dat create mode 100644 examples/parallel_for/tachyon/dat/model2.dat create mode 100644 examples/parallel_for/tachyon/dat/teapot.dat create mode 100644 examples/parallel_for/tachyon/dat/trypsin4pti.dat create mode 100644 examples/parallel_for/tachyon/msvs/gui.ico create mode 100644 examples/parallel_for/tachyon/msvs/gui.rc create mode 100644 examples/parallel_for/tachyon/msvs/resource.h create mode 100644 examples/parallel_for/tachyon/msvs/small.ico create mode 100644 examples/parallel_for/tachyon/msvs/tachyon.serial.vcxproj create mode 100644 examples/parallel_for/tachyon/msvs/tachyon.sln create mode 100644 examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj create mode 100644 examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj create mode 100644 examples/parallel_for/tachyon/msvs/tachyon.vcxproj create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/App.xaml create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/Assets/Logo.png create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/Assets/SmallLogo.png create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/Assets/SplashScreen.png create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/Assets/StoreLogo.png create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/Common/StandardStyles.xaml create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.cpp create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml.h create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/Package.appxmanifest create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/copy_libraries_and_assets.bat create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/pch.h create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.sln create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/tbbTachyon.vcxproj.filters create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.cpp create mode 100644 examples/parallel_for/tachyon/msvs/win8ui/tbbTachyonRenderer.h create mode 100644 examples/parallel_for/tachyon/readme.html create mode 100644 examples/parallel_for/tachyon/src/api.cpp create mode 100644 examples/parallel_for/tachyon/src/api.h create mode 100644 examples/parallel_for/tachyon/src/apigeom.cpp create mode 100644 examples/parallel_for/tachyon/src/apitrigeom.cpp create mode 100644 examples/parallel_for/tachyon/src/apitrigeom.h create mode 100644 examples/parallel_for/tachyon/src/bndbox.cpp create mode 100644 examples/parallel_for/tachyon/src/bndbox.h create mode 100644 examples/parallel_for/tachyon/src/box.cpp create mode 100644 examples/parallel_for/tachyon/src/box.h create mode 100644 examples/parallel_for/tachyon/src/camera.cpp create mode 100644 examples/parallel_for/tachyon/src/camera.h create mode 100644 examples/parallel_for/tachyon/src/coordsys.cpp create mode 100644 examples/parallel_for/tachyon/src/coordsys.h create mode 100644 examples/parallel_for/tachyon/src/cylinder.cpp create mode 100644 examples/parallel_for/tachyon/src/cylinder.h create mode 100644 examples/parallel_for/tachyon/src/extvol.cpp create mode 100644 examples/parallel_for/tachyon/src/extvol.h create mode 100644 examples/parallel_for/tachyon/src/global.cpp create mode 100644 examples/parallel_for/tachyon/src/global.h create mode 100644 examples/parallel_for/tachyon/src/grid.cpp create mode 100644 examples/parallel_for/tachyon/src/grid.h create mode 100644 examples/parallel_for/tachyon/src/imageio.cpp create mode 100644 examples/parallel_for/tachyon/src/imageio.h create mode 100644 examples/parallel_for/tachyon/src/imap.cpp create mode 100644 examples/parallel_for/tachyon/src/imap.h create mode 100644 examples/parallel_for/tachyon/src/intersect.cpp create mode 100644 examples/parallel_for/tachyon/src/intersect.h create mode 100644 examples/parallel_for/tachyon/src/jpeg.cpp create mode 100644 examples/parallel_for/tachyon/src/jpeg.h create mode 100644 examples/parallel_for/tachyon/src/light.cpp create mode 100644 examples/parallel_for/tachyon/src/light.h create mode 100644 examples/parallel_for/tachyon/src/machine.h create mode 100644 examples/parallel_for/tachyon/src/macros.h create mode 100644 examples/parallel_for/tachyon/src/main.cpp create mode 100644 examples/parallel_for/tachyon/src/objbound.cpp create mode 100644 examples/parallel_for/tachyon/src/objbound.h create mode 100644 examples/parallel_for/tachyon/src/parse.cpp create mode 100644 examples/parallel_for/tachyon/src/parse.h create mode 100644 examples/parallel_for/tachyon/src/plane.cpp create mode 100644 examples/parallel_for/tachyon/src/plane.h create mode 100644 examples/parallel_for/tachyon/src/ppm.cpp create mode 100644 examples/parallel_for/tachyon/src/ppm.h create mode 100644 examples/parallel_for/tachyon/src/pthread.cpp create mode 100644 examples/parallel_for/tachyon/src/pthread_w.h create mode 100644 examples/parallel_for/tachyon/src/quadric.cpp create mode 100644 examples/parallel_for/tachyon/src/quadric.h create mode 100644 examples/parallel_for/tachyon/src/render.cpp create mode 100644 examples/parallel_for/tachyon/src/render.h create mode 100644 examples/parallel_for/tachyon/src/ring.cpp create mode 100644 examples/parallel_for/tachyon/src/ring.h create mode 100644 examples/parallel_for/tachyon/src/shade.cpp create mode 100644 examples/parallel_for/tachyon/src/shade.h create mode 100644 examples/parallel_for/tachyon/src/sphere.cpp create mode 100644 examples/parallel_for/tachyon/src/sphere.h create mode 100644 examples/parallel_for/tachyon/src/tachyon_video.cpp create mode 100644 examples/parallel_for/tachyon/src/tachyon_video.h create mode 100644 examples/parallel_for/tachyon/src/texture.cpp create mode 100644 examples/parallel_for/tachyon/src/texture.h create mode 100644 examples/parallel_for/tachyon/src/tgafile.cpp create mode 100644 examples/parallel_for/tachyon/src/tgafile.h create mode 100644 examples/parallel_for/tachyon/src/trace.h create mode 100644 examples/parallel_for/tachyon/src/trace.serial.cpp create mode 100644 examples/parallel_for/tachyon/src/trace.simple.cpp create mode 100644 examples/parallel_for/tachyon/src/trace.tbb.cpp create mode 100644 examples/parallel_for/tachyon/src/trace.tbb1d.cpp create mode 100644 examples/parallel_for/tachyon/src/trace_rest.cpp create mode 100644 examples/parallel_for/tachyon/src/triangle.cpp create mode 100644 examples/parallel_for/tachyon/src/triangle.h create mode 100644 examples/parallel_for/tachyon/src/types.h create mode 100644 examples/parallel_for/tachyon/src/ui.cpp create mode 100644 examples/parallel_for/tachyon/src/ui.h create mode 100644 examples/parallel_for/tachyon/src/util.cpp create mode 100644 examples/parallel_for/tachyon/src/util.h create mode 100644 examples/parallel_for/tachyon/src/vector.cpp create mode 100644 examples/parallel_for/tachyon/src/vector.h create mode 100644 examples/parallel_for/tachyon/src/vol.cpp create mode 100644 examples/parallel_for/tachyon/src/vol.h create mode 100644 examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj create mode 100644 examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.serial.xcscheme create mode 100644 examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.ios.xcscheme create mode 100644 examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb.xcscheme create mode 100644 examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/xcshareddata/xcschemes/tachyon.tbb1d.xcscheme create mode 100644 examples/parallel_reduce/convex_hull/Makefile create mode 100644 examples/parallel_reduce/convex_hull/Makefile.windows create mode 100644 examples/parallel_reduce/convex_hull/convex_hull.h create mode 100644 examples/parallel_reduce/convex_hull/convex_hull_bench.cpp create mode 100644 examples/parallel_reduce/convex_hull/convex_hull_sample.cpp create mode 100644 examples/parallel_reduce/convex_hull/msvs/convex_hull.sln create mode 100644 examples/parallel_reduce/convex_hull/msvs/convex_hull_benchmark.vcxproj create mode 100644 examples/parallel_reduce/convex_hull/msvs/convex_hull_sample.vcxproj create mode 100644 examples/parallel_reduce/convex_hull/readme.html create mode 100644 examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj create mode 100644 examples/parallel_reduce/index.html create mode 100644 examples/parallel_reduce/primes/Makefile create mode 100644 examples/parallel_reduce/primes/Makefile.windows create mode 100644 examples/parallel_reduce/primes/main.cpp create mode 100644 examples/parallel_reduce/primes/msvs/primes.sln create mode 100644 examples/parallel_reduce/primes/msvs/primes.vcxproj create mode 100644 examples/parallel_reduce/primes/primes.cpp create mode 100644 examples/parallel_reduce/primes/primes.h create mode 100644 examples/parallel_reduce/primes/readme.html create mode 100644 examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj create mode 100644 examples/pipeline/index.html create mode 100644 examples/pipeline/square/Makefile create mode 100644 examples/pipeline/square/Makefile.windows create mode 100644 examples/pipeline/square/gen_input.cpp create mode 100644 examples/pipeline/square/msvs/square.sln create mode 100644 examples/pipeline/square/msvs/square.vcxproj create mode 100644 examples/pipeline/square/readme.html create mode 100644 examples/pipeline/square/square.cpp create mode 100644 examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj create mode 100644 examples/task/index.html create mode 100644 examples/task/tree_sum/Makefile create mode 100644 examples/task/tree_sum/Makefile.windows create mode 100644 examples/task/tree_sum/OptimizedParallelSumTree.cpp create mode 100644 examples/task/tree_sum/SerialSumTree.cpp create mode 100644 examples/task/tree_sum/SimpleParallelSumTree.cpp create mode 100644 examples/task/tree_sum/TreeMaker.h create mode 100644 examples/task/tree_sum/common.h create mode 100644 examples/task/tree_sum/main.cpp create mode 100644 examples/task/tree_sum/msvs/tree_sum.sln create mode 100644 examples/task/tree_sum/msvs/tree_sum.vcxproj create mode 100644 examples/task/tree_sum/readme.html create mode 100644 examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj create mode 100644 examples/task_arena/fractal/Makefile create mode 100644 examples/task_arena/fractal/Makefile.windows create mode 100644 examples/task_arena/fractal/fractal.cpp create mode 100644 examples/task_arena/fractal/fractal.h create mode 100644 examples/task_arena/fractal/fractal_video.h create mode 100644 examples/task_arena/fractal/main.cpp create mode 100644 examples/task_arena/fractal/msvs/fractal.sln create mode 100644 examples/task_arena/fractal/msvs/fractal.vcxproj create mode 100644 examples/task_arena/fractal/msvs/gui.ico create mode 100644 examples/task_arena/fractal/msvs/gui.rc create mode 100644 examples/task_arena/fractal/msvs/resource.h create mode 100644 examples/task_arena/fractal/msvs/small.ico create mode 100644 examples/task_arena/fractal/readme.html create mode 100644 examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj create mode 100644 examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme create mode 100644 examples/task_arena/fractal/xcode/fractal.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme create mode 100644 examples/task_arena/index.html create mode 100644 examples/task_group/index.html create mode 100644 examples/task_group/sudoku/Makefile create mode 100644 examples/task_group/sudoku/Makefile.windows create mode 100644 examples/task_group/sudoku/input1 create mode 100644 examples/task_group/sudoku/input2 create mode 100644 examples/task_group/sudoku/input3 create mode 100644 examples/task_group/sudoku/input4 create mode 100644 examples/task_group/sudoku/msvs/sudoku.sln create mode 100644 examples/task_group/sudoku/msvs/sudoku.vcxproj create mode 100644 examples/task_group/sudoku/readme.html create mode 100644 examples/task_group/sudoku/sudoku.cpp create mode 100644 examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj create mode 100644 examples/test_all/fibonacci/Fibonacci.cpp create mode 100644 examples/test_all/fibonacci/Makefile create mode 100644 examples/test_all/fibonacci/Makefile.windows create mode 100644 examples/test_all/fibonacci/msvs/fibonacci.sln create mode 100644 examples/test_all/fibonacci/msvs/fibonacci.vcxproj create mode 100644 examples/test_all/fibonacci/readme.html create mode 100644 examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj create mode 100644 examples/test_all/index.html create mode 100644 include/index.html create mode 100644 include/serial/tbb/parallel_for.h create mode 100644 include/serial/tbb/tbb_annotate.h create mode 100644 include/tbb/aggregator.h create mode 100644 include/tbb/aligned_space.h create mode 100644 include/tbb/atomic.h create mode 100644 include/tbb/blocked_range.h create mode 100644 include/tbb/blocked_range2d.h create mode 100644 include/tbb/blocked_range3d.h create mode 100644 include/tbb/cache_aligned_allocator.h create mode 100644 include/tbb/combinable.h create mode 100644 include/tbb/compat/condition_variable create mode 100644 include/tbb/compat/ppl.h create mode 100644 include/tbb/compat/thread create mode 100644 include/tbb/compat/tuple create mode 100644 include/tbb/concurrent_hash_map.h create mode 100644 include/tbb/concurrent_lru_cache.h create mode 100644 include/tbb/concurrent_priority_queue.h create mode 100644 include/tbb/concurrent_queue.h create mode 100644 include/tbb/concurrent_unordered_map.h create mode 100644 include/tbb/concurrent_unordered_set.h create mode 100644 include/tbb/concurrent_vector.h create mode 100644 include/tbb/critical_section.h create mode 100644 include/tbb/enumerable_thread_specific.h create mode 100644 include/tbb/flow_graph.h create mode 100644 include/tbb/flow_graph_abstractions.h create mode 100644 include/tbb/flow_graph_opencl_node.h create mode 100644 include/tbb/gfx_factory.h create mode 100644 include/tbb/global_control.h create mode 100644 include/tbb/index.html create mode 100644 include/tbb/internal/_aggregator_impl.h create mode 100644 include/tbb/internal/_concurrent_queue_impl.h create mode 100644 include/tbb/internal/_concurrent_unordered_impl.h create mode 100644 include/tbb/internal/_flow_graph_async_msg_impl.h create mode 100644 include/tbb/internal/_flow_graph_impl.h create mode 100644 include/tbb/internal/_flow_graph_indexer_impl.h create mode 100644 include/tbb/internal/_flow_graph_item_buffer_impl.h create mode 100644 include/tbb/internal/_flow_graph_join_impl.h create mode 100644 include/tbb/internal/_flow_graph_node_impl.h create mode 100644 include/tbb/internal/_flow_graph_streaming_node.h create mode 100644 include/tbb/internal/_flow_graph_tagged_buffer_impl.h create mode 100644 include/tbb/internal/_flow_graph_trace_impl.h create mode 100644 include/tbb/internal/_flow_graph_types_impl.h create mode 100644 include/tbb/internal/_mutex_padding.h create mode 100644 include/tbb/internal/_range_iterator.h create mode 100644 include/tbb/internal/_tbb_hash_compare_impl.h create mode 100644 include/tbb/internal/_tbb_strings.h create mode 100644 include/tbb/internal/_tbb_windef.h create mode 100644 include/tbb/internal/_template_helpers.h create mode 100644 include/tbb/internal/_x86_eliding_mutex_impl.h create mode 100644 include/tbb/internal/_x86_rtm_rw_mutex_impl.h create mode 100644 include/tbb/machine/gcc_armv7.h create mode 100644 include/tbb/machine/gcc_generic.h create mode 100644 include/tbb/machine/gcc_ia32_common.h create mode 100644 include/tbb/machine/gcc_itsx.h create mode 100644 include/tbb/machine/ibm_aix51.h create mode 100644 include/tbb/machine/icc_generic.h create mode 100644 include/tbb/machine/linux_common.h create mode 100644 include/tbb/machine/linux_ia32.h create mode 100644 include/tbb/machine/linux_ia64.h create mode 100644 include/tbb/machine/linux_intel64.h create mode 100644 include/tbb/machine/mac_ppc.h create mode 100644 include/tbb/machine/macos_common.h create mode 100644 include/tbb/machine/mic_common.h create mode 100644 include/tbb/machine/msvc_armv7.h create mode 100644 include/tbb/machine/msvc_ia32_common.h create mode 100644 include/tbb/machine/sunos_sparc.h create mode 100644 include/tbb/machine/windows_api.h create mode 100644 include/tbb/machine/windows_ia32.h create mode 100644 include/tbb/machine/windows_intel64.h create mode 100644 include/tbb/memory_pool.h create mode 100644 include/tbb/mutex.h create mode 100644 include/tbb/null_mutex.h create mode 100644 include/tbb/null_rw_mutex.h create mode 100644 include/tbb/parallel_do.h create mode 100644 include/tbb/parallel_for.h create mode 100644 include/tbb/parallel_for_each.h create mode 100644 include/tbb/parallel_invoke.h create mode 100644 include/tbb/parallel_reduce.h create mode 100644 include/tbb/parallel_scan.h create mode 100644 include/tbb/parallel_sort.h create mode 100644 include/tbb/parallel_while.h create mode 100644 include/tbb/partitioner.h create mode 100644 include/tbb/pipeline.h create mode 100644 include/tbb/queuing_mutex.h create mode 100644 include/tbb/queuing_rw_mutex.h create mode 100644 include/tbb/reader_writer_lock.h create mode 100644 include/tbb/recursive_mutex.h create mode 100644 include/tbb/runtime_loader.h create mode 100644 include/tbb/scalable_allocator.h create mode 100644 include/tbb/spin_mutex.h create mode 100644 include/tbb/spin_rw_mutex.h create mode 100644 include/tbb/task.h create mode 100644 include/tbb/task_arena.h create mode 100644 include/tbb/task_group.h create mode 100644 include/tbb/task_scheduler_init.h create mode 100644 include/tbb/task_scheduler_observer.h create mode 100644 include/tbb/tbb.h create mode 100644 include/tbb/tbb_allocator.h create mode 100644 include/tbb/tbb_config.h create mode 100644 include/tbb/tbb_disable_exceptions.h create mode 100644 include/tbb/tbb_exception.h create mode 100644 include/tbb/tbb_machine.h create mode 100644 include/tbb/tbb_profiling.h create mode 100644 include/tbb/tbb_stddef.h create mode 100644 include/tbb/tbb_thread.h create mode 100644 include/tbb/tbbmalloc_proxy.h create mode 100644 include/tbb/tick_count.h create mode 100644 index.html create mode 100644 jni/Android.mk create mode 100644 jni/Application.mk create mode 100644 python/Makefile create mode 100644 python/index.html create mode 100644 python/setup.py create mode 100644 python/tbb.i create mode 100644 python/tbb.src.py create mode 100644 src/Makefile create mode 100644 src/index.html create mode 100644 src/old/concurrent_queue_v2.cpp create mode 100644 src/old/concurrent_queue_v2.h create mode 100644 src/old/concurrent_vector_v2.cpp create mode 100644 src/old/concurrent_vector_v2.h create mode 100644 src/old/spin_rw_mutex_v2.cpp create mode 100644 src/old/spin_rw_mutex_v2.h create mode 100644 src/old/task_v2.cpp create mode 100644 src/old/test_concurrent_queue_v2.cpp create mode 100644 src/old/test_concurrent_vector_v2.cpp create mode 100644 src/old/test_mutex_v2.cpp create mode 100644 src/old/test_task_scheduler_observer_v3.cpp create mode 100644 src/perf/coarse_grained_raii_lru_cache.h create mode 100644 src/perf/cpq_pdes.cpp create mode 100644 src/perf/fibonacci_impl_tbb.cpp create mode 100644 src/perf/perf.cpp create mode 100644 src/perf/perf.h create mode 100644 src/perf/perf_sched.cpp create mode 100644 src/perf/run_statistics.sh create mode 100644 src/perf/statistics.cpp create mode 100644 src/perf/statistics.h create mode 100644 src/perf/statistics_xml.h create mode 100644 src/perf/time_cpq_throughput_test.cpp create mode 100644 src/perf/time_fibonacci_cutoff.cpp create mode 100644 src/perf/time_framework.h create mode 100644 src/perf/time_hash_map.cpp create mode 100644 src/perf/time_hash_map_fill.cpp create mode 100644 src/perf/time_hash_map_fill.html create mode 100644 src/perf/time_locked_work.cpp create mode 100644 src/perf/time_lru_cache_throughput.cpp create mode 100644 src/perf/time_parallel_for_each.cpp create mode 100644 src/perf/time_sandbox.h create mode 100644 src/perf/time_split_node.cpp create mode 100644 src/perf/time_vector.cpp create mode 100644 src/rml/client/index.html create mode 100644 src/rml/client/library_assert.h create mode 100644 src/rml/client/omp_dynamic_link.cpp create mode 100644 src/rml/client/omp_dynamic_link.h create mode 100644 src/rml/client/rml_factory.h create mode 100644 src/rml/client/rml_omp.cpp create mode 100644 src/rml/client/rml_tbb.cpp create mode 100644 src/rml/include/index.html create mode 100644 src/rml/include/rml_base.h create mode 100644 src/rml/include/rml_omp.h create mode 100644 src/rml/include/rml_tbb.h create mode 100644 src/rml/index.html create mode 100644 src/rml/perfor/omp_nested.cpp create mode 100644 src/rml/perfor/omp_simple.cpp create mode 100644 src/rml/perfor/tbb_multi_omp.cpp create mode 100644 src/rml/perfor/tbb_simple.cpp create mode 100644 src/rml/perfor/thread_level.h create mode 100644 src/rml/server/index.html create mode 100644 src/rml/server/irml.rc create mode 100644 src/rml/server/job_automaton.h create mode 100644 src/rml/server/lin-rml-export.def create mode 100644 src/rml/server/rml_server.cpp create mode 100644 src/rml/server/thread_monitor.h create mode 100644 src/rml/server/wait_counter.h create mode 100644 src/rml/server/win32-rml-export.def create mode 100644 src/rml/server/win64-rml-export.def create mode 100644 src/rml/test/rml_omp_stub.cpp create mode 100644 src/rml/test/test_job_automaton.cpp create mode 100644 src/rml/test/test_rml_mixed.cpp create mode 100644 src/rml/test/test_rml_omp.cpp create mode 100644 src/rml/test/test_rml_omp_c_linkage.c create mode 100644 src/rml/test/test_rml_tbb.cpp create mode 100644 src/rml/test/test_server.h create mode 100644 src/rml/test/test_thread_monitor.cpp create mode 100644 src/tbb/arena.cpp create mode 100644 src/tbb/arena.h create mode 100644 src/tbb/cache_aligned_allocator.cpp create mode 100644 src/tbb/cilk-tbb-interop.h create mode 100644 src/tbb/concurrent_hash_map.cpp create mode 100644 src/tbb/concurrent_monitor.cpp create mode 100644 src/tbb/concurrent_monitor.h create mode 100644 src/tbb/concurrent_queue.cpp create mode 100644 src/tbb/concurrent_vector.cpp create mode 100644 src/tbb/condition_variable.cpp create mode 100644 src/tbb/critical_section.cpp create mode 100644 src/tbb/custom_scheduler.h create mode 100644 src/tbb/dynamic_link.cpp create mode 100644 src/tbb/dynamic_link.h create mode 100644 src/tbb/governor.cpp create mode 100644 src/tbb/governor.h create mode 100644 src/tbb/ia32-masm/atomic_support.asm create mode 100644 src/tbb/ia32-masm/itsx.asm create mode 100644 src/tbb/ia32-masm/lock_byte.asm create mode 100644 src/tbb/ia64-gas/atomic_support.s create mode 100644 src/tbb/ia64-gas/ia64_misc.s create mode 100644 src/tbb/ia64-gas/lock_byte.s create mode 100644 src/tbb/ia64-gas/log2.s create mode 100644 src/tbb/ia64-gas/pause.s create mode 100644 src/tbb/ibm_aix51/atomic_support.c create mode 100644 src/tbb/index.html create mode 100644 src/tbb/intel64-masm/atomic_support.asm create mode 100644 src/tbb/intel64-masm/intel64_misc.asm create mode 100644 src/tbb/intel64-masm/itsx.asm create mode 100644 src/tbb/intrusive_list.h create mode 100644 src/tbb/itt_notify.cpp create mode 100644 src/tbb/itt_notify.h create mode 100644 src/tbb/lin32-tbb-export.def create mode 100644 src/tbb/lin32-tbb-export.lst create mode 100644 src/tbb/lin64-tbb-export.def create mode 100644 src/tbb/lin64-tbb-export.lst create mode 100644 src/tbb/lin64ipf-tbb-export.def create mode 100644 src/tbb/lin64ipf-tbb-export.lst create mode 100644 src/tbb/mac32-tbb-export.def create mode 100644 src/tbb/mac32-tbb-export.lst create mode 100644 src/tbb/mac64-tbb-export.def create mode 100644 src/tbb/mac64-tbb-export.lst create mode 100644 src/tbb/mailbox.h create mode 100644 src/tbb/market.cpp create mode 100644 src/tbb/market.h create mode 100644 src/tbb/mutex.cpp create mode 100644 src/tbb/observer_proxy.cpp create mode 100644 src/tbb/observer_proxy.h create mode 100644 src/tbb/pipeline.cpp create mode 100644 src/tbb/private_server.cpp create mode 100644 src/tbb/queuing_mutex.cpp create mode 100644 src/tbb/queuing_rw_mutex.cpp create mode 100644 src/tbb/reader_writer_lock.cpp create mode 100644 src/tbb/recursive_mutex.cpp create mode 100644 src/tbb/scheduler.cpp create mode 100644 src/tbb/scheduler.h create mode 100644 src/tbb/scheduler_common.h create mode 100644 src/tbb/scheduler_utility.h create mode 100644 src/tbb/semaphore.cpp create mode 100644 src/tbb/semaphore.h create mode 100644 src/tbb/spin_mutex.cpp create mode 100644 src/tbb/spin_rw_mutex.cpp create mode 100644 src/tbb/task.cpp create mode 100644 src/tbb/task_group_context.cpp create mode 100644 src/tbb/task_stream.h create mode 100644 src/tbb/tbb_assert_impl.h create mode 100644 src/tbb/tbb_main.cpp create mode 100644 src/tbb/tbb_main.h create mode 100644 src/tbb/tbb_misc.cpp create mode 100644 src/tbb/tbb_misc.h create mode 100644 src/tbb/tbb_misc_ex.cpp create mode 100644 src/tbb/tbb_resource.rc create mode 100644 src/tbb/tbb_statistics.cpp create mode 100644 src/tbb/tbb_statistics.h create mode 100644 src/tbb/tbb_thread.cpp create mode 100644 src/tbb/tbb_version.h create mode 100644 src/tbb/tls.h create mode 100644 src/tbb/tools_api/disable_warnings.h create mode 100644 src/tbb/tools_api/ittnotify.h create mode 100644 src/tbb/tools_api/ittnotify_config.h create mode 100644 src/tbb/tools_api/ittnotify_static.c create mode 100644 src/tbb/tools_api/ittnotify_static.h create mode 100644 src/tbb/tools_api/ittnotify_types.h create mode 100644 src/tbb/tools_api/legacy/ittnotify.h create mode 100644 src/tbb/win32-tbb-export.def create mode 100644 src/tbb/win32-tbb-export.lst create mode 100644 src/tbb/win64-gcc-tbb-export.def create mode 100644 src/tbb/win64-gcc-tbb-export.lst create mode 100644 src/tbb/win64-tbb-export.def create mode 100644 src/tbb/win64-tbb-export.lst create mode 100644 src/tbb/winrt-tbb-export.lst create mode 100644 src/tbb/x86_rtm_rw_mutex.cpp create mode 100644 src/tbbmalloc/Customize.h create mode 100644 src/tbbmalloc/MapMemory.h create mode 100644 src/tbbmalloc/Statistics.h create mode 100644 src/tbbmalloc/TypeDefinitions.h create mode 100644 src/tbbmalloc/backend.cpp create mode 100644 src/tbbmalloc/backref.cpp create mode 100644 src/tbbmalloc/frontend.cpp create mode 100644 src/tbbmalloc/index.html create mode 100644 src/tbbmalloc/large_objects.cpp create mode 100644 src/tbbmalloc/lin32-proxy-export.def create mode 100644 src/tbbmalloc/lin32-tbbmalloc-export.def create mode 100644 src/tbbmalloc/lin64-proxy-export.def create mode 100644 src/tbbmalloc/lin64-tbbmalloc-export.def create mode 100644 src/tbbmalloc/lin64ipf-proxy-export.def create mode 100644 src/tbbmalloc/lin64ipf-tbbmalloc-export.def create mode 100644 src/tbbmalloc/mac32-tbbmalloc-export.def create mode 100644 src/tbbmalloc/mac64-tbbmalloc-export.def create mode 100644 src/tbbmalloc/proxy.cpp create mode 100644 src/tbbmalloc/proxy.h create mode 100644 src/tbbmalloc/proxy_overload_osx.h create mode 100644 src/tbbmalloc/shared_utils.h create mode 100644 src/tbbmalloc/tbb_function_replacement.cpp create mode 100644 src/tbbmalloc/tbb_function_replacement.h create mode 100644 src/tbbmalloc/tbbmalloc.cpp create mode 100644 src/tbbmalloc/tbbmalloc.rc create mode 100644 src/tbbmalloc/tbbmalloc_internal.h create mode 100644 src/tbbmalloc/tbbmalloc_internal_api.h create mode 100644 src/tbbmalloc/win32-gcc-tbbmalloc-export.def create mode 100644 src/tbbmalloc/win32-tbbmalloc-export.def create mode 100644 src/tbbmalloc/win64-gcc-tbbmalloc-export.def create mode 100644 src/tbbmalloc/win64-tbbmalloc-export.def create mode 100644 src/tbbproxy/tbbproxy-windows.asm create mode 100644 src/tbbproxy/tbbproxy.cpp create mode 100644 src/test/harness.h create mode 100644 src/test/harness_allocator.h create mode 100644 src/test/harness_allocator_overload.h create mode 100644 src/test/harness_assert.h create mode 100644 src/test/harness_bad_expr.h create mode 100644 src/test/harness_barrier.h create mode 100644 src/test/harness_checktype.h create mode 100644 src/test/harness_concurrency.h create mode 100644 src/test/harness_concurrency_tracker.h create mode 100644 src/test/harness_cpu.h create mode 100644 src/test/harness_defs.h create mode 100644 src/test/harness_dynamic_libs.h create mode 100644 src/test/harness_eh.h create mode 100644 src/test/harness_fp.h create mode 100644 src/test/harness_graph.h create mode 100644 src/test/harness_inject_scheduler.h create mode 100644 src/test/harness_iterator.h create mode 100644 src/test/harness_m128.h create mode 100644 src/test/harness_memory.h create mode 100644 src/test/harness_mic.h create mode 100644 src/test/harness_preload.h create mode 100644 src/test/harness_report.h create mode 100644 src/test/harness_runtime_loader.h create mode 100644 src/test/harness_state_trackable.h create mode 100644 src/test/harness_task.h create mode 100644 src/test/harness_tbb_independence.h create mode 100644 src/test/harness_test_cases_framework.h create mode 100644 src/test/harness_tls.h create mode 100644 src/test/harness_tsx.h create mode 100644 src/test/test_ScalableAllocator.cpp create mode 100644 src/test/test_ScalableAllocator_STL.cpp create mode 100644 src/test/test_aggregator.cpp create mode 100644 src/test/test_aligned_space.cpp create mode 100644 src/test/test_allocator.h create mode 100644 src/test/test_allocator_STL.h create mode 100644 src/test/test_assembly.cpp create mode 100644 src/test/test_async_msg.cpp create mode 100644 src/test/test_async_node.cpp create mode 100644 src/test/test_atomic.cpp create mode 100644 src/test/test_blocked_range.cpp create mode 100644 src/test/test_blocked_range2d.cpp create mode 100644 src/test/test_blocked_range3d.cpp create mode 100644 src/test/test_broadcast_node.cpp create mode 100644 src/test/test_buffer_node.cpp create mode 100644 src/test/test_cache_aligned_allocator.cpp create mode 100644 src/test/test_cache_aligned_allocator_STL.cpp create mode 100644 src/test/test_cilk_common.h create mode 100644 src/test/test_cilk_dynamic_load.cpp create mode 100644 src/test/test_cilk_interop.cpp create mode 100644 src/test/test_combinable.cpp create mode 100644 src/test/test_composite_node.cpp create mode 100644 src/test/test_concurrent_hash_map.cpp create mode 100644 src/test/test_concurrent_lru_cache.cpp create mode 100644 src/test/test_concurrent_monitor.cpp create mode 100644 src/test/test_concurrent_priority_queue.cpp create mode 100644 src/test/test_concurrent_queue.cpp create mode 100644 src/test/test_concurrent_queue_whitebox.cpp create mode 100644 src/test/test_concurrent_unordered_common.h create mode 100644 src/test/test_concurrent_unordered_map.cpp create mode 100644 src/test/test_concurrent_unordered_set.cpp create mode 100644 src/test/test_concurrent_vector.cpp create mode 100644 src/test/test_condition_variable.h create mode 100644 src/test/test_container_move_support.h create mode 100644 src/test/test_continue_node.cpp create mode 100644 src/test/test_critical_section.cpp create mode 100644 src/test/test_dynamic_link.cpp create mode 100644 src/test/test_eh_algorithms.cpp create mode 100644 src/test/test_eh_flow_graph.cpp create mode 100644 src/test/test_eh_tasks.cpp create mode 100644 src/test/test_enumerable_thread_specific.cpp create mode 100644 src/test/test_examples_common_utility.cpp create mode 100644 src/test/test_fast_random.cpp create mode 100644 src/test/test_flow_graph.cpp create mode 100644 src/test/test_flow_graph_whitebox.cpp create mode 100644 src/test/test_fp.cpp create mode 100644 src/test/test_function_node.cpp create mode 100644 src/test/test_gfx_factory.cpp create mode 100644 src/test/test_global_control.cpp create mode 100644 src/test/test_global_control_whitebox.cpp create mode 100644 src/test/test_halt.cpp create mode 100644 src/test/test_handle_perror.cpp create mode 100644 src/test/test_hw_concurrency.cpp create mode 100644 src/test/test_indexer_node.cpp create mode 100644 src/test/test_initializer_list.h create mode 100644 src/test/test_inits_loop.cpp create mode 100644 src/test/test_intrusive_list.cpp create mode 100644 src/test/test_ittnotify.cpp create mode 100644 src/test/test_join_node.cpp create mode 100644 src/test/test_join_node.h create mode 100644 src/test/test_join_node_key_matching.cpp create mode 100644 src/test/test_join_node_msg_key_matching.cpp create mode 100644 src/test/test_lambda.cpp create mode 100644 src/test/test_limiter_node.cpp create mode 100644 src/test/test_malloc_atexit.cpp create mode 100644 src/test/test_malloc_compliance.cpp create mode 100644 src/test/test_malloc_init_shutdown.cpp create mode 100644 src/test/test_malloc_lib_unload.cpp create mode 100644 src/test/test_malloc_overload.cpp create mode 100644 src/test/test_malloc_pools.cpp create mode 100644 src/test/test_malloc_pure_c.c create mode 100644 src/test/test_malloc_regression.cpp create mode 100644 src/test/test_malloc_used_by_lib.cpp create mode 100644 src/test/test_malloc_whitebox.cpp create mode 100644 src/test/test_model_plugin.cpp create mode 100644 src/test/test_multifunction_node.cpp create mode 100644 src/test/test_mutex.cpp create mode 100644 src/test/test_mutex_native_threads.cpp create mode 100644 src/test/test_opencl_kernel_32.spir create mode 100644 src/test/test_opencl_kernel_64.spir create mode 100644 src/test/test_opencl_node.cl create mode 100644 src/test/test_opencl_node.cpp create mode 100644 src/test/test_opencl_precompiled_kernel_gpu_32.ir create mode 100644 src/test/test_opencl_precompiled_kernel_gpu_64.ir create mode 100644 src/test/test_openmp.cpp create mode 100644 src/test/test_overwrite_node.cpp create mode 100644 src/test/test_parallel_do.cpp create mode 100644 src/test/test_parallel_for.cpp create mode 100644 src/test/test_parallel_for_each.cpp create mode 100644 src/test/test_parallel_for_vectorization.cpp create mode 100644 src/test/test_parallel_invoke.cpp create mode 100644 src/test/test_parallel_pipeline.cpp create mode 100644 src/test/test_parallel_reduce.cpp create mode 100644 src/test/test_parallel_scan.cpp create mode 100644 src/test/test_parallel_sort.cpp create mode 100644 src/test/test_parallel_while.cpp create mode 100644 src/test/test_partitioner.h create mode 100644 src/test/test_partitioner_whitebox.cpp create mode 100644 src/test/test_partitioner_whitebox.h create mode 100644 src/test/test_pipeline.cpp create mode 100644 src/test/test_pipeline_with_tbf.cpp create mode 100644 src/test/test_priority_queue_node.cpp create mode 100644 src/test/test_queue_node.cpp create mode 100644 src/test/test_range_based_for.h create mode 100644 src/test/test_reader_writer_lock.cpp create mode 100644 src/test/test_runtime_loader.cpp create mode 100644 src/test/test_rwm_upgrade_downgrade.cpp create mode 100644 src/test/test_semaphore.cpp create mode 100644 src/test/test_sequencer_node.cpp create mode 100644 src/test/test_source_node.cpp create mode 100644 src/test/test_split_node.cpp create mode 100644 src/test/test_static_assert.cpp create mode 100644 src/test/test_std_thread.cpp create mode 100644 src/test/test_streaming_node.cpp create mode 100644 src/test/test_tagged_msg.cpp create mode 100644 src/test/test_task.cpp create mode 100644 src/test/test_task_arena.cpp create mode 100644 src/test/test_task_assertions.cpp create mode 100644 src/test/test_task_auto_init.cpp create mode 100644 src/test/test_task_enqueue.cpp create mode 100644 src/test/test_task_group.cpp create mode 100644 src/test/test_task_leaks.cpp create mode 100644 src/test/test_task_priority.cpp create mode 100644 src/test/test_task_scheduler_init.cpp create mode 100644 src/test/test_task_scheduler_observer.cpp create mode 100644 src/test/test_task_steal_limit.cpp create mode 100644 src/test/test_tbb_condition_variable.cpp create mode 100644 src/test/test_tbb_fork.cpp create mode 100644 src/test/test_tbb_header.cpp create mode 100644 src/test/test_tbb_thread.cpp create mode 100644 src/test/test_tbb_version.cpp create mode 100644 src/test/test_thread.h create mode 100644 src/test/test_tick_count.cpp create mode 100644 src/test/test_tuple.cpp create mode 100644 src/test/test_write_once_node.cpp create mode 100644 src/test/test_yield.cpp diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..039edb3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,45 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Explicitly declare text files you want to always be normalized and converted +# to native line endings on checkout. +*.c text +*.h text +*.cpp text +*.def text +*.rc text +*.i text +*.sh text +*.csh text +*.mk text +*.java text +*.csv text +*.lst text +*.asm text +*.cfg text +*.css text +*.inc text +*.js text +*.rb text +*.strings text +*.txt text +*export.lst text +*.xml text +*.py text +*.md text +*.classpath text +*.cproject text +*.project text +*.properties text +*.java text +*.gradle text + +# Declare files that will always have CRLF line endings on checkout. +*.sln text eol=crlf +*.bat text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary +*.ico binary +*.spir binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0182b14 --- /dev/null +++ b/.gitignore @@ -0,0 +1,86 @@ +# Ignore the debug and release directories created with Makefile builds # +######################################################################### +build/*_debug/ +build/*_release/ + +# Compiled source # +################### +*.com +*.class +*.dll +*.lib +*.pdb +*.exe +*.o +*.so +*.so.1 +*.so.2 +*.dylib +*.a +*.obj +*.pyc + +*.orig +*.raw +*.sample +*.slo +*.swp +*.config +*.la +*.lai +*.lo +*.nhdr +*.nii.gz +*.nrrd + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.tgz +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDE generated files # +###################### +/.ninja_deps +/.ninja_log +/build.ninja +/rules.ninja +*~ +.emacs.desktop + +# Build system generated files # +################################ +CMakeCache.txt +CMakeFiles/ + +# Other # +######### +.clang_complete +.idea +.svn +crash* +*.tmp diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..f495d99 --- /dev/null +++ b/CHANGES @@ -0,0 +1,2412 @@ +------------------------------------------------------------------------ +The list of most significant changes made over time in +Intel(R) Threading Building Blocks (Intel(R) TBB). + +Intel TBB 2018 +TBB_INTERFACE_VERSION == 10000 + +Changes (w.r.t. Intel TBB 2017 Update 7): + +- Introduced Parallel STL, an implementation of the C++ standard + library algorithms with support for execution policies. For more + information, see Getting Started with Parallel STL + (https://software.intel.com/en-us/get-started-with-pstl). +- this_task_arena::isolate() function is now a fully supported feature. +- this_task_arena::isolate() function and task_arena::execute() method + were extended to pass on the value returned by the executed functor + (requires C++11). +- task_arena::enqueue() and task_group::run() methods extended to accept + move-only functors. +- A flow graph now spawns all tasks into the same task arena, + and waiting for graph completion also happens in that arena. +- Improved support for Flow Graph Advisor in async_node, opencl_node, + and composite_node. +- Added support for Android* NDK r15, r15b. +- Added support for Universal Windows Platform. +- Increased minimally supported version of macOS* + (MACOSX_DEPLOYMENT_TARGET) to 10.11. + +Changes affecting backward compatibility: + +- Internal layout changes in some flow graph classes; +- Several undocumented methods are removed from class graph, + including set_active() and is_active(). +- Due to incompatible changes, the namespace version is updated + for the flow graph; recompilation is recommended for all + binaries that use the flow graph classes. + +Preview Features: + +- opencl_node can be used with any graph object; class opencl_graph + is removed. +- graph::wait_for_all() now automatically waits for all not yet consumed + async_msg objects. +- Improved concurrent_lru_cache::handle_object to support C++11 move + semantics, default construction, and conversion to bool. + +Bugs fixed: + +- Fixed a bug preventing use of streaming_node and opencl_node with + Clang; inspired by a contribution from Francisco Facioni. +- Fixed this_task_arena::isolate() function to work correctly with + parallel_invoke and parallel_do algorithms. +- Fixed a memory leak in composite_node. +- Fixed an assertion failure in debug tbbmalloc binaries when + TBBMALLOC_CLEAN_ALL_BUFFERS is used. + +------------------------------------------------------------------------ +Intel TBB 2017 Update 7 +TBB_INTERFACE_VERSION == 9107 + +Changes (w.r.t. Intel TBB 2017 Update 6): + +- In the huge pages mode, the memory allocator now is also able to use + transparent huge pages. + +Preview Features: + +- Added support for Intel TBB integration into CMake-aware + projects, with valuable guidance and feedback provided by Brad King + (Kitware). + +Bugs fixed: + +- Fixed scalable_allocation_command(TBBMALLOC_CLEAN_ALL_BUFFERS, 0) + to process memory left after exited threads. + +------------------------------------------------------------------------ +Intel TBB 2017 Update 6 +TBB_INTERFACE_VERSION == 9106 + +Changes (w.r.t. Intel TBB 2017 Update 5): + +- Added support for Android* NDK r14. + +Preview Features: + +- Added a blocking terminate extension to the task_scheduler_init class + that allows an object to wait for termination of worker threads. + +Bugs fixed: + +- Fixed compilation and testing issues with MinGW (GCC 6). +- Fixed compilation with /std:c++latest option of VS 2017 + (https://github.com/01org/tbb/issues/13). + +------------------------------------------------------------------------ +Intel TBB 2017 Update 5 +TBB_INTERFACE_VERSION == 9105 + +Changes (w.r.t. Intel TBB 2017 Update 4): + +- Added support for Microsoft* Visual Studio* 2017. +- Added graph/matmult example to demonstrate support for compute offload + to Intel(R) Graphics Technology in the flow graph API. +- The "compiler" build option now allows to specify a full path to the + compiler. + +Changes affecting backward compatibility: + +- Constructors for many classes, including graph nodes, concurrent + containers, thread-local containers, etc., are declared explicit and + cannot be used for implicit conversions anymore. + +Bugs fixed: + +- Added a workaround for bug 16657 in the GNU C Library (glibc) + affecting the debug version of tbb::mutex. +- Fixed a crash in pool_identify() called for an object allocated in + another thread. + +------------------------------------------------------------------------ +Intel TBB 2017 Update 4 +TBB_INTERFACE_VERSION == 9104 + +Changes (w.r.t. Intel TBB 2017 Update 3): + +- Added support for C++11 move semantics in parallel_do. +- Added support for FreeBSD* 11. + +Changes affecting backward compatibility: + +- Minimal compiler versions required for support of C++11 move semantics + raised to GCC 4.5, VS 2012, and Intel(R) C++ Compiler 14.0. + +Bugs fixed: + +- The workaround for crashes in the library compiled with GCC 6 + (-flifetime-dse=1) was extended to Windows*. + +------------------------------------------------------------------------ +Intel TBB 2017 Update 3 +TBB_INTERFACE_VERSION == 9103 + +Changes (w.r.t. Intel TBB 2017 Update 2): + +- Added support for Android* 7.0 and Android* NDK r13, r13b. + +Preview Features: + +- Added template class gfx_factory to the flow graph API. It implements + the Factory concept for streaming_node to offload computations to + Intel(R) processor graphics. + +Bugs fixed: + +- Fixed a possible deadlock caused by missed wakeup signals in + task_arena::execute(). + +Open-source contributions integrated: + +- A build fix for Linux* s390x platform by Jerry J. + +------------------------------------------------------------------------ +Intel TBB 2017 Update 2 +TBB_INTERFACE_VERSION == 9102 + +Changes (w.r.t. Intel TBB 2017 Update 1): + +- Removed the long-outdated support for Xbox* consoles. + +Bugs fixed: + +- Fixed the issue with task_arena::execute() not being processed when + the calling thread cannot join the arena. +- Fixed dynamic memory allocation replacement failure on macOS* 10.12. + +------------------------------------------------------------------------ +Intel TBB 2017 Update 1 +TBB_INTERFACE_VERSION == 9101 + +Changes (w.r.t. Intel TBB 2017): + +Bugs fixed: + +- Fixed dynamic memory allocation replacement failures on Windows* 10 + Anniversary Update. +- Fixed emplace() method of concurrent unordered containers to not + require a copy constructor. + +------------------------------------------------------------------------ +Intel TBB 2017 +TBB_INTERFACE_VERSION == 9100 + +Changes (w.r.t. Intel TBB 4.4 Update 5): + +- static_partitioner class is now a fully supported feature. +- async_node class is now a fully supported feature. +- Improved dynamic memory allocation replacement on Windows* OS to skip + DLLs for which replacement cannot be done, instead of aborting. +- Intel TBB no longer performs dynamic memory allocation replacement + for Microsoft* Visual Studio* 2008. +- For 64-bit platforms, quadrupled the worst-case limit on the amount + of memory the Intel TBB allocator can handle. +- Added TBB_USE_GLIBCXX_VERSION macro to specify the version of GNU + libstdc++ when it cannot be properly recognized, e.g. when used + with Clang on Linux* OS. Inspired by a contribution from David A. +- Added graph/stereo example to demostrate tbb::flow::async_msg. +- Removed a few cases of excessive user data copying in the flow graph. +- Reworked split_node to eliminate unnecessary overheads. +- Added support for C++11 move semantics to the argument of + tbb::parallel_do_feeder::add() method. +- Added C++11 move constructor and assignment operator to + tbb::combinable template class. +- Added tbb::this_task_arena::max_concurrency() function and + max_concurrency() method of class task_arena returning the maximal + number of threads that can work inside an arena. +- Deprecated tbb::task_arena::current_thread_index() static method; + use tbb::this_task_arena::current_thread_index() function instead. +- All examples for commercial version of library moved online: + https://software.intel.com/en-us/product-code-samples. Examples are + available as a standalone package or as a part of Intel(R) Parallel + Studio XE or Intel(R) System Studio Online Samples packages. + +Changes affecting backward compatibility: + +- Renamed following methods and types in async_node class: + Old New + async_gateway_type => gateway_type + async_gateway() => gateway() + async_try_put() => try_put() + async_reserve() => reserve_wait() + async_commit() => release_wait() +- Internal layout of some flow graph nodes has changed; recompilation + is recommended for all binaries that use the flow graph. + +Preview Features: + +- Added template class streaming_node to the flow graph API. It allows + a flow graph to offload computations to other devices through + streaming or offloading APIs. +- Template class opencl_node reimplemented as a specialization of + streaming_node that works with OpenCL*. +- Added tbb::this_task_arena::isolate() function to isolate execution + of a group of tasks or an algorithm from other tasks submitted + to the scheduler. + +Bugs fixed: + +- Added a workaround for GCC bug #62258 in std::rethrow_exception() + to prevent possible problems in case of exception propagation. +- Fixed parallel_scan to provide correct result if the initial value + of an accumulator is not the operation identity value. +- Fixed a memory corruption in the memory allocator when it meets + internal limits. +- Fixed the memory allocator on 64-bit platforms to align memory + to 16 bytes by default for all allocations bigger than 8 bytes. +- As a workaround for crashes in the Intel TBB library compiled with + GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS. +- Fixed a race in the flow graph implementation. + +Open-source contributions integrated: + +- Enabling use of C++11 'override' keyword by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.4 Update 6 +TBB_INTERFACE_VERSION == 9006 + +Changes (w.r.t. Intel TBB 4.4 Update 5): + +- For 64-bit platforms, quadrupled the worst-case limit on the amount + of memory the Intel TBB allocator can handle. + +Bugs fixed: + +- Fixed a memory corruption in the memory allocator when it meets + internal limits. +- Fixed the memory allocator on 64-bit platforms to align memory + to 16 bytes by default for all allocations bigger than 8 bytes. +- Fixed parallel_scan to provide correct result if the initial value + of an accumulator is not the operation identity value. +- As a workaround for crashes in the Intel TBB library compiled with + GCC 6, added -flifetime-dse=1 to compilation options on Linux* OS. + +------------------------------------------------------------------------ +Intel TBB 4.4 Update 5 +TBB_INTERFACE_VERSION == 9005 + +Changes (w.r.t. Intel TBB 4.4 Update 4): + +- Modified graph/fgbzip2 example to remove unnecessary data queuing. + +Preview Features: + +- Added a Python* module which is able to replace Python's thread pool + class with the implementation based on Intel TBB task scheduler. + +Bugs fixed: + +- Fixed the implementation of 64-bit tbb::atomic for IA-32 architecture + to work correctly with GCC 5.2 in C++11/14 mode. +- Fixed a possible crash when tasks with affinity (e.g. specified via + affinity_partitioner) are used simultaneously with task priority + changes. + +------------------------------------------------------------------------ +Intel TBB 4.4 Update 4 +TBB_INTERFACE_VERSION == 9004 + +Changes (w.r.t. Intel TBB 4.4 Update 3): + +- Removed a few cases of excessive user data copying in the flow graph. +- Improved robustness of concurrent_bounded_queue::abort() in case of + simultaneous push and pop operations. + +Preview Features: + +- Added tbb::flow::async_msg, a special message type to support + communications between the flow graph and external asynchronous + activities. +- async_node modified to support use with C++03 compilers. + +Bugs fixed: + +- Fixed a bug in dynamic memory allocation replacement for Windows* OS. +- Fixed excessive memory consumption on Linux* OS caused by enabling + zero-copy realloc. +- Fixed performance regression on Intel(R) Xeon Phi(tm) coprocessor with + auto_partitioner. + +------------------------------------------------------------------------ +Intel TBB 4.4 Update 3 +TBB_INTERFACE_VERSION == 9003 + +Changes (w.r.t. Intel TBB 4.4 Update 2): + +- Modified parallel_sort to not require a default constructor for values + and to use iter_swap() for value swapping. +- Added support for creating or initializing a task_arena instance that + is connected to the arena currently used by the thread. +- graph/binpack example modified to use multifunction_node. +- For performance analysis, use Intel(R) VTune(TM) Amplifier XE 2015 + and higher; older versions are no longer supported. +- Improved support for compilation with disabled RTTI, by omitting its use + in auxiliary code, such as assertions. However some functionality, + particularly the flow graph, does not work if RTTI is disabled. +- The tachyon example for Android* can be built using Android Studio 1.5 + and higher with experimental Gradle plugin 0.4.0. + +Preview Features: + +- Added class opencl_subbufer that allows using OpenCL* sub-buffer + objects with opencl_node. +- Class global_control supports the value of 1 for + max_allowed_parallelism. + +Bugs fixed: + +- Fixed a race causing "TBB Warning: setaffinity syscall failed" message. +- Fixed a compilation issue on OS X* with Intel(R) C++ Compiler 15.0. +- Fixed a bug in queuing_rw_mutex::downgrade() that could temporarily + block new readers. +- Fixed speculative_spin_rw_mutex to stop using the lazy subscription + technique due to its known flaws. +- Fixed memory leaks in the tool support code. + +------------------------------------------------------------------------ +Intel TBB 4.4 Update 2 +TBB_INTERFACE_VERSION == 9002 + +Changes (w.r.t. Intel TBB 4.4 Update 1): + +- Improved interoperability with Intel(R) OpenMP RTL (libiomp) on Linux: + OpenMP affinity settings do not affect the default number of threads + used in the task scheduler. Intel(R) C++ Compiler 16.0 Update 1 + or later is required. +- Added a new flow graph example with different implementations of the + Cholesky Factorization algorithm. + +Preview Features: + +- Added template class opencl_node to the flow graph API. It allows a + flow graph to offload computations to OpenCL* devices. +- Extended join_node to use type-specified message keys. It simplifies + the API of the node by obtaining message keys via functions + associated with the message type (instead of node ports). +- Added static_partitioner that minimizes overhead of parallel_for and + parallel_reduce for well-balanced workloads. +- Improved template class async_node in the flow graph API to support + user settable concurrency limits. + +Bugs fixed: + +- Fixed a possible crash in the GUI layer for library examples on Linux. + +------------------------------------------------------------------------ +Intel TBB 4.4 Update 1 +TBB_INTERFACE_VERSION == 9001 + +Changes (w.r.t. Intel TBB 4.4): + +- Added support for Microsoft* Visual Studio* 2015. +- Intel TBB no longer performs dynamic replacement of memory allocation + functions for Microsoft Visual Studio 2005 and earlier versions. +- For GCC 4.7 and higher, the intrinsics-based platform isolation layer + uses __atomic_* built-ins instead of the legacy __sync_* ones. + This change is inspired by a contribution from Mathieu Malaterre. +- Improvements in task_arena: + Several application threads may join a task_arena and execute tasks + simultaneously. The amount of concurrency reserved for application + threads at task_arena construction can be set to any value between + 0 and the arena concurrency limit. +- The fractal example was modified to demonstrate class task_arena + and moved to examples/task_arena/fractal. + +Bugs fixed: + +- Fixed a deadlock during destruction of task_scheduler_init objects + when one of destructors is set to wait for worker threads. +- Added a workaround for a possible crash on OS X* when dynamic memory + allocator replacement (libtbbmalloc_proxy) is used and memory is + released during application startup. +- Usage of mutable functors with task_group::run_and_wait() and + task_arena::enqueue() is disabled. An attempt to pass a functor + which operator()() is not const will produce compilation errors. +- Makefiles and environment scripts now properly recognize GCC 5.0 and + higher. + +Open-source contributions integrated: + +- Improved performance of parallel_for_each for inputs allowing random + access, by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.4 +TBB_INTERFACE_VERSION == 9000 + +Changes (w.r.t. Intel TBB 4.3 Update 6): + +- The following features are now fully supported: + tbb::flow::composite_node; + additional policies of tbb::flow::graph_node::reset(). +- Platform abstraction layer for Windows* OS updated to use compiler + intrinsics for most atomic operations. +- The tbb/compat/thread header updated to automatically include + C++11 where available. +- Fixes and refactoring in the task scheduler and class task_arena. +- Added key_matching policy to tbb::flow::join_node, which removes + the restriction on the type that can be compared-against. +- For tag_matching join_node, tag_value is redefined to be 64 bits + wide on all architectures. +- Expanded the documentation for the flow graph with details about + node semantics and behavior. +- Added dynamic replacement of C11 standard function aligned_alloc() + under Linux* OS. +- Added C++11 move constructors and assignment operators to + tbb::enumerable_thread_specific container. +- Added hashing support for tbb::tbb_thread::id. +- On OS X*, binaries that depend on libstdc++ are not provided anymore. + In the makefiles, libc++ is now used by default; for building with + libstdc++, specify stdlib=libstdc++ in the make command line. + +Preview Features: + +- Added a new example, graph/fgbzip2, that shows usage of + tbb::flow::async_node. +- Modification to the low-level API for memory pools: + added a function for finding a memory pool by an object allocated + from that pool. +- tbb::memory_pool now does not request memory till the first allocation + from the pool. + +Changes affecting backward compatibility: + +- Internal layout of flow graph nodes has changed; recompilation is + recommended for all binaries that use the flow graph. +- Resetting a tbb::flow::source_node will immediately activate it, + unless it was created in inactive state. + +Bugs fixed: + +- Failure at creation of a memory pool will not cause process + termination anymore. + +Open-source contributions integrated: + +- Supported building TBB with Clang on AArch64 with use of built-in + intrinsics by David A. + +------------------------------------------------------------------------ +Intel TBB 4.3 Update 6 +TBB_INTERFACE_VERSION == 8006 + +Changes (w.r.t. Intel TBB 4.3 Update 5): + +- Supported zero-copy realloc for objects >1MB under Linux* via + mremap system call. +- C++11 move-aware insert and emplace methods have been added to + concurrent_hash_map container. +- install_name is set to @rpath/ on OS X*. + +Preview Features: + +- Added template class async_node to the flow graph API. It allows a + flow graph to communicate with an external activity managed by + the user or another runtime. +- Improved speed of flow::graph::reset() clearing graph edges. + rf_extract flag has been renamed rf_clear_edges. +- extract() method of graph nodes now takes no arguments. + +Bugs fixed: + +- concurrent_unordered_{set,map} behaves correctly for degenerate + hashes. +- Fixed a race condition in the memory allocator that may lead to + excessive memory consumption under high multithreading load. + +------------------------------------------------------------------------ +Intel TBB 4.3 Update 5 +TBB_INTERFACE_VERSION == 8005 + +Changes (w.r.t. Intel TBB 4.3 Update 4): + +- Added add_ref_count() method of class tbb::task. + +Preview Features: + +- Added class global_control for application-wide control of allowed + parallelism and thread stack size. +- memory_pool_allocator now throws the std::bad_alloc exception on + allocation failure. +- Exceptions thrown for by memory pool constructors changed from + std::bad_alloc to std::invalid_argument and std::runtime_error. + +Bugs fixed: + +- scalable_allocator now throws the std::bad_alloc exception on + allocation failure. +- Fixed a race condition in the memory allocator that may lead to + excessive memory consumption under high multithreading load. +- A new scheduler created right after destruction of the previous one + might be unable to modify the number of worker threads. + +Open-source contributions integrated: + +- (Added but not enabled) push_front() method of class tbb::task_list + by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.3 Update 4 +TBB_INTERFACE_VERSION == 8004 + +Changes (w.r.t. Intel TBB 4.3 Update 3): + +- Added a C++11 variadic constructor for enumerable_thread_specific. + The arguments from this constructor are used to construct + thread-local values. +- Improved exception safety for enumerable_thread_specific. +- Added documentation for tbb::flow::tagged_msg class and + tbb::flow::output_port function. +- Fixed build errors for systems that do not support dynamic linking. +- C++11 move-aware insert and emplace methods have been added to + concurrent unordered containers. + +Preview Features: + +- Interface-breaking change: typedefs changed for node predecessor and + successor lists, affecting copy_predecessors and copy_successors + methods. +- Added template class composite_node to the flow graph API. It packages + a subgraph to represent it as a first-class flow graph node. +- make_edge and remove_edge now accept multiport nodes as arguments, + automatically using the node port with index 0 for an edge. + +Open-source contributions integrated: + +- Draft code for enumerable_thread_specific constructor with multiple + arguments (see above) by Adrien Guinet. +- Fix for GCC invocation on IBM* Blue Gene* + by Jeff Hammond and Raf Schietekat. +- Extended testing with smart pointers for Clang & libc++ + by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.3 Update 3 +TBB_INTERFACE_VERSION == 8003 + +Changes (w.r.t. Intel TBB 4.3 Update 2): + +- Move constructor and assignment operator were added to unique_lock. + +Preview Features: + +- Time overhead for memory pool destruction was reduced. + +Open-source contributions integrated: + +- Build error fix for iOS* by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.3 Update 2 +TBB_INTERFACE_VERSION == 8002 + +Changes (w.r.t. Intel TBB 4.3 Update 1): + +- Binary files for 64-bit Android* applications were added as part of the + Linux* OS package. +- Exact exception propagation is enabled for Intel C++ Compiler on OS X*. +- concurrent_vector::shrink_to_fit was optimized for types that support + C++11 move semantics. + +Bugs fixed: + +- Fixed concurrent unordered containers to insert elements much faster + in debug mode. +- Fixed concurrent priority queue to support types that do not have + copy constructors. +- Fixed enumerable_thread_specific to forbid copying from an instance + with a different value type. + +Open-source contributions integrated: + +- Support for PathScale* EKOPath* Compiler by Erik Lindahl. + +------------------------------------------------------------------------ +Intel TBB 4.3 Update 1 +TBB_INTERFACE_VERSION == 8001 + +Changes (w.r.t. Intel TBB 4.3): + +- The ability to split blocked_ranges in a proportion, used by + affinity_partitioner since version 4.2 Update 4, became a formal + extension of the Range concept. +- More checks for an incorrect address to release added to the debug + version of the memory allocator. +- Different kind of solutions for each TBB example were merged. + +Preview Features: + +- Task priorities are re-enabled in preview binaries. + +Bugs fixed: + +- Fixed a duplicate symbol when TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE is + used in multiple compilation units. +- Fixed a crash in __itt_fini_ittlib seen on Ubuntu 14.04. +- Fixed a crash in memory release after dynamic replacement of the + OS X* memory allocator. +- Fixed incorrect indexing of arrays in seismic example. +- Fixed a data race in lazy initialization of task_arena. + +Open-source contributions integrated: + +- Fix for dumping information about gcc and clang compiler versions + by Misty De Meo. + +------------------------------------------------------------------------ +Intel TBB 4.3 +TBB_INTERFACE_VERSION == 8000 + +Changes (w.r.t. Intel TBB 4.2 Update 5): + +- The following features are now fully supported: flow::indexer_node, + task_arena, speculative_spin_rw_mutex. +- Compatibility with C++11 standard improved for tbb/compat/thread + and tbb::mutex. +- C++11 move constructors have been added to concurrent_queue and + concurrent_bounded_queue. +- C++11 move constructors and assignment operators have been added to + concurrent_vector, concurrent_hash_map, concurrent_priority_queue, + concurrent_unordered_{set,multiset,map,multimap}. +- C++11 move-aware emplace/push/pop methods have been added to + concurrent_vector, concurrent_queue, concurrent_bounded_queue, + concurrent_priority_queue. +- Methods to insert a C++11 initializer list have been added: + concurrent_vector::grow_by(), concurrent_hash_map::insert(), + concurrent_unordered_{set,multiset,map,multimap}::insert(). +- Testing for compatibility of containers with some C++11 standard + library types has been added. +- Dynamic replacement of standard memory allocation routines has been + added for OS X*. +- Microsoft* Visual Studio* projects for Intel TBB examples updated + to VS 2010. +- For open-source packages, debugging information (line numbers) in + precompiled binaries now matches the source code. +- Debug information was added to release builds for OS X*, Solaris*, + FreeBSD* operating systems and MinGW*. +- Various improvements in documentation, debug diagnostics and examples. + +Preview Features: + +- Additional actions on reset of graphs, and extraction of individual + nodes from a graph (TBB_PREVIEW_FLOW_GRAPH_FEATURES). +- Support for an arbitrary number of arguments in parallel_invoke + (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE). + +Changes affecting backward compatibility: + +- For compatibility with C++11 standard, copy and move constructors and + assignment operators are disabled for all mutex classes. To allow + the old behavior, use TBB_DEPRECATED_MUTEX_COPYING macro. +- flow::sequencer_node rejects messages with repeating sequence numbers. +- Changed internal interface between tbbmalloc and tbbmalloc_proxy. +- Following deprecated functionality has been removed: + old debugging macros TBB_DO_ASSERT & TBB_DO_THREADING_TOOLS; + no-op depth-related methods in class task; + tbb::deprecated::concurrent_queue; + deprecated variants of concurrent_vector methods. +- register_successor() and remove_successor() are deprecated as methods + to add and remove edges in flow::graph; use make_edge() and + remove_edge() instead. + +Bugs fixed: + +- Fixed incorrect scalable_msize() implementation for aligned objects. +- Flow graph buffering nodes now destroy their copy of forwarded items. +- Multiple fixes in task_arena implementation, including for: + inconsistent task scheduler state inside executed functions; + incorrect floating-point settings and exception propagation; + possible stalls in concurrent invocations of execute(). +- Fixed floating-point settings propagation when the same instance of + task_group_context is used in different arenas. +- Fixed compilation error in pipeline.h with Intel Compiler on OS X*. +- Added missed headers for individual components to tbb.h. + +Open-source contributions integrated: + +- Range interface addition to parallel_do, parallel_for_each and + parallel_sort by Stephan Dollberg. +- Variadic template implementation of parallel_invoke + by Kizza George Mbidde (see Preview Features). +- Improvement in Seismic example for MacBook Pro* with Retina* display + by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.2 Update 5 +TBB_INTERFACE_VERSION == 7005 + +Changes (w.r.t. Intel TBB 4.2 Update 4): + +- The second template argument of class aligned_space now is set + to 1 by default. + +Preview Features: + +- Better support for exception safety, task priorities and floating + point settings in class task_arena. +- task_arena::current_slot() has been renamed to + task_arena::current_thread_index(). + +Bugs fixed: + +- Task priority change possibly ignored by a worker thread entering + a nested parallel construct. +- Memory leaks inside the task scheduler when running on + Intel(R) Xeon Phi(tm) coprocessor. + +Open-source contributions integrated: + +- Improved detection of X Window support for Intel TBB examples + and other feedback by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.2 Update 4 +TBB_INTERFACE_VERSION == 7004 + +Changes (w.r.t. Intel TBB 4.2 Update 3): + +- Added possibility to specify floating-point settings at invocation + of most parallel algorithms (including flow::graph) via + task_group_context. +- Added dynamic replacement of malloc_usable_size() under + Linux*/Android* and dlmalloc_usable_size() under Android*. +- Added new methods to concurrent_vector: + grow_by() that appends a sequence between two given iterators; + grow_to_at_least() that initializes new elements with a given value. +- Improved affinity_partitioner for better performance on balanced + workloads. +- Improvements in the task scheduler, including better scalability + when threads search for a task arena, and better diagnostics. +- Improved allocation performance for workloads that do intensive + allocation/releasing of same-size objects larger than ~8KB from + multiple threads. +- Exception support is enabled by default for 32-bit MinGW compilers. +- The tachyon example for Android* can be built for all targets + supported by the installed NDK. +- Added Windows Store* version of the tachyon example. +- GettingStarted/sub_string_finder example ported to offload execution + on Windows* for Intel(R) Many Integrated Core Architecture. + +Preview Features: + +- Removed task_scheduler_observer::on_scheduler_leaving() callback. +- Added task_scheduler_observer::may_sleep() callback. +- The CPF or_node has been renamed indexer_node. The input to + indexer_node is now a list of types. The output of indexer_node is + a tagged_msg type composed of a tag and a value. For indexer_node, + the tag is a size_t. + +Bugs fixed: + +- Fixed data races in preview extensions of task_scheduler_observer. +- Added noexcept(false) for destructor of task_group_base to avoid + crash on cancellation of structured task group in C++11. + +Open-source contributions integrated: + +- Improved concurrency detection for BG/Q, and other improvements + by Raf Schietekat. +- Fix for crashes in enumerable_thread_specific in case if a contained + object is too big to be constructed on the stack by Adrien Guinet. + +------------------------------------------------------------------------ +Intel TBB 4.2 Update 3 +TBB_INTERFACE_VERSION == 7003 + +Changes (w.r.t. Intel TBB 4.2 Update 2): + +- Added support for Microsoft* Visual Studio* 2013. +- Improved Microsoft* PPL-compatible form of parallel_for for better + support of auto-vectorization. +- Added a new example for cancellation and reset in the flow graph: + Kohonen self-organizing map (examples/graph/som). +- Various improvements in source code, tests, and makefiles. + +Bugs fixed: + +- Added dynamic replacement of _aligned_msize() previously missed. +- Fixed task_group::run_and_wait() to throw invalid_multiple_scheduling + exception if the specified task handle is already scheduled. + +Open-source contributions integrated: + +- A fix for ARM* processors by Steve Capper. +- Improvements in std::swap calls by Robert Maynard. + +------------------------------------------------------------------------ +Intel TBB 4.2 Update 2 +TBB_INTERFACE_VERSION == 7002 + +Changes (w.r.t. Intel TBB 4.2 Update 1): + +- Enable C++11 features for Microsoft* Visual Studio* 2013 Preview. +- Added a test for compatibility of TBB containers with C++11 + range-based for loop. + +Changes affecting backward compatibility: + +- Internal layout changed for class tbb::flow::limiter_node. + +Preview Features: + +- Added speculative_spin_rw_mutex, a read-write lock class which uses + Intel(R) Transactional Synchronization Extensions. + +Bugs fixed: + +- When building for Intel(R) Xeon Phi(tm) coprocessor, TBB programs + no longer require explicit linking with librt and libpthread. + +Open-source contributions integrated: + +- Fixes for ARM* processors by Steve Capper, Leif Lindholm + and Steven Noonan. +- Support for Clang on Linux by Raf Schietekat. +- Typo correction in scheduler.cpp by Julien Schueller. + +------------------------------------------------------------------------ +Intel TBB 4.2 Update 1 +TBB_INTERFACE_VERSION == 7001 + +Changes (w.r.t. Intel TBB 4.2): + +- Added project files for Microsoft* Visual Studio* 2010. +- Initial support of Microsoft* Visual Studio* 2013 Preview. +- Enable C++11 features available in Intel(R) C++ Compiler 14.0. +- scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, ) can be + used to urge releasing memory from tbbmalloc internal buffers when + the given limit is exceeded. + +Preview Features: + +- Class task_arena no longer requires linking with a preview library, + though still remains a community preview feature. +- The method task_arena::wait_until_empty() is removed. +- The method task_arena::current_slot() now returns -1 if + the task scheduler is not initialized in the thread. + +Changes affecting backward compatibility: + +- Because of changes in internal layout of graph nodes, the namespace + interface number of flow::graph has been incremented from 6 to 7. + +Bugs fixed: + +- Fixed a race in lazy initialization of task_arena. +- Fixed flow::graph::reset() to prevent situations where tasks would be + spawned in the process of resetting the graph to its initial state. +- Fixed decrement bug in limiter_node. +- Fixed a race in arc deletion in the flow graph. + +Open-source contributions integrated: + +- Improved support for IBM* Blue Gene* by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.2 +TBB_INTERFACE_VERSION == 7000 + +Changes (w.r.t. Intel TBB 4.1 Update 4): + +- Added speculative_spin_mutex, which uses Intel(R) Transactional + Synchronization Extensions when they are supported by hardware. +- Binary files linked with libc++ (the C++ standard library in Clang) + were added on OS X*. +- For OS X* exact exception propagation is supported with Clang; + it requires use of libc++ and corresponding Intel TBB binaries. +- Support for C++11 initializer lists in constructor and assigment + has been added to concurrent_hash_map, concurrent_unordered_set, + concurrent_unordered_multiset, concurrent_unordered_map, + concurrent_unordered_multimap. +- The memory allocator may now clean its per-thread memory caches + when it cannot get more memory. +- Added the scalable_allocation_command() function for on-demand + cleaning of internal memory caches. +- Reduced the time overhead for freeing memory objects smaller than ~8K. +- Simplified linking with the debug library for applications that use + Intel TBB in code offloaded to Intel(R) Xeon Phi(tm) coprocessors. + See an example in + examples/GettingStarted/sub_string_finder/Makefile. +- Various improvements in source code, scripts and makefiles. + +Changes affecting backward compatibility: + +- tbb::flow::graph has been modified to spawn its tasks; + the old behaviour (task enqueuing) is deprecated. This change may + impact applications that expected a flow graph to make progress + without calling wait_for_all(), which is no longer guaranteed. See + the documentation for more details. +- Changed the return values of the scalable_allocation_mode() function. + +Bugs fixed: + +- Fixed a leak of parallel_reduce body objects when execution is + cancelled or an exception is thrown, as suggested by Darcy Harrison. +- Fixed a race in the task scheduler which can lower the effective + priority despite the existence of higher priority tasks. +- On Linux an error during destruction of the internal thread local + storage no longer results in an exception. + +Open-source contributions integrated: + +- Fixed task_group_context state propagation to unrelated context trees + by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.1 Update 4 +TBB_INTERFACE_VERSION == 6105 + +Changes (w.r.t. Intel TBB 4.1 Update 3): + +- Use /volatile:iso option with VS 2012 to disable extended + semantics for volatile variables. +- Various improvements in affinity_partitioner, scheduler, + tests, examples, makefiles. +- Concurrent_priority_queue class now supports initialization/assignment + via C++11 initializer list feature (std::initializer_list). + +Bugs fixed: + +- Fixed more possible stalls in concurrent invocations of + task_arena::execute(), especially waiting for enqueued tasks. +- Fixed requested number of workers for task_arena(P,0). +- Fixed interoperability with Intel(R) VTune(TM) Amplifier XE in + case of using task_arena::enqueue() from a terminating thread. + +Open-source contributions integrated: + +- Type fixes, cleanups, and code beautification by Raf Schietekat. +- Improvements in atomic operations for big endian platforms + by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 4.1 Update 3 +TBB_INTERFACE_VERSION == 6103 + +Changes (w.r.t. Intel TBB 4.1 Update 2): + +- Binary files for Android* applications were added to the Linux* OS + package. +- Binary files for Windows Store* applications were added to the + Windows* OS package. +- Exact exception propagation (exception_ptr) support on Linux OS is + now turned on by default for GCC 4.4 and higher. +- Stopped implicit use of large memory pages by tbbmalloc (Linux-only). + Now use of large pages must be explicitly enabled with + scalable_allocation_mode() function or TBB_MALLOC_USE_HUGE_PAGES + environment variable. + +Community Preview Features: + +- Extended class task_arena constructor and method initialize() to + allow some concurrency to be reserved strictly for application + threads. +- New methods terminate() and is_active() were added to class + task_arena. + +Bugs fixed: + +- Fixed initialization of hashing helper constant in the hash + containers. +- Fixed possible stalls in concurrent invocations of + task_arena::execute() when no worker thread is available to make + progress. +- Fixed incorrect calculation of hardware concurrency in the presence + of inactive processor groups, particularly on systems running + Windows* 8 and Windows* Server 2012. + +Open-source contributions integrated: + +- The fix for the GUI examples on OS X* systems by Raf Schietekat. +- Moved some power-of-2 calculations to functions to improve readability + by Raf Schietekat. +- C++11/Clang support improvements by arcata. +- ARM* platform isolation layer by Steve Capper, Leif Lindholm, Leo Lara + (ARM). + +------------------------------------------------------------------------ +Intel TBB 4.1 Update 2 +TBB_INTERFACE_VERSION == 6102 + +Changes (w.r.t. Intel TBB 4.1 Update 1): + +- Objects up to 128 MB are now cached by the tbbmalloc. Previously + the threshold was 8MB. Objects larger than 128 MB are still + processed by direct OS calls. +- concurrent_unordered_multiset and concurrent_unordered_multimap + have been added, based on Microsoft* PPL prototype. +- Ability to value-initialize a tbb::atomic variable on construction + in C++11, with const expressions properly supported. + +Community Preview Features: + +- Added a possibility to wait until all worker threads terminate. + This is necessary before calling fork() from an application. + +Bugs fixed: + +- Fixed data race in tbbmalloc that might lead to memory leaks + for large object allocations. +- Fixed task_arena::enqueue() to use task_group_context of target arena. +- Improved implementation of 64 bit atomics on ia32. + +------------------------------------------------------------------------ +Intel TBB 4.1 Update 1 +TBB_INTERFACE_VERSION == 6101 + +Changes (w.r.t. Intel TBB 4.1): + +- concurrent_vector class now supports initialization/assignment + via C++11 initializer list feature (std::initializer_list) +- Added implementation of the platform isolation layer based on + Intel compiler atomic built-ins; it is supposed to work on + any platform supported by compiler version 12.1 and newer. +- Using GetNativeSystemInfo() instead of GetSystemInfo() to support + more than 32 processors for 32-bit applications under WOW64. +- The following form of parallel_for: + parallel_for(first, last, [step,] f[, context]) now accepts an + optional partitioner parameter after the function f. + +Backward-incompatible API changes: + +- The library no longer injects tuple in to namespace std. + In previous releases, tuple was injected into namespace std by + flow_graph.h when std::tuple was not available. In this release, + flow_graph.h now uses tbb::flow::tuple. On platforms where + std::tuple is available, tbb::flow::tuple is typedef'ed to + std::tuple. On all other platforms, tbb::flow::tuple provides + a subset of the functionality defined by std::tuple. Users of + flow_graph.h may need to change their uses of std::tuple to + tbb::flow::tuple to ensure compatibility with non-C++11 compliant + compilers. + +Bugs fixed: + +- Fixed local observer to be able to override propagated CPU state and + to provide correct value of task_arena::current_slot() in callbacks. + +------------------------------------------------------------------------ +Intel TBB 4.1 +TBB_INTERFACE_VERSION == 6100 + +Changes (w.r.t. Intel TBB 4.0 Update 5): + +- _WIN32_WINNT must be set to 0x0501 or greater in order to use TBB + on Microsoft* Windows*. +- parallel_deterministic_reduce template function is fully supported. +- TBB headers can be used with C++0x/C++11 mode (-std=c++0x) of GCC + and Intel(R) Compiler. +- C++11 std::make_exception_ptr is used where available, instead of + std::copy_exception from earlier C++0x implementations. +- Improvements in the TBB allocator to reduce extra memory consumption. +- Partial refactoring of the task scheduler data structures. +- TBB examples allow more flexible specification of the thread number, + including arithmetic and geometric progression. + +Bugs fixed: + +- On Linux & OS X*, pre-built TBB binaries do not yet support exact + exception propagation via C++11 exception_ptr. To prevent run time + errors, by default TBB headers disable exact exception propagation + even if the C++ implementation provides exception_ptr. + +Community Preview Features: + +- Added: class task_arena, for work submission by multiple application + threads with thread-independent control of concurrency level. +- Added: task_scheduler_observer can be created as local to a master + thread, to observe threads that work on behalf of that master. + Local observers may have new on_scheduler_leaving() callback. + +------------------------------------------------------------------------ +Intel TBB 4.0 Update 5 +TBB_INTERFACE_VERSION == 6005 + +Changes (w.r.t. Intel TBB 4.0 Update 4): + +- Parallel pipeline optimization (directly storing small objects in the + interstage data buffers) limited to trivially-copyable types for + C++11 and a short list of types for earlier compilers. +- _VARIADIC_MAX switch is honored for TBB tuple implementation + and flow::graph nodes based on tuple. +- Support of Cocoa framework was added to the GUI examples on OS X* + systems. + +Bugs fixed: + +- Fixed a tv_nsec overflow bug in condition_variable::wait_for. +- Fixed execution order of enqueued tasks with different priorities. +- Fixed a bug with task priority changes causing lack of progress + for fire-and-forget tasks when TBB was initialized to use 1 thread. +- Fixed duplicate symbol problem when linking multiple compilation + units that include flow_graph.h on VC 10. + +------------------------------------------------------------------------ +Intel TBB 4.0 Update 4 +TBB_INTERFACE_VERSION == 6004 + +Changes (w.r.t. Intel TBB 4.0 Update 3): + +- The TBB memory allocator transparently supports large pages on Linux. +- A new flow_graph example, logic_sim, was added. +- Support for DirectX* 9 was added to GUI examples. + +Community Preview Features: + +- Added: aggregator, a new concurrency control mechanism. + +Bugs fixed: + +- The abort operation on concurrent_bounded_queue now leaves the queue + in a reusable state. If a bad_alloc or bad_last_alloc exception is + thrown while the queue is recovering from an abort, that exception + will be reported instead of user_abort on the thread on which it + occurred, and the queue will not be reusable. +- Steal limiting heuristic fixed to avoid premature stealing disabling + when large amount of __thread data is allocated on thread stack. +- Fixed a low-probability leak of arenas in the task scheduler. +- In STL-compatible allocator classes, the method construct() was fixed + to comply with C++11 requirements. +- Fixed a bug that prevented creation of fixed-size memory pools + smaller than 2M. +- Significantly reduced the amount of warnings from various compilers. + +Open-source contributions integrated: + +- Multiple improvements by Raf Schietekat. +- Basic support for Clang on OS X* by Blas Rodriguez Somoza. +- Fixes for warnings and corner-case bugs by Blas Rodriguez Somoza + and Edward Lam. + +------------------------------------------------------------------------ +Intel TBB 4.0 Update 3 +TBB_INTERFACE_VERSION == 6003 + +Changes (w.r.t. Intel TBB 4.0 Update 2): + +- Modifications to the low-level API for memory pools: + added support for aligned allocations; + pool policies reworked to allow backward-compatible extensions; + added a policy to not return memory space till destruction; + pool_reset() does not return memory space anymore. +- Class tbb::flow::graph_iterator added to iterate over all nodes + registered with a graph instance. +- multioutput_function_node has been renamed multifunction_node. + multifunction_node and split_node are now fully-supported features. +- For the tagged join node, the policy for try_put of an item with + already existing tag has been defined: the item will be rejected. +- Matching the behavior on Windows, on other platforms the optional + shared libraries (libtbbmalloc, libirml) now are also searched + only in the directory where libtbb is located. +- The platform isolation layer based on GCC built-ins is extended. + +Backward-incompatible API changes: + +- a graph reference parameter is now required to be passed to the + constructors of the following flow graph nodes: overwrite_node, + write_once_node, broadcast_node, and the CPF or_node. +- the following tbb::flow node methods and typedefs have been renamed: + Old New + join_node and or_node: + inputs() -> input_ports() + input_ports_tuple_type -> input_ports_type + multifunction_node and split_node: + ports_type -> output_ports_type + +Bugs fixed: + +- Not all logical processors were utilized on systems with more than + 64 cores split by Windows into several processor groups. + +------------------------------------------------------------------------ +Intel TBB 4.0 Update 2 commercial-aligned release +TBB_INTERFACE_VERSION == 6002 + +Changes (w.r.t. Intel TBB 4.0 Update 1 commercial-aligned release): + +- concurrent_bounded_queue now has an abort() operation that releases + threads involved in pending push or pop operations. The released + threads will receive a tbb::user_abort exception. +- Added Community Preview Feature: concurrent_lru_cache container, + a concurrent implementation of LRU (least-recently-used) cache. + +Bugs fixed: + +- fixed a race condition in the TBB scalable allocator. +- concurrent_queue counter wraparound bug was fixed, which occurred when + the number of push and pop operations exceeded ~>4 billion on IA32. +- fixed races in the TBB scheduler that could put workers asleep too + early, especially in presence of affinitized tasks. + +------------------------------------------------------------------------ +Intel TBB 4.0 Update 1 commercial-aligned release +TBB_INTERFACE_VERSION == 6000 (forgotten to increment) + +Changes (w.r.t. Intel TBB 4.0 commercial-aligned release): + +- Memory leaks fixed in binpack example. +- Improvements and fixes in the TBB allocator. + +------------------------------------------------------------------------ +Intel TBB 4.0 commercial-aligned release +TBB_INTERFACE_VERSION == 6000 + +Changes (w.r.t. Intel TBB 3.0 Update 8 commercial-aligned release): + +- concurrent_priority_queue is now a fully supported feature. + Capacity control methods were removed. +- Flow graph is now a fully supported feature. +- A new memory backend has been implemented in the TBB allocator. + It can reuse freed memory for both small and large objects, and + returns unused memory blocks to the OS more actively. +- Improved partitioning algorithms for parallel_for and parallel_reduce + to better handle load imbalance. +- The convex_hull example has been refactored for reproducible + performance results. +- The major interface version has changed from 5 to 6. + Deprecated interfaces might be removed in future releases. + +Community Preview Features: + +- Added: serial subset, i.e. sequential implementations of TBB generic + algorithms (currently, only provided for parallel_for). +- Preview of new flow graph nodes: + or_node (accepts multiple inputs, forwards each input separately + to all successors), + split_node (accepts tuples, and forwards each element of a tuple + to a corresponding successor), and + multioutput_function_node (accepts one input, and passes the input + and a tuple of output ports to the function body to support outputs + to multiple successors). +- Added: memory pools for more control on memory source, grouping, + and collective deallocation. + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 8 commercial-aligned release +TBB_INTERFACE_VERSION == 5008 + +Changes (w.r.t. Intel TBB 3.0 Update 7 commercial-aligned release): + +- Task priorities become an official feature of TBB, + not community preview as before. +- Atomics API extended, and implementation refactored. +- Added task::set_parent() method. +- Added concurrent_unordered_set container. + +Open-source contributions integrated: + +- PowerPC support by Raf Schietekat. +- Fix of potential task pool overrun and other improvements + in the task scheduler by Raf Schietekat. +- Fix in parallel_for_each to work with std::set in Visual* C++ 2010. + +Community Preview Features: + +- Graph community preview feature was renamed to flow graph. + Multiple improvements in the implementation. + Binpack example was added for the feature. +- A number of improvements to concurrent_priority_queue. + Shortpath example was added for the feature. +- TBB runtime loaded functionality was added (Windows*-only). + It allows to specify which versions of TBB should be used, + as well as to set directories for the library search. +- parallel_deterministic_reduce template function was added. + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 7 commercial-aligned release +TBB_INTERFACE_VERSION == 5006 (forgotten to increment) + +Changes (w.r.t. Intel TBB 3.0 Update 6 commercial-aligned release): + +- Added implementation of the platform isolation layer based on + GCC atomic built-ins; it is supposed to work on any platform + where GCC has these built-ins. + +Community Preview Features: + +- Graph's dining_philosophers example added. +- A number of improvements to graph and concurrent_priority_queue. + + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 6 commercial-aligned release +TBB_INTERFACE_VERSION == 5006 + +Changes (w.r.t. Intel TBB 3.0 Update 5 commercial-aligned release): + +- Added Community Preview feature: task and task group priority, and + Fractal example demonstrating it. +- parallel_pipeline optimized for data items of small and large sizes. +- Graph's join_node is now parametrized with a tuple of up to 10 types. +- Improved performance of concurrent_priority_queue. + +Open-source contributions integrated: + +- Initial NetBSD support by Aleksej Saushev. + +Bugs fixed: + +- Failure to enable interoperability with Intel(R) Cilk(tm) Plus runtime + library, and a crash caused by invoking the interoperability layer + after one of the libraries was unloaded. +- Data race that could result in concurrent_unordered_map structure + corruption after call to clear() method. +- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel + compiler on Linux. +- Inconsistency of exception propagation mode possible when application + built with Microsoft* Visual Studio* 2008 or earlier uses TBB built + with Microsoft* Visual Studio* 2010. +- Affinitizing master thread to a subset of available CPUs after TBB + scheduler was initialized tied all worker threads to the same CPUs. +- Method is_stolen_task() always returned 'false' for affinitized tasks. +- write_once_node and overwrite_node did not immediately send buffered + items to successors + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 5 commercial-aligned release +TBB_INTERFACE_VERSION == 5005 + +Changes (w.r.t. Intel TBB 3.0 Update 4 commercial-aligned release): + +- Added Community Preview feature: graph. +- Added automatic propagation of master thread FPU settings to + TBB worker threads. +- Added a public function to perform a sequentially consistent full + memory fence: tbb::atomic_fence() in tbb/atomic.h. + +Bugs fixed: + +- Data race that could result in scheduler data structures corruption + when using fire-and-forget tasks. +- Potential referencing of destroyed concurrent_hash_map element after + using erase(accessor&A) method with A acquired as const_accessor. +- Fixed a correctness bug in the convex hull example. + +Open-source contributions integrated: + +- Patch for calls to internal::atomic_do_once() by Andrey Semashev. + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 4 commercial-aligned release +TBB_INTERFACE_VERSION == 5004 + +Changes (w.r.t. Intel TBB 3.0 Update 3 commercial-aligned release): + +- Added Community Preview feature: concurrent_priority_queue. +- Fixed library loading to avoid possibility for remote code execution, + see http://www.microsoft.com/technet/security/advisory/2269637.mspx. +- Added support of more than 64 cores for appropriate Microsoft* + Windows* versions. For more details, see + http://msdn.microsoft.com/en-us/library/dd405503.aspx. +- Default number of worker threads is adjusted in accordance with + process affinity mask. + +Bugs fixed: + +- Calls of scalable_* functions from inside the allocator library + caused issues if the functions were overridden by another module. +- A crash occurred if methods run() and wait() were called concurrently + for an empty tbb::task_group (1736). +- The tachyon example exhibited build problems associated with + bug 554339 on Microsoft* Visual Studio* 2010. Project files were + modified as a partial workaround to overcome the problem. See + http://connect.microsoft.com/VisualStudio/feedback/details/554339. + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 3 commercial-aligned release +TBB_INTERFACE_VERSION == 5003 + +Changes (w.r.t. Intel TBB 3.0 Update 2 commercial-aligned release): + +- cache_aligned_allocator class reworked to use scalable_aligned_malloc. +- Improved performance of count() and equal_range() methods + in concurrent_unordered_map. +- Improved implementation of 64-bit atomic loads and stores on 32-bit + platforms, including compilation with VC 7.1. +- Added implementation of atomic operations on top of OSAtomic API + provided by OS X*. +- Removed gratuitous try/catch blocks surrounding thread function calls + in tbb_thread. +- Xcode* projects were added for sudoku and game_of_life examples. +- Xcode* projects were updated to work without TBB framework. + +Bugs fixed: + +- Fixed a data race in task scheduler destruction that on rare occasion + could result in memory corruption. +- Fixed idle spinning in thread bound filters in tbb::pipeline (1670). + +Open-source contributions integrated: + +- MinGW-64 basic support by brsomoza (partially). +- Patch for atomic.h by Andrey Semashev. +- Support for AIX & GCC on PowerPC by Giannis Papadopoulos. +- Various improvements by Raf Schietekat. + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 2 commercial-aligned release +TBB_INTERFACE_VERSION == 5002 + +Changes (w.r.t. Intel TBB 3.0 Update 1 commercial-aligned release): + +- Destructor of tbb::task_group class throws missing_wait exception + if there are tasks running when it is invoked. +- Interoperability layer with Intel Cilk Plus runtime library added + to protect TBB TLS in case of nested usage with Intel Cilk Plus. +- Compilation fix for dependent template names in concurrent_queue. +- Memory allocator code refactored to ease development and maintenance. + +Bugs fixed: + +- Improved interoperability with other Intel software tools on Linux in + case of dynamic replacement of memory allocator (1700) +- Fixed install issues that prevented installation on + Mac OS* X 10.6.4 (1711). + +------------------------------------------------------------------------ +Intel TBB 3.0 Update 1 commercial-aligned release +TBB_INTERFACE_VERSION == 5000 (forgotten to increment) + +Changes (w.r.t. Intel TBB 3.0 commercial-aligned release): + +- Decreased memory fragmentation by allocations bigger than 8K. +- Lazily allocate worker threads, to avoid creating unnecessary stacks. + +Bugs fixed: + +- TBB allocator used much more memory than malloc (1703) - see above. +- Deadlocks happened in some specific initialization scenarios + of the TBB allocator (1701, 1704). +- Regression in enumerable_thread_specific: excessive requirements + for object constructors. +- A bug in construction of parallel_pipeline filters when body instance + was a temporary object. +- Incorrect usage of memory fences on PowerPC and XBOX360 platforms. +- A subtle issue in task group context binding that could result + in cancellation signal being missed by nested task groups. +- Incorrect construction of concurrent_unordered_map if specified + number of buckets is not power of two. +- Broken count() and equal_range() of concurrent_unordered_map. +- Return type of postfix form of operator++ for hash map's iterators. + +------------------------------------------------------------------------ +Intel TBB 3.0 commercial-aligned release +TBB_INTERFACE_VERSION == 5000 + +Changes (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release): + +- All open-source-release changes down to TBB 2.2 U3 below + were incorporated into this release. + +------------------------------------------------------------------------ +20100406 open-source release + +Changes (w.r.t. 20100310 open-source release): + +- Added support for Microsoft* Visual Studio* 2010, including binaries. +- Added a PDF file with recommended Design Patterns for TBB. +- Added parallel_pipeline function and companion classes and functions + that provide a strongly typed lambda-friendly pipeline interface. +- Reworked enumerable_thread_specific to use a custom implementation of + hash map that is more efficient for ETS usage models. +- Added example for class task_group; see examples/task_group/sudoku. +- Removed two examples, as they were long outdated and superceded: + pipeline/text_filter (use pipeline/square); + parallel_while/parallel_preorder (use parallel_do/parallel_preorder). +- PDF documentation updated. +- Other fixes and changes in code, tests, and examples. + +Bugs fixed: + +- Eliminated build errors with MinGW32. +- Fixed post-build step and other issues in VS projects for examples. +- Fixed discrepancy between scalable_realloc and scalable_msize that + caused crashes with malloc replacement on Windows. + +------------------------------------------------------------------------ +20100310 open-source release + +Changes (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release): + +- Version macros changed in anticipation of a future release. +- Directory structure aligned with Intel(R) C++ Compiler; + now TBB binaries reside in //[bin|lib] + (in TBB 2.x, it was [bin|lib]//). +- Visual Studio projects changed for examples: instead of separate set + of files for each VS version, now there is single 'msvs' directory + that contains workspaces for MS C++ compiler (_cl.sln) and + Intel C++ compiler (_icl.sln). Works with VS 2005 and above. +- The name versioning scheme for backward compatibility was improved; + now compatibility-breaking changes are done in a separate namespace. +- Added concurrent_unordered_map implementation based on a prototype + developed in Microsoft for a future version of PPL. +- Added PPL-compatible writer-preference RW lock (reader_writer_lock). +- Added TBB_IMPLEMENT_CPP0X macro to control injection of C++0x names + implemented in TBB into namespace std. +- Added almost-C++0x-compatible std::condition_variable, plus a bunch + of other C++0x classes required by condition_variable. +- With TBB_IMPLEMENT_CPP0X, tbb_thread can be also used as std::thread. +- task.cpp was split into several translation units to structure + TBB scheduler sources layout. Static data layout and library + initialization logic were also updated. +- TBB scheduler reworked to prevent master threads from stealing + work belonging to other masters. +- Class task was extended with enqueue() method, and slightly changed + semantics of methods spawn() and destroy(). For exact semantics, + refer to TBB Reference manual. +- task_group_context now allows for destruction by non-owner threads. +- Added TBB_USE_EXCEPTIONS macro to control use of exceptions in TBB + headers. It turns off (i.e. sets to 0) automatically if specified + compiler options disable exception handling. +- TBB is enabled to run on top of Microsoft's Concurrency Runtime + on Windows* 7 (via our worker dispatcher known as RML). +- Removed old unused busy-waiting code in concurrent_queue. +- Described the advanced build & test options in src/index.html. +- Warning level for GCC raised with -Wextra and a few other options. +- Multiple fixes and improvements in code, tests, examples, and docs. + +Open-source contributions integrated: + +- Xbox support by Roman Lut (Deep Shadows), though further changes are + required to make it working; e.g. post-2.1 entry points are missing. +- "Eventcount" by Dmitry Vyukov evolved into concurrent_monitor, + an internal class used in the implementation of concurrent_queue. + +------------------------------------------------------------------------ +Intel TBB 2.2 Update 3 commercial-aligned release +TBB_INTERFACE_VERSION == 4003 + +Changes (w.r.t. Intel TBB 2.2 Update 2 commercial-aligned release): + +- PDF documentation updated. + +Bugs fixed: + +- concurrent_hash_map compatibility issue exposed on Linux in case + two versions of the container were used by different modules. +- enforce 16 byte stack alignment for consistence with GCC; required + to work correctly with 128-bit variables processed by SSE. +- construct() methods of allocator classes now use global operator new. + +------------------------------------------------------------------------ +Intel TBB 2.2 Update 2 commercial-aligned release +TBB_INTERFACE_VERSION == 4002 + +Changes (w.r.t. Intel TBB 2.2 Update 1 commercial-aligned release): + +- parallel_invoke and parallel_for_each now take function objects + by const reference, not by value. +- Building TBB with /MT is supported, to avoid dependency on particular + versions of Visual C++* runtime DLLs. TBB DLLs built with /MT + are located in vc_mt directory. +- Class critical_section introduced. +- Improvements in exception support: new exception classes introduced, + all exceptions are thrown via an out-of-line internal method. +- Improvements and fixes in the TBB allocator and malloc replacement, + including robust memory identification, and more reliable dynamic + function substitution on Windows*. +- Method swap() added to class tbb_thread. +- Methods rehash() and bucket_count() added to concurrent_hash_map. +- Added support for Visual Studio* 2010 Beta2. No special binaries + provided, but CRT-independent DLLs (vc_mt) should work. +- Other fixes and improvements in code, tests, examples, and docs. + +Open-source contributions integrated: + +- The fix to build 32-bit TBB on Mac OS* X 10.6. +- GCC-based port for SPARC Solaris by Michailo Matijkiw, with use of + earlier work by Raf Schietekat. + +Bugs fixed: + +- 159 - TBB build for PowerPC* running Mac OS* X. +- 160 - IBM* Java segfault if used with TBB allocator. +- crash in concurrent_queue (1616). + +------------------------------------------------------------------------ +Intel TBB 2.2 Update 1 commercial-aligned release +TBB_INTERFACE_VERSION == 4001 + +Changes (w.r.t. Intel TBB 2.2 commercial-aligned release): + +- Incorporates all changes from open-source releases below. +- Documentation was updated. +- TBB scheduler auto-initialization now covers all possible use cases. +- concurrent_queue: made argument types of sizeof used in paddings + consistent with those actually used. +- Memory allocator was improved: supported corner case of user's malloc + calling scalable_malloc (non-Windows), corrected processing of + memory allocation requests during tbb memory allocator startup + (Linux). +- Windows malloc replacement has got better support for static objects. +- In pipeline setups that do not allow actual parallelism, execution + by a single thread is guaranteed, idle spinning eliminated, and + performance improved. +- RML refactoring and clean-up. +- New constructor for concurrent_hash_map allows reserving space for + a number of items. +- Operator delete() added to the TBB exception classes. +- Lambda support was improved in parallel_reduce. +- gcc 4.3 warnings were fixed for concurrent_queue. +- Fixed possible initialization deadlock in modules using TBB entities + during construction of global static objects. +- Copy constructor in concurrent_hash_map was fixed. +- Fixed a couple of rare crashes in the scheduler possible before + in very specific use cases. +- Fixed a rare crash in the TBB allocator running out of memory. +- New tests were implemented, including test_lambda.cpp that checks + support for lambda expressions. +- A few other small changes in code, tests, and documentation. + +------------------------------------------------------------------------ +20090809 open-source release + +Changes (w.r.t. Intel TBB 2.2 commercial-aligned release): + +- Fixed known exception safety issues in concurrent_vector. +- Better concurrency of simultaneous grow requests in concurrent_vector. +- TBB allocator further improves performance of large object allocation. +- Problem with source of text relocations was fixed on Linux +- Fixed bugs related to malloc replacement under Windows +- A few other small changes in code and documentation. + +------------------------------------------------------------------------ +Intel TBB 2.2 commercial-aligned release +TBB_INTERFACE_VERSION == 4000 + +Changes (w.r.t. Intel TBB 2.1 U4 commercial-aligned release): + +- Incorporates all changes from open-source releases below. +- Architecture folders renamed from em64t to intel64 and from itanium + to ia64. +- Major Interface version changed from 3 to 4. Deprecated interfaces + might be removed in future releases. +- Parallel algorithms that use partitioners have switched to use + the auto_partitioner by default. +- Improved memory allocator performance for allocations bigger than 8K. +- Added new thread-bound filters functionality for pipeline. +- New implementation of concurrent_hash_map that improves performance + significantly. +- A few other small changes in code and documentation. + +------------------------------------------------------------------------ +20090511 open-source release + +Changes (w.r.t. previous open-source release): + +- Basic support for MinGW32 development kit. +- Added tbb::zero_allocator class that initializes memory with zeros. + It can be used as an adaptor to any STL-compatible allocator class. +- Added tbb::parallel_for_each template function as alias to parallel_do. +- Added more overloads for tbb::parallel_for. +- Added support for exact exception propagation (can only be used with + compilers that support C++0x std::exception_ptr). +- tbb::atomic template class can be used with enumerations. +- mutex, recursive_mutex, spin_mutex, spin_rw_mutex classes extended + with explicit lock/unlock methods. +- Fixed size() and grow_to_at_least() methods of tbb::concurrent_vector + to provide space allocation guarantees. More methods added for + compatibility with std::vector, including some from C++0x. +- Preview of a lambda-friendly interface for low-level use of tasks. +- scalable_msize function added to the scalable allocator (Windows only). +- Rationalized internal auxiliary functions for spin-waiting and backoff. +- Several tests undergo decent refactoring. + +Changes affecting backward compatibility: + +- Improvements in concurrent_queue, including limited API changes. + The previous version is deprecated; its functionality is accessible + via methods of the new tbb::concurrent_bounded_queue class. +- grow* and push_back methods of concurrent_vector changed to return + iterators; old semantics is deprecated. + +------------------------------------------------------------------------ +Intel TBB 2.1 Update 4 commercial-aligned release +TBB_INTERFACE_VERSION == 3016 + +Changes (w.r.t. Intel TBB 2.1 U3 commercial-aligned release): + +- Added tests for aligned memory allocations and malloc replacement. +- Several improvements for better bundling with Intel(R) C++ Compiler. +- A few other small changes in code and documentaion. + +Bugs fixed: + +- 150 - request to build TBB examples with debug info in release mode. +- backward compatibility issue with concurrent_queue on Windows. +- dependency on VS 2005 SP1 runtime libraries removed. +- compilation of GUI examples under Xcode* 3.1 (1577). +- On Windows, TBB allocator classes can be instantiated with const types + for compatibility with MS implementation of STL containers (1566). + +------------------------------------------------------------------------ +20090313 open-source release + +Changes (w.r.t. 20081109 open-source release): + +- Includes all changes introduced in TBB 2.1 Update 2 & Update 3 + commercial-aligned releases (see below for details). +- Added tbb::parallel_invoke template function. It runs up to 10 + user-defined functions in parallel and waits for them to complete. +- Added a special library providing ability to replace the standard + memory allocation routines in Microsoft* C/C++ RTL (malloc/free, + global new/delete, etc.) with the TBB memory allocator. + Usage details are described in include/tbb/tbbmalloc_proxy.h file. +- Task scheduler switched to use new implementation of its core + functionality (deque based task pool, new structure of arena slots). +- Preview of Microsoft* Visual Studio* 2005 project files for + building the library is available in build/vsproject folder. +- Added tests for aligned memory allocations and malloc replacement. +- Added parallel_for/game_of_life.net example (for Windows only) + showing TBB usage in a .NET application. +- A number of other fixes and improvements to code, tests, makefiles, + examples and documents. + +Bugs fixed: + +- The same list as in TBB 2.1 Update 4 right above. + +------------------------------------------------------------------------ +Intel TBB 2.1 Update 3 commercial-aligned release +TBB_INTERFACE_VERSION == 3015 + +Changes (w.r.t. Intel TBB 2.1 U2 commercial-aligned release): + +- Added support for aligned allocations to the TBB memory allocator. +- Added a special library to use with LD_PRELOAD on Linux* in order to + replace the standard memory allocation routines in C/C++ with the + TBB memory allocator. +- Added null_mutex and null_rw_mutex: no-op classes interface-compliant + to other TBB mutexes. +- Improved performance of parallel_sort, to close most of the serial gap + with std::sort, and beat it on 2 and more cores. +- A few other small changes. + +Bugs fixed: + +- the problem where parallel_for hanged after exception throw + if affinity_partitioner was used (1556). +- get rid of VS warnings about mbstowcs deprecation (1560), + as well as some other warnings. +- operator== for concurrent_vector::iterator fixed to work correctly + with different vector instances. + +------------------------------------------------------------------------ +Intel TBB 2.1 Update 2 commercial-aligned release +TBB_INTERFACE_VERSION == 3014 + +Changes (w.r.t. Intel TBB 2.1 U1 commercial-aligned release): + +- Incorporates all open-source-release changes down to TBB 2.1 U1, + except for: + - 20081019 addition of enumerable_thread_specific; +- Warning level for Microsoft* Visual C++* compiler raised to /W4 /Wp64; + warnings found on this level were cleaned or suppressed. +- Added TBB_runtime_interface_version API function. +- Added new example: pipeline/square. +- Added exception handling and cancellation support + for parallel_do and pipeline. +- Added copy constructor and [begin,end) constructor to concurrent_queue. +- Added some support for beta version of Intel(R) Parallel Amplifier. +- Added scripts to set environment for cross-compilation of 32-bit + applications on 64-bit Linux with Intel(R) C++ Compiler. +- Fixed semantics of concurrent_vector::clear() to not deallocate + internal arrays. Fixed compact() to perform such deallocation later. +- Fixed the issue with atomic when T is incomplete type. +- Improved support for PowerPC* Macintosh*, including the fix + for a bug in masked compare-and-swap reported by a customer. +- As usual, a number of other improvements everywhere. + +------------------------------------------------------------------------ +20081109 open-source release + +Changes (w.r.t. previous open-source release): + +- Added new serial out of order filter for tbb::pipeline. +- Fixed the issue with atomic::operator= reported at the forum. +- Fixed the issue with using tbb::task::self() in task destructor + reported at the forum. +- A number of other improvements to code, tests, makefiles, examples + and documents. + +Open-source contributions integrated: +- Changes in the memory allocator were partially integrated. + +------------------------------------------------------------------------ +20081019 open-source release + +Changes (w.r.t. previous open-source release): + +- Introduced enumerable_thread_specific. This new class provides a + wrapper around native thread local storage as well as iterators and + ranges for accessing the thread local copies (1533). +- Improved support for Intel(R) Threading Analysis Tools + on Intel(R) 64 architecture. +- Dependency from Microsoft* CRT was integrated to the libraries using + manifests, to avoid issues if called from code that uses different + version of Visual C++* runtime than the library. +- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG, + TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS. +- A number of other improvements to code, tests, makefiles, examples + and documents. + +Open-source contributions integrated: + +- linker optimization: /incremental:no . + +------------------------------------------------------------------------ +20080925 open-source release + +Changes (w.r.t. previous open-source release): + +- Same fix for a memory leak in the memory allocator as in TBB 2.1 U1. +- Improved support for lambda functions. +- Fixed more concurrent_queue issues reported at the forum. +- A number of other improvements to code, tests, makefiles, examples + and documents. + +------------------------------------------------------------------------ +Intel TBB 2.1 Update 1 commercial-aligned release +TBB_INTERFACE_VERSION == 3013 + +Changes (w.r.t. Intel TBB 2.1 commercial-aligned release): + +- Fixed small memory leak in the memory allocator. +- Incorporates all open-source-release changes since TBB 2.1, + except for: + - 20080825 changes for parallel_do; + +------------------------------------------------------------------------ +20080825 open-source release + +Changes (w.r.t. previous open-source release): + +- Added exception handling and cancellation support for parallel_do. +- Added default HashCompare template argument for concurrent_hash_map. +- Fixed concurrent_queue.clear() issues due to incorrect assumption + about clear() being private method. +- Added the possibility to use TBB in applications that change + default calling conventions (Windows* only). +- Many improvements to code, tests, examples, makefiles and documents. + +Bugs fixed: + +- 120, 130 - memset declaration missed in concurrent_hash_map.h + +------------------------------------------------------------------------ +20080724 open-source release + +Changes (w.r.t. previous open-source release): + +- Inline assembly for atomic operations improved for gcc 4.3 +- A few more improvements to the code. + +------------------------------------------------------------------------ +20080709 open-source release + +Changes (w.r.t. previous open-source release): + +- operator=() was added to the tbb_thread class according to + the current working draft for std::thread. +- Recognizing SPARC* in makefiles for Linux* and Sun Solaris*. + +Bugs fixed: + +- 127 - concurrent_hash_map::range fixed to split correctly. + +Open-source contributions integrated: + +- fix_set_midpoint.diff by jyasskin +- SPARC* support in makefiles by Raf Schietekat + +------------------------------------------------------------------------ +20080622 open-source release + +Changes (w.r.t. previous open-source release): + +- Fixed a hang that rarely happened on Linux + during deinitialization of the TBB scheduler. +- Improved support for Intel(R) Thread Checker. +- A few more improvements to the code. + +------------------------------------------------------------------------ +Intel TBB 2.1 commercial-aligned release +TBB_INTERFACE_VERSION == 3011 + +Changes (w.r.t. Intel TBB 2.0 U3 commercial-aligned release): + +- All open-source-release changes down to, and including, TBB 2.0 below, + were incorporated into this release. + +------------------------------------------------------------------------ +20080605 open-source release + +Changes (w.r.t. previous open-source release): + +- Explicit control of exported symbols by version scripts added on Linux. +- Interfaces polished for exception handling & algorithm cancellation. +- Cache behavior improvements in the scalable allocator. +- Improvements in text_filter, polygon_overlay, and other examples. +- A lot of other stability improvements in code, tests, and makefiles. +- First release where binary packages include headers/docs/examples, so + binary packages are now self-sufficient for using TBB. + +Open-source contributions integrated: + +- atomics patch (partially). +- tick_count warning patch. + +Bugs fixed: + +- 118 - fix for boost compatibility. +- 123 - fix for tbb_machine.h. + +------------------------------------------------------------------------ +20080512 open-source release + +Changes (w.r.t. previous open-source release): + +- Fixed a problem with backward binary compatibility + of debug Linux builds. +- Sun* Studio* support added. +- soname support added on Linux via linker script. To restore backward + binary compatibility, *.so -> *.so.2 softlinks should be created. +- concurrent_hash_map improvements - added few new forms of insert() + method and fixed precondition and guarantees of erase() methods. + Added runtime warning reporting about bad hash function used for + the container. Various improvements for performance and concurrency. +- Cancellation mechanism reworked so that it does not hurt scalability. +- Algorithm parallel_do reworked. Requirement for Body::argument_type + definition removed, and work item argument type can be arbitrarily + cv-qualified. +- polygon_overlay example added. +- A few more improvements to code, tests, examples and Makefiles. + +Open-source contributions integrated: + +- Soname support patch for Bugzilla #112. + +Bugs fixed: + +- 112 - fix for soname support. + +------------------------------------------------------------------------ +Intel TBB 2.0 U3 commercial-aligned release (package 017, April 20, 2008) + +Corresponds to commercial 019 (for Linux*, 020; for Mac OS* X, 018) +packages. + +Changes (w.r.t. Intel TBB 2.0 U2 commercial-aligned release): + +- Does not contain open-source-release changes below; this release is + only a minor update of TBB 2.0 U2. +- Removed spin-waiting in pipeline and concurrent_queue. +- A few more small bug fixes from open-source releases below. + +------------------------------------------------------------------------ +20080408 open-source release + +Changes (w.r.t. previous open-source release): + +- count_strings example reworked: new word generator implemented, hash + function replaced, and tbb_allocator is used with std::string class. +- Static methods of spin_rw_mutex were replaced by normal member + functions, and the class name was versioned. +- tacheon example was renamed to tachyon. +- Improved support for Intel(R) Thread Checker. +- A few more minor improvements. + +Open-source contributions integrated: + +- Two sets of Sun patches for IA Solaris support. + +------------------------------------------------------------------------ +20080402 open-source release + +Changes (w.r.t. previous open-source release): + +- Exception handling and cancellation support for tasks and algorithms + fully enabled. +- Exception safety guaranties defined and fixed for all concurrent + containers. +- User-defined memory allocator support added to all concurrent + containers. +- Performance improvement of concurrent_hash_map, spin_rw_mutex. +- Critical fix for a rare race condition during scheduler + initialization/de-initialization. +- New methods added for concurrent containers to be closer to STL, + as well as automatic filters removal from pipeline + and __TBB_AtomicAND function. +- The volatile keyword dropped from where it is not really needed. +- A few more minor improvements. + +------------------------------------------------------------------------ +20080319 open-source release + +Changes (w.r.t. previous open-source release): + +- Support for gcc version 4.3 was added. +- tbb_thread class, near compatible with std::thread expected in C++0x, + was added. + +Bugs fixed: + +- 116 - fix for compilation issues with gcc version 4.2.1. +- 120 - fix for compilation issues with gcc version 4.3. + +------------------------------------------------------------------------ +20080311 open-source release + +Changes (w.r.t. previous open-source release): + +- An enumerator added for pipeline filter types (serial vs. parallel). +- New task_scheduler_observer class introduced, to observe when + threads start and finish interacting with the TBB task scheduler. +- task_scheduler_init reverted to not use internal versioned class; + binary compatibility guaranteed with stable releases only. +- Various improvements to code, tests, examples and Makefiles. + +------------------------------------------------------------------------ +20080304 open-source release + +Changes (w.r.t. previous open-source release): + +- Task-to-thread affinity support, previously kept under a macro, + now fully legalized. +- Work-in-progress on cache_aligned_allocator improvements. +- Pipeline really supports parallel input stage; it's no more serialized. +- Various improvements to code, tests, examples and Makefiles. + +Bugs fixed: + +- 119 - fix for scalable_malloc sometimes failing to return a big block. +- TR575 - fixed a deadlock occurring on Windows in startup/shutdown + under some conditions. + +------------------------------------------------------------------------ +20080226 open-source release + +Changes (w.r.t. previous open-source release): + +- Introduced tbb_allocator to select between standard allocator and + tbb::scalable_allocator when available. +- Removed spin-waiting in pipeline and concurrent_queue. +- Improved performance of concurrent_hash_map by using tbb_allocator. +- Improved support for Intel(R) Thread Checker. +- Various improvements to code, tests, examples and Makefiles. + +------------------------------------------------------------------------ +Intel TBB 2.0 U2 commercial-aligned release (package 017, February 14, 2008) + +Corresponds to commercial 017 (for Linux*, 018; for Mac OS* X, 016) +packages. + +Changes (w.r.t. Intel TBB 2.0 U1 commercial-aligned release): + +- Does not contain open-source-release changes below; this release is + only a minor update of TBB 2.0 U1. +- Add support for Microsoft* Visual Studio* 2008, including binary + libraries and VS2008 projects for examples. +- Use SwitchToThread() not Sleep() to yield threads on Windows*. +- Enhancements to Doxygen-readable comments in source code. +- A few more small bug fixes from open-source releases below. + +Bugs fixed: + +- TR569 - Memory leak in concurrent_queue. + +------------------------------------------------------------------------ +20080207 open-source release + +Changes (w.r.t. previous open-source release): + +- Improvements and minor fixes in VS2008 projects for examples. +- Improvements in code for gating worker threads that wait for work, + previously consolidated under #if IMPROVED_GATING, now legalized. +- Cosmetic changes in code, examples, tests. + +Bugs fixed: + +- 113 - Iterators and ranges should be convertible to their const + counterparts. +- TR569 - Memory leak in concurrent_queue. + +------------------------------------------------------------------------ +20080122 open-source release + +Changes (w.r.t. previous open-source release): + +- Updated examples/parallel_for/seismic to improve the visuals and to + use the affinity_partitioner (20071127 and forward) for better + performance. +- Minor improvements to unittests and performance tests. + +------------------------------------------------------------------------ +20080115 open-source release + +Changes (w.r.t. previous open-source release): + +- Cleanup, simplifications and enhancements to the Makefiles for + building the libraries (see build/index.html for high-level + changes) and the examples. +- Use SwitchToThread() not Sleep() to yield threads on Windows*. +- Engineering work-in-progress on exception safety/support. +- Engineering work-in-progress on affinity_partitioner for + parallel_reduce. +- Engineering work-in-progress on improved gating for worker threads + (idle workers now block in the OS instead of spinning). +- Enhancements to Doxygen-readable comments in source code. + +Bugs fixed: + +- 102 - Support for parallel build with gmake -j +- 114 - /Wp64 build warning on Windows*. + +------------------------------------------------------------------------ +20071218 open-source release + +Changes (w.r.t. previous open-source release): + +- Full support for Microsoft* Visual Studio* 2008 in open-source. + Binaries for vc9/ will be available in future stable releases. +- New recursive_mutex class. +- Full support for 32-bit PowerMac including export files for builds. +- Improvements to parallel_do. + +------------------------------------------------------------------------ +20071206 open-source release + +Changes (w.r.t. previous open-source release): + +- Support for Microsoft* Visual Studio* 2008 in building libraries + from source as well as in vc9/ projects for examples. +- Small fixes to the affinity_partitioner first introduced in 20071127. +- Small fixes to the thread-stack size hook first introduced in 20071127. +- Engineering work in progress on concurrent_vector. +- Engineering work in progress on exception behavior. +- Unittest improvements. + +------------------------------------------------------------------------ +20071127 open-source release + +Changes (w.r.t. previous open-source release): + +- Task-to-thread affinity support (affinity partitioner) first appears. +- More work on concurrent_vector. +- New parallel_do algorithm (function-style version of parallel while) + and parallel_do/parallel_preorder example. +- New task_scheduler_init() hooks for getting default_num_threads() and + for setting thread stack size. +- Support for weak memory consistency models in the code base. +- Futex usage in the task scheduler (Linux). +- Started adding 32-bit PowerMac support. +- Intel(R) 9.1 compilers are now the base supported Intel(R) compiler + version. +- TBB libraries added to link line automatically on Microsoft Windows* + systems via #pragma comment linker directives. + +Open-source contributions integrated: + +- FreeBSD platform support patches. +- AIX weak memory model patch. + +Bugs fixed: + +- 108 - Removed broken affinity.h reference. +- 101 - Does not build on Debian Lenny (replaced arch with uname -m). + +------------------------------------------------------------------------ +20071030 open-source release + +Changes (w.r.t. previous open-source release): + +- More work on concurrent_vector. +- Better support for building with -Wall -Werror (or not) as desired. +- A few fixes to eliminate extraneous warnings. +- Begin introduction of versioning hooks so that the internal/API + version is tracked via TBB_INTERFACE_VERSION. The newest binary + libraries should always work with previously-compiled code when- + ever possible. +- Engineering work in progress on using futex inside the mutexes (Linux). +- Engineering work in progress on exception behavior. +- Engineering work in progress on a new parallel_do algorithm. +- Unittest improvements. + +------------------------------------------------------------------------ +20070927 open-source release + +Changes (w.r.t. Intel TBB 2.0 U1 commercial-aligned release): + +- Minor update to TBB 2.0 U1 below. +- Begin introduction of new concurrent_vector interfaces not released + with TBB 2.0 U1. + +------------------------------------------------------------------------ +Intel TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007) + +Corresponds to commercial 014 (for Linux*, 016) packages. + +Changes (w.r.t. Intel TBB 2.0 commercial-aligned release): + +- All open-source-release changes down to, and including, TBB 2.0 + below, were incorporated into this release. +- Made a number of changes to the officially supported OS list: + Added Linux* OSs: + Asianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7, + Turbo Linux* 11, Ubuntu* 7.04; + Dropped Linux* OSs: + Asianux* 2, Fedora Core* 4, Haansoft* Linux 2006 Server, + Mandriva/Mandrake* 10.1, Miracle Linux* 4.0, + Red Flag* DC Server 5.0; + Only Mac OS* X 10.4.9 (and forward) and Xcode* tool suite 2.4.1 (and + forward) are now supported. +- Commercial installers on Linux* fixed to recommend the correct + binaries to use in more cases, with less unnecessary warnings. +- Changes to eliminate spurious build warnings. + +Open-source contributions integrated: + +- Two small header guard macro patches; it also fixed bug #94. +- New blocked_range3d class. + +Bugs fixed: + +- 93 - Removed misleading comments in task.h. +- 94 - See above. + +------------------------------------------------------------------------ +20070815 open-source release + +Changes: + +- Changes to eliminate spurious build warnings. +- Engineering work in progress on concurrent_vector allocator behavior. +- Added hooks to use the Intel(R) compiler code coverage tools. + +Open-source contributions integrated: + +- Mac OS* X build warning patch. + +Bugs fixed: + +- 88 - Fixed TBB compilation errors if both VS2005 and Windows SDK are + installed. + +------------------------------------------------------------------------ +20070719 open-source release + +Changes: + +- Minor update to TBB 2.0 commercial-aligned release below. +- Changes to eliminate spurious build warnings. + +------------------------------------------------------------------------ +Intel TBB 2.0 commercial-aligned release (package 010, July 19, 2007) + +Corresponds to commercial 010 (for Linux*, 012) packages. + +- TBB open-source debut release. + +------------------------------------------------------------------------ +Intel TBB 1.1 commercial release (April 10, 2007) + +Changes (w.r.t. Intel TBB 1.0 commercial release): + +- auto_partitioner which offered an automatic alternative to specifying + a grain size parameter to estimate the best granularity for tasks. +- The release was added to the Intel(R) C++ Compiler 10.0 Pro. + +------------------------------------------------------------------------ +Intel TBB 1.0 Update 2 commercial release + +Changes (w.r.t. Intel TBB 1.0 Update 1 commercial release): + +- Mac OS* X 64-bit support added. +- Source packages for commercial releases introduced. + +------------------------------------------------------------------------ +Intel TBB 1.0 Update 1 commercial-aligned release + +Changes (w.r.t. Intel TBB 1.0 commercial release): + +- Fix for critical package issue on Mac OS* X. + +------------------------------------------------------------------------ +Intel TBB 1.0 commercial release (August 29, 2006) + +Changes (w.r.t. Intel TBB 1.0 beta commercial release): + +- New namespace (and compatibility headers for old namespace). + Namespaces are tbb and tbb::internal and all classes are in the + underscore_style not the WindowsStyle. +- New class: scalable_allocator (and cache_aligned_allocator using that + if it exists). +- Added parallel_for/tacheon example. +- Removed C-style casts from headers for better C++ compliance. +- Bug fixes. +- Documentation improvements. +- Improved performance of the concurrent_hash_map class. +- Upgraded parallel_sort() to support STL-style random-access iterators + instead of just pointers. +- The Windows vs7_1 directories renamed to vs7.1 in examples. +- New class: spin version of reader-writer lock. +- Added push_back() interface to concurrent_vector(). + +------------------------------------------------------------------------ +Intel TBB 1.0 beta commercial release + +Initial release. + +Features / APIs: + +- Concurrent containers: ConcurrentHashTable, ConcurrentVector, + ConcurrentQueue. +- Parallel algorithms: ParallelFor, ParallelReduce, ParallelScan, + ParallelWhile, Pipeline, ParallelSort. +- Support: AlignedSpace, BlockedRange (i.e., 1D), BlockedRange2D +- Task scheduler with multi-master support. +- Atomics: read, write, fetch-and-store, fetch-and-add, compare-and-swap. +- Locks: spin, reader-writer, queuing, OS-wrapper. +- Memory allocation: STL-style memory allocator that avoids false + sharing. +- Timers. + +Tools Support: +- Intel(R) Thread Checker 3.0. +- Intel(R) Thread Profiler 3.0. + +Documentation: +- First Use Documents: README.txt, INSTALL.txt, Release_Notes.txt, + Doc_Index.html, Getting_Started.pdf, Tutorial.pdf, Reference.pdf. +- Class hierarchy HTML pages (Doxygen). +- Tree of index.html pages for navigating the installed package, esp. + for the examples. + +Examples: +- One for each of these TBB features: ConcurrentHashTable, ParallelFor, + ParallelReduce, ParallelWhile, Pipeline, Task. +- Live copies of examples from Getting_Started.pdf. +- TestAll example that exercises every class and header in the package + (i.e., a "liveness test"). +- Compilers: see Release_Notes.txt. +- APIs: OpenMP, WinThreads, Pthreads. + +Packaging: +- Package for Windows installs IA-32 and EM64T bits. +- Package for Linux installs IA-32, EM64T and IPF bits. +- Package for Mac OS* X installs IA-32 bits. +- All packages support Intel(R) software setup assistant (ISSA) and + install-time FLEXlm license checking. +- ISSA support allows license file to be specified directly in case of + no Internet connection or problems with IRC or serial #s. +- Linux installer allows root or non-root, RPM or non-RPM installs. +- FLEXlm license servers (for those who need floating/counted licenses) + are provided separately on Intel(R) Premier. + +------------------------------------------------------------------------ +Intel, the Intel logo, Xeon, Intel Xeon Phi, and Cilk are registered +trademarks or trademarks of Intel Corporation or its subsidiaries in +the United States and other countries. + +* Other names and brands may be claimed as the property of others. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor 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, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You 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 + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You 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 such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) 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. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..40ca412 --- /dev/null +++ b/Makefile @@ -0,0 +1,84 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +tbb_root?=. +include $(tbb_root)/build/common.inc +.PHONY: default all tbb tbbmalloc tbbproxy test examples + +#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.ver +#According to documentation, recursively invoked make commands can process their targets in parallel +.NOTPARALLEL: tbb tbbmalloc tbbproxy + +default: tbb tbbmalloc $(if $(use_proxy),tbbproxy) + +all: tbb tbbmalloc tbbproxy test examples + +tbb: mkdir + $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbb cfg=debug + $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbb cfg=release + +tbbmalloc: mkdir + $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc + $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc + +tbbproxy: mkdir + $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=debug tbbproxy + $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=release tbbproxy + +test: tbb tbbmalloc $(if $(use_proxy),tbbproxy) + -$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test + -$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.test cfg=debug + -$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test + -$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.test cfg=release + +rml: mkdir + $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.rml cfg=debug + $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.rml cfg=release + + +examples: tbb tbbmalloc + $(MAKE) -C examples -r -f Makefile tbb_root=.. release test + +python: mkdir + $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbb cfg=release + bash -c ". $(work_dir)_release$(SLASH)tbbvars.sh && $(MAKE) -rC '$(full_tbb_root)/python' CXX=$(compiler) install test-install" + +.PHONY: clean clean_examples mkdir info + +clean: clean_examples + $(shell $(RM) $(work_dir)_release$(SLASH)*.* >$(NUL) 2>$(NUL)) + $(shell $(RD) $(work_dir)_release >$(NUL) 2>$(NUL)) + $(shell $(RM) $(work_dir)_debug$(SLASH)*.* >$(NUL) 2>$(NUL)) + $(shell $(RD) $(work_dir)_debug >$(NUL) 2>$(NUL)) + @echo clean done + +clean_examples: + $(shell $(MAKE) -s -i -r -C examples -f Makefile tbb_root=.. clean >$(NUL) 2>$(NUL)) + +mkdir: + $(shell $(MD) "$(work_dir)_release" >$(NUL) 2>$(NUL)) + $(shell $(MD) "$(work_dir)_debug" >$(NUL) 2>$(NUL)) + @echo Created $(work_dir)_release and ..._debug directories + +info: + @echo OS: $(tbb_os) + @echo arch=$(arch) + @echo compiler=$(compiler) + @echo runtime=$(runtime) + @echo tbb_build_prefix=$(tbb_build_prefix) + diff --git a/README b/README new file mode 100644 index 0000000..fcc87af --- /dev/null +++ b/README @@ -0,0 +1,11 @@ +Intel(R) Threading Building Blocks - README + +See index.html for directions and documentation. + +If source is present (./Makefile and src/ directories), +type 'gmake' in this directory to build and test. + +See examples/index.html for runnable examples and directions. + +See http://threadingbuildingblocks.org for full documentation +and software information. diff --git a/README.md b/README.md index 10ba698..1ca379d 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,27 @@ -# Intel(R) Threading Building Blocks +# Intel(R) Threading Building Blocks 2018 +[![Stable release](https://img.shields.io/badge/version-2018-green.svg)](https://github.com/01org/tbb/releases/tag/2018) +[![Apache License Version 2.0](https://img.shields.io/badge/license-Apache_2.0-green.svg)](LICENSE) Intel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that take full advantage of multicore performance, that are portable, composable and have future-proof scalability. -## Intel(R) TBB Distribution -* Commercial version: [https://software.intel.com/en-us/intel-tbb](https://software.intel.com/en-us/intel-tbb) -* Community licensing: [https://software.intel.com/sites/campaigns/nest/](https://software.intel.com/sites/campaigns/nest/) -* Open source version: [https://www.threadingbuildingblocks.org/](https://www.threadingbuildingblocks.org/) -* Intel(R) TBB for Python\*: [http://anaconda.org/intel/tbb](http://anaconda.org/intel/tbb) +## Release Information +Here are the latest [Changes](CHANGES) and [Release Notes](doc/Release_Notes.txt) (contains system requirements and known issues). -## Repository Content -This is an official Intel(R) TBB public GitHub repository. All source and binary packages starting from Intel(R) TBB 4.4 -can be found at the [Release page](https://github.com/01org/tbb/releases). Links to the packages with older versions of -Intel(R) TBB can be found in the [download.md](download.md) file. +## Documentation +* Intel(R) TBB [tutorial](https://software.intel.com/en-us/tbb-tutorial) +* Intel(R) TBB general documentation: [stable](https://software.intel.com/en-us/tbb-documentation) +and [latest](https://www.threadingbuildingblocks.org/docs/help/index.htm) -## Repository Structure -The Master branch is empty and contains only README.md and download.md files. +## Support +Please report issues and suggestions via +[GitHub issues](https://github.com/01org/tbb/issues) or start a topic on the +[Intel(R) TBB forum](http://software.intel.com/en-us/forums/intel-threading-building-blocks/). -tbb_\ - branch for the new major version. All minor versions of the major release will be committed in this branch. +## How to Contribute +Please, read the instructions on the official [Intel(R) TBB open source site](https://www.threadingbuildingblocks.org/submit-contribution). -For example: -* Intel(R) TBB 2017 initial release goes to branch tbb_2017. -* Intel(R) TBB 2017 Update 1 will go to branch tbb_2017 too. -* Intel(R) TBB 2018 initial release will go to branch tbb_2018. - -## Сontact engineering team +## Engineering team contacts * [E-mail us.](mailto:inteltbbdevelopers@intel.com) ------------------------------------------------------------------------ diff --git a/build/AIX.gcc.inc b/build/AIX.gcc.inc new file mode 100644 index 0000000..18e6e6a --- /dev/null +++ b/build/AIX.gcc.inc @@ -0,0 +1,75 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +DYLIB_KEY = -shared +LIBDL = -ldl + +CPLUS = g++ +CONLY = gcc +LIB_LINK_FLAGS = -shared +LIBS = -lpthread -ldl +C_FLAGS = $(CPLUS_FLAGS) -x c + +ifeq ($(cfg), release) + CPLUS_FLAGS = -O2 -DUSE_PTHREAD -pthread +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD -pthread +endif + +ASM= +ASM_FLAGS= + +TBB_ASM.OBJ= + +ifeq (powerpc,$(arch)) + CPLUS_FLAGS += -maix64 -Wl,-G + LIB_LINK_FLAGS += -maix64 -Wl,-b64 -Wl,-brtl -Wl,-G +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ + +ASSEMBLY_SOURCE=ibm_aix51 +ifeq (powerpc,$(arch)) + TBB_ASM.OBJ = atomic_support.o +endif + +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/AIX.inc b/build/AIX.inc new file mode 100644 index 0000000..abe12d5 --- /dev/null +++ b/build/AIX.inc @@ -0,0 +1,66 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +ifndef arch + arch:=$(shell uname -p) + export arch +endif + +ifndef runtime + gcc_version:=$(shell gcc -dumpversion) + os_version:=$(shell uname -r) + os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//') + export runtime:=cc$(gcc_version)_kernel$(os_kernel_version) +endif + +native_compiler := gcc +export compiler ?= gcc +debugger ?= gdb + +CMD=$(SHELL) -c +CWD=$(shell pwd) +RM?=rm -f +RD?=rmdir +MD?=mkdir -p +NUL= /dev/null +SLASH=/ +MAKE_VERSIONS=sh $(tbb_root)/build/version_info_aix.sh $(VERSION_FLAGS) >version_string.ver +MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh + +ifdef LIBPATH + export LIBPATH := .:$(LIBPATH) +else + export LIBPATH := . +endif + +####### Build settings ######################################################## + +OBJ = o +DLL = so + +TBB.LST = +TBB.DEF = +TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = $(TBB.DLL) +LINK_TBB.LIB = $(TBB.LIB) + +MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL) +MALLOC.LIB = $(MALLOC.DLL) +LINK_MALLOC.LIB = $(MALLOC.LIB) + +TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs) diff --git a/build/FreeBSD.clang.inc b/build/FreeBSD.clang.inc new file mode 100644 index 0000000..3579603 --- /dev/null +++ b/build/FreeBSD.clang.inc @@ -0,0 +1,110 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor -Wno-dangling-else +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +LIBDL = + +CPLUS = clang++ +CONLY = clang +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) +LIBS += -lpthread -lrt +LINK_FLAGS = -Wl,-rpath-link=. -Wl,-rpath=. -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD +endif + +ifneq (,$(stdlib)) + CPLUS_FLAGS += -stdlib=$(stdlib) + LIB_LINK_FLAGS += -stdlib=$(stdlib) +endif + +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ifeq (intel64,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m32 -march=pentium4 + LIB_LINK_FLAGS += -m32 +endif + +ifeq (ppc64,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ppc32,$(arch)) + CPLUS_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +ifeq (bg,$(arch)) + CPLUS = bgclang++ + CONLY = bgclang +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/FreeBSD.gcc.inc b/build/FreeBSD.gcc.inc new file mode 100644 index 0000000..794cb7c --- /dev/null +++ b/build/FreeBSD.gcc.inc @@ -0,0 +1,93 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +DYLIB_KEY = -shared +WARNING_SUPPRESS = -Wno-parentheses + +CPLUS = g++ +CONLY = gcc +LIB_LINK_FLAGS = -shared +LIBS = -lpthread +C_FLAGS = $(CPLUS_FLAGS) + +# gcc 6.0 and later have -flifetime-dse option that controls +# elimination of stores done outside the object lifetime +ifneq (,$(shell gcc -dumpversion | egrep "^([6-9])")) + # keep pre-contruction stores for zero initialization + DSE_KEY = -flifetime-dse=1 +endif + +ifeq ($(cfg), release) + CPLUS_FLAGS = -g -O2 -DUSE_PTHREAD +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD +endif + +ASM= +ASM_FLAGS= + +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ifeq (ia64,$(arch)) +# Position-independent code (PIC) is a must on IA-64 architecture, even for regular (not shared) executables + CPLUS_FLAGS += $(PIC_KEY) +endif + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASSEMBLY_SOURCE=$(arch)-gas +ifeq (ia64,$(arch)) + ASM=as + TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o + MALLOC_ASM.OBJ = atomic_support.o lock_byte.o pause.o +endif +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc new file mode 100644 index 0000000..3bd6a06 --- /dev/null +++ b/build/FreeBSD.inc @@ -0,0 +1,74 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +ifndef arch + ifeq ($(shell uname -m),i386) + export arch:=ia32 + endif + ifeq ($(shell uname -m),ia64) + export arch:=ia64 + endif + ifeq ($(shell uname -m),amd64) + export arch:=intel64 + endif +endif + +ifndef runtime + clang_version:=$(shell clang -v 2>&1 | grep version | sed "s/.*version \([0-9]*\.[0-9]*\).*/\1/") + os_version:=$(shell uname -r) + os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//') + export runtime:=cc$(clang_version)_kernel$(os_kernel_version) +endif + +native_compiler := clang +export compiler ?= clang +debugger ?= gdb + +CMD=$(SHELL) -c +CWD=$(shell pwd) +RM?=rm -f +RD?=rmdir +MD?=mkdir -p +NUL= /dev/null +SLASH=/ +MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(VERSION_FLAGS) >version_string.ver +MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh + +ifdef LD_LIBRARY_PATH + export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH) +else + export LD_LIBRARY_PATH := . +endif + +####### Build settings ######################################################## + +OBJ = o +DLL = so +LIBEXT=so + +TBB.LST = +TBB.DEF = +TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = $(TBB.DLL) +LINK_TBB.LIB = $(TBB.LIB) + +MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL) +MALLOC.LIB = $(MALLOC.DLL) +LINK_MALLOC.LIB = $(MALLOC.LIB) + +TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs) diff --git a/build/Makefile.rml b/build/Makefile.rml new file mode 100644 index 0000000..241d4bf --- /dev/null +++ b/build/Makefile.rml @@ -0,0 +1,166 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# TODO: investigate why version_string.ver is not complete when $(RML_SERVER.OBJ) is being compiled. +.NOTPARALLEL: + +tbb_root ?= $(TBBROOT) +BUILDING_PHASE=1 +TEST_RESOURCE = $(RML.RES) +include $(tbb_root)/build/common.inc +DEBUG_SUFFIX=$(findstring _debug,_$(cfg)) + +ifeq (android,$(target)) +$(error "RML is not supported on Android") +endif + +# default target +default_rml: rml rml_test + +RML_ROOT ?= $(tbb_root)/src/rml +RML_SERVER_ROOT = $(RML_ROOT)/server + +VPATH = $(tbb_root)/src/tbb $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) +VPATH += $(RML_ROOT)/server $(RML_ROOT)/client $(RML_ROOT)/test $(tbb_root)/src/test + +include $(tbb_root)/build/common_rules.inc + +#-------------------------------------------------------------------------- +# Define rules for making the RML server shared library and client objects. +#-------------------------------------------------------------------------- + +# Object files that make up RML server +RML_SERVER.OBJ = rml_server.$(OBJ) + +# Object files that RML clients need +RML_TBB_CLIENT.OBJ ?= rml_tbb.$(OBJ) dynamic_link_rml.$(OBJ) +RML_OMP_CLIENT.OBJ ?= rml_omp.$(OBJ) omp_dynamic_link.$(OBJ) + +RML.OBJ = $(RML_SERVER.OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) +ifeq (windows,$(tbb_os)) +RML_ASM.OBJ = $(if $(findstring intel64,$(arch)),$(TBB_ASM.OBJ)) +endif +ifeq (linux,$(tbb_os)) +RML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ)) +endif + +RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) semaphore_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ) +TBB_DEP_NON_RML_TEST?= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ) +ifeq ($(cfg),debug) +RML_TBB_DEP+= spin_mutex_rml.$(OBJ) +TBB_DEP_RML_TEST?= $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) +else +TBB_DEP_RML_TEST?= $(RML_ASM.OBJ) +endif +LIBS += $(LIBDL) + +INCLUDES += $(INCLUDE_KEY)$(RML_ROOT)/include $(INCLUDE_KEY). +T_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(tbb_root)/src/test $(INCLUDE_KEY)$(RML_SERVER_ROOT) + +ifeq ($(rml_wcrm),1) +CPLUS_FLAGS+=/DRML_USE_WCRM +endif + +# Suppress superfluous warnings for RML compilation +R_CPLUS_FLAGS = $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) \ + $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1 + +%.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $< + +ifeq (linux,$(tbb_os)) +omp_dynamic_link.$(OBJ): CPLUS_FLAGS+=-fno-exceptions +endif + +tbb_misc_rml.$(OBJ) $(RML_SERVER.OBJ): version_string.ver + +RML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ) test_rml_omp.$(OBJ) test_rml_mixed.$(OBJ) + +$(RML_TBB_DEP): %_rml.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(INCLUDES) $< + +$(RML_TEST.OBJ): %.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $< + +ifneq (,$(RML.DEF)) +rml.def: $(RML.DEF) + $(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@ + +LIB_LINK_FLAGS += $(EXPORT_KEY)rml.def +$(RML.DLL): rml.def +endif + +$(RML.DLL): CPLUS_FLAGS += $(SDL_FLAGS) +$(RML.DLL): BUILDING_LIBRARY = $(RML.DLL) +$(RML.DLL): $(RML_TBB_DEP) $(RML_SERVER.OBJ) $(RML.RES) $(RML_NO_VERSION.DLL) $(RML_ASM.OBJ) + $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(RML.DLL) $(RML_SERVER.OBJ) $(RML_TBB_DEP) $(RML_ASM.OBJ) $(RML.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS) + +ifneq (,$(RML_NO_VERSION.DLL)) +$(RML_NO_VERSION.DLL): + echo "INPUT ($(RML.DLL))" > $(RML_NO_VERSION.DLL) +endif + +rml: $(RML.DLL) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) + +#------------------------------------------------------ +# End of rules for making the RML server shared library +#------------------------------------------------------ + +#------------------------------------------------------ +# Define rules for making the RML unit tests +#------------------------------------------------------ + +add_debug=$(basename $(1))_debug$(suffix $(1)) +cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1)) + +RML_TESTS = test_job_automaton.$(TEST_EXT) test_thread_monitor.$(TEST_EXT) +RML_CUSTOM_TESTS = test_rml_tbb.$(TEST_EXT) test_rml_omp.$(TEST_EXT) test_rml_mixed.$(TEST_EXT) test_rml_omp_c_linkage.$(TEST_EXT) + +test_rml_tbb.$(TEST_EXT): test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) + $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS) + +test_rml_omp.$(TEST_EXT): test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) + $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS) + +test_rml_mixed.$(TEST_EXT): test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) + $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS) + +rml_omp_stub.$(OBJ): rml_omp_stub.cpp + $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(T_INCLUDES) $(PIC_KEY) $< + +test_rml_omp_c_linkage.$(TEST_EXT): test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ) + $(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ) $(LIBS) $(LINK_FLAGS) + +$(RML_TESTS): %.$(TEST_EXT): %.$(OBJ) $(TBB_DEP_NON_RML_TEST) + $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS) + +### run_cmd is usually empty +rml_test: $(call cross_suffix,$(RML.DLL)) $(TEST_PREREQUISITE) $(RML_TESTS) $(RML_CUSTOM_TESTS) + $(run_cmd) ./test_job_automaton.$(TEST_EXT) $(args) + $(run_cmd) ./test_thread_monitor.$(TEST_EXT) $(args) + $(run_cmd) ./test_rml_tbb.$(TEST_EXT) $(args) + $(run_cmd) ./test_rml_omp.$(TEST_EXT) $(args) + $(run_cmd) ./test_rml_mixed.$(TEST_EXT) $(args) + $(run_cmd) ./test_rml_omp_c_linkage.$(TEST_EXT) $(args) + +#------------------------------------------------------ +# End of rules for making the TBBMalloc unit tests +#------------------------------------------------------ + +# Include automatically generated dependencies +-include *.d diff --git a/build/Makefile.tbb b/build/Makefile.tbb new file mode 100644 index 0000000..857aacc --- /dev/null +++ b/build/Makefile.tbb @@ -0,0 +1,118 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +#------------------------------------------------------------------------------ +# Define rules for making the TBB shared library. +#------------------------------------------------------------------------------ + +tbb_root ?= "$(TBBROOT)" +BUILDING_PHASE=1 +include $(tbb_root)/build/common.inc +CPLUS_FLAGS += $(SDL_FLAGS) +DEBUG_SUFFIX=$(findstring _debug,_$(cfg)) + +#------------------------------------------------------------ +# Define static pattern rules dealing with .cpp source files +#------------------------------------------------------------ +$(warning CONFIG: cfg=$(cfg) arch=$(arch) compiler=$(compiler) target=$(target) runtime=$(runtime)) + +default_tbb: $(TBB.DLL) +.PHONY: default_tbb tbbvars clean +.PRECIOUS: %.$(OBJ) + +VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/old $(tbb_root)/src/rml/client + +CPLUS_FLAGS += $(PIC_KEY) $(DSE_KEY) $(DEFINE_KEY)__TBB_BUILD=1 + +# Object files (that were compiled from C++ code) that gmake up TBB +TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \ + concurrent_queue.$(OBJ) \ + concurrent_vector.$(OBJ) \ + dynamic_link.$(OBJ) \ + itt_notify.$(OBJ) \ + cache_aligned_allocator.$(OBJ) \ + pipeline.$(OBJ) \ + queuing_mutex.$(OBJ) \ + queuing_rw_mutex.$(OBJ) \ + reader_writer_lock.$(OBJ) \ + spin_rw_mutex.$(OBJ) \ + x86_rtm_rw_mutex.$(OBJ) \ + spin_mutex.$(OBJ) \ + critical_section.$(OBJ) \ + mutex.$(OBJ) \ + recursive_mutex.$(OBJ) \ + condition_variable.$(OBJ) \ + tbb_thread.$(OBJ) \ + concurrent_monitor.$(OBJ) \ + semaphore.$(OBJ) \ + private_server.$(OBJ) \ + rml_tbb.$(OBJ) \ + tbb_misc.$(OBJ) \ + tbb_misc_ex.$(OBJ) \ + task.$(OBJ) \ + task_group_context.$(OBJ) \ + governor.$(OBJ) \ + market.$(OBJ) \ + arena.$(OBJ) \ + scheduler.$(OBJ) \ + observer_proxy.$(OBJ) \ + tbb_statistics.$(OBJ) \ + tbb_main.$(OBJ) + +# OLD/Legacy object files for backward binary compatibility +ifeq (,$(findstring $(DEFINE_KEY)TBB_NO_LEGACY,$(CPLUS_FLAGS))) +TBB_CPLUS_OLD.OBJ = \ + concurrent_vector_v2.$(OBJ) \ + concurrent_queue_v2.$(OBJ) \ + spin_rw_mutex_v2.$(OBJ) \ + task_v2.$(OBJ) +endif + +# Object files that gmake up TBB (TBB_ASM.OBJ is platform-specific) +TBB.OBJ = $(TBB_CPLUS.OBJ) $(TBB_CPLUS_OLD.OBJ) $(TBB_ASM.OBJ) + +# Suppress superfluous warnings for TBB compilation +WARNING_KEY += $(WARNING_SUPPRESS) + +include $(tbb_root)/build/common_rules.inc + +ifneq (,$(TBB.DEF)) +tbb.def: $(TBB.DEF) $(TBB.LST) + $(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@ + +LIB_LINK_FLAGS += $(EXPORT_KEY)tbb.def +$(TBB.DLL): tbb.def +endif + +tbbvars.sh: + $(MAKE_TBBVARS) + +$(TBB.DLL): BUILDING_LIBRARY = $(TBB.DLL) +$(TBB.DLL): $(TBB.OBJ) $(TBB.RES) tbbvars.sh $(TBB_NO_VERSION.DLL) + $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(TBB.DLL) $(TBB.OBJ) $(TBB.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS) + +ifneq (,$(TBB_NO_VERSION.DLL)) +$(TBB_NO_VERSION.DLL): + echo "INPUT ($(TBB.DLL))" > $(TBB_NO_VERSION.DLL) +endif + +#clean: +# $(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9] *.ver + +# Include automatically generated dependencies +-include *.d diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc new file mode 100644 index 0000000..dedcfa5 --- /dev/null +++ b/build/Makefile.tbbmalloc @@ -0,0 +1,240 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# default target +default_malloc: malloc malloc_test + +tbb_root ?= $(TBBROOT) +BUILDING_PHASE=1 +TEST_RESOURCE = $(MALLOC.RES) +TESTFILE=tbbmalloc +include $(tbb_root)/build/common.inc +DEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg))) + +MALLOC_ROOT ?= $(tbb_root)/src/tbbmalloc +MALLOC_SOURCE_ROOT ?= $(MALLOC_ROOT) + +VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test +VPATH += $(MALLOC_ROOT) $(MALLOC_SOURCE_ROOT) + +CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBBMALLOC_NO_IMPLICIT_LINKAGE=1) + +TEST_SUFFIXES=proxy +TEST_PREREQUISITE+=$(MALLOC.LIB) +LINK_FILES+=$(LINK_MALLOC.LIB) +include $(tbb_root)/build/common_rules.inc + +ORIG_CPLUS_FLAGS:=$(CPLUS_FLAGS) +ORIG_INCLUDES:=$(INCLUDES) +ORIG_LINK_MALLOC.LIB:=$(LINK_MALLOC.LIB) + +#------------------------------------------------------ +# Define rules for making the TBBMalloc shared library. +#------------------------------------------------------ + +# Object files that make up TBBMalloc +MALLOC_CPLUS.OBJ = backend.$(OBJ) large_objects.$(OBJ) backref.$(OBJ) tbbmalloc.$(OBJ) +MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) itt_notify_malloc.$(OBJ) frontend.$(OBJ) +PROXY.OBJ := proxy.$(OBJ) tbb_function_replacement.$(OBJ) +M_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 +M_INCLUDES := $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOURCE_ROOT) + +# Suppress superfluous warnings for TBBMalloc compilation +$(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS) +# Suppress superfluous warnings for TBBMalloc proxy compilation +$(PROXY.OBJ): CPLUS_FLAGS += $(WARNING_SUPPRESS) + +frontend.$(OBJ): frontend.cpp version_string.ver + $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(M_INCLUDES) $(INCLUDE_KEY). $< + +$(PROXY.OBJ): %.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 $(M_INCLUDES) $< + +$(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(M_INCLUDES) $< + +itt_notify_malloc.$(OBJ): itt_notify.cpp + $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDES) $< + +MALLOC_LINK_FLAGS = $(LIB_LINK_FLAGS) +PROXY_LINK_FLAGS = $(LIB_LINK_FLAGS) + +ifneq (,$(MALLOC.DEF)) +tbbmalloc.def: $(MALLOC.DEF) + $(CPLUS) $(PREPROC_ONLY) $< $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(INCLUDES) > $@ + +MALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def +$(MALLOC.DLL): tbbmalloc.def +endif + +$(MALLOC.DLL) $(MALLOCPROXY.DLL): CPLUS_FLAGS += $(SDL_FLAGS) +$(MALLOC.DLL) $(MALLOCPROXY.DLL): M_CPLUS_FLAGS += $(SDL_FLAGS) +$(MALLOC.DLL): BUILDING_LIBRARY = $(MALLOC.DLL) +$(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL) + $(subst $(CPLUS),$(CONLY),$(LIB_LINK_CMD)) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS) + +ifneq (,$(MALLOCPROXY.DEF)) +tbbmallocproxy.def: $(MALLOCPROXY.DEF) + $(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(WARNING_SUPPRESS) $(INCLUDES) > $@ + +PROXY_LINK_FLAGS += $(EXPORT_KEY)tbbmallocproxy.def +$(MALLOCPROXY.DLL): tbbmallocproxy.def +endif + +ifneq (,$(MALLOCPROXY.DLL)) +$(MALLOCPROXY.DLL): BUILDING_LIBRARY = $(MALLOCPROXY.DLL) +$(MALLOCPROXY.DLL): $(PROXY.OBJ) $(MALLOCPROXY_NO_VERSION.DLL) $(MALLOC.DLL) $(MALLOC.RES) + $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOCPROXY.DLL) $(PROXY.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(LINK_MALLOC.LIB) $(PROXY_LINK_FLAGS) +endif + +ifneq (,$(MALLOC_NO_VERSION.DLL)) +$(MALLOC_NO_VERSION.DLL): + echo "INPUT ($(MALLOC.DLL))" > $(MALLOC_NO_VERSION.DLL) +endif + +ifneq (,$(MALLOCPROXY_NO_VERSION.DLL)) +$(MALLOCPROXY_NO_VERSION.DLL): + echo "INPUT ($(MALLOCPROXY.DLL))" > $(MALLOCPROXY_NO_VERSION.DLL) +endif + +malloc: $(MALLOC.DLL) $(MALLOCPROXY.DLL) + +malloc_dll: $(MALLOC.DLL) + +malloc_proxy_dll: $(MALLOCPROXY.DLL) + +.PHONY: malloc malloc_dll malloc_proxy_dll + +#------------------------------------------------------ +# End of rules for making the TBBMalloc shared library +#------------------------------------------------------ + +#------------------------------------------------------ +# Define rules for making the TBBMalloc unit tests +#------------------------------------------------------ + +# --------- The list of TBBMalloc unit tests ---------- +MALLOC_TESTS = test_ScalableAllocator.$(TEST_EXT) \ + test_ScalableAllocator_STL.$(TEST_EXT) \ + test_malloc_compliance.$(TEST_EXT) \ + test_malloc_regression.$(TEST_EXT) \ + test_malloc_init_shutdown.$(TEST_EXT) \ + test_malloc_pools.$(TEST_EXT) \ + test_malloc_pure_c.$(TEST_EXT) \ + test_malloc_whitebox.$(TEST_EXT) \ + test_malloc_used_by_lib.$(TEST_EXT) \ + test_malloc_lib_unload.$(TEST_EXT) +ifneq (,$(MALLOCPROXY.DLL)) +MALLOC_TESTS += test_malloc_overload.$(TEST_EXT) \ + test_malloc_overload_proxy.$(TEST_EXT) \ + test_malloc_atexit.$(TEST_EXT) +endif +# ----------------------------------------------------- + +# ------------ Set test specific variables ------------ +# TODO: implement accurate warning suppression for tests to unify with Makefile.test. +$(MALLOC_TESTS): CPLUS_FLAGS += $(TEST_WARNING_KEY) $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1) +$(MALLOC_TESTS): M_CPLUS_FLAGS += $(TEST_WARNING_KEY) $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1) +$(MALLOC_TESTS): INCLUDES += $(INCLUDE_TEST_HEADERS) +$(MALLOC_TESTS): M_INCLUDES += $(INCLUDE_TEST_HEADERS) + +ifeq (windows.gcc,$(tbb_os).$(compiler)) +test_malloc_overload.$(TEST_EXT): LIBS += $(MALLOCPROXY.LIB) +endif + +MALLOC_M_CPLUS_TESTS = test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT) \ + test_malloc_used_by_lib.$(TEST_EXT) +MALLOC_NO_LIB_TESTS = test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT) \ + test_malloc_used_by_lib.$(TEST_EXT) test_malloc_overload.$(TEST_EXT) +MALLOC_LINK_PROXY_TESTS = test_malloc_overload_proxy.$(TEST_EXT) +MALLOC_ADD_DLL_TESTS = test_malloc_lib_unload.$(TEST_EXT) test_malloc_used_by_lib.$(TEST_EXT) \ + test_malloc_atexit.$(TEST_EXT) + +$(MALLOC_M_CPLUS_TESTS): CPLUS_FLAGS=$(M_CPLUS_FLAGS) +$(MALLOC_M_CPLUS_TESTS): INCLUDES=$(M_INCLUDES) +$(MALLOC_NO_LIB_TESTS): LINK_MALLOC.LIB= +$(MALLOC_NO_LIB_TESTS): LINK_FLAGS+=$(LIBDL) +$(MALLOC_LINK_PROXY_TESTS): LINK_MALLOC.LIB=$(LINK_MALLOCPROXY.LIB) +ifneq (,$(DYLIB_KEY)) +$(MALLOC_ADD_DLL_TESTS): %.$(TEST_EXT): %_dll.$(DLL) +$(MALLOC_ADD_DLL_TESTS): TEST_LIBS+=$(@:.$(TEST_EXT)=_dll.$(LIBEXT)) +endif + +test_malloc_over%.$(TEST_EXT): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS)) +test_malloc_over%.$(TEST_EXT): INCLUDES=$(M_INCLUDES) +test_malloc_overload_proxy.$(TEST_EXT): LINK_FLAGS+=$(LIBDL) + +test_malloc_atexit_dll.$(DLL): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS)) +test_malloc_atexit.$(TEST_EXT): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS)) +test_malloc_atexit.$(TEST_EXT): LINK_FLAGS+=$(LIBDL) +# on Ubuntu 11.10 linker called with --as-needed, so dependency on libtbbmalloc_proxy +# is not created, and malloc overload via linking with -ltbbmalloc_proxy is not working. +# Overcome with --no-as-needed. +ifeq (linux.gcc,$(tbb_os).$(compiler)) +test_malloc_atexit.$(TEST_EXT): MALLOCPROXY.LIB := -Wl,--no-as-needed $(MALLOCPROXY.LIB) +endif +# The test isn't added to MALLOC_LINK_PROXY_TESTS, because we need both +# tbbmalloc and proxy libs. For platforms other than Android it's enough +# to modify LINK_MALLOC.LIB for TEST_EXT target only. But under Android build +# of DLL and TEST_EXT can be requested independently, so there is no chance +# to set LINK_MALLOC.LIB in TEST_EXT build rule, and affect DLL build. +test_malloc_atexit.$(TEST_EXT): LINK_MALLOC.LIB := $(LINK_MALLOC.LIB) $(LINK_MALLOCPROXY.LIB) +test_malloc_atexit_dll.$(DLL): LINK_MALLOC.LIB := $(LINK_MALLOC.LIB) $(LINK_MALLOCPROXY.LIB) + +test_malloc_whitebox.$(TEST_EXT): $(MALLOC_ASM.OBJ) version_string.ver +test_malloc_whitebox.$(TEST_EXT): INCLUDES+=$(INCLUDE_KEY). +test_malloc_whitebox.$(TEST_EXT): LINK_FILES+=$(MALLOC_ASM.OBJ) + +# Some _dll targets need to restore variables since they are changed by parent +# target-specific rule of its .exe targets +test_malloc_lib_unload_dll.$(DLL): CPLUS_FLAGS=$(ORIG_CPLUS_FLAGS) $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1) +test_malloc_lib_unload_dll.$(DLL): INCLUDES=$(ORIG_INCLUDES) $(INCLUDE_TEST_HEADERS) + +test_malloc_used_by_lib_dll.$(DLL): CPLUS_FLAGS=$(subst /MT,/LD,$(M_CPLUS_FLAGS)) +test_malloc_used_by_lib_dll.$(DLL): LINK_FILES+=$(ORIG_LINK_MALLOC.LIB) +test_malloc_used_by_lib_dll.$(DLL): LIBDL= +# ----------------------------------------------------- + +# ---- The list of TBBMalloc test running commands ---- +# run_cmd is usually empty +malloc_test: $(MALLOC.DLL) malloc_test_no_depends + +malloc_test_no_depends: $(TEST_PREREQUISITE) $(MALLOC_TESTS) + $(run_cmd) ./test_malloc_pools.$(TEST_EXT) $(args) 1:4 +ifneq (,$(MALLOCPROXY.DLL)) + $(run_cmd) ./test_malloc_atexit.$(TEST_EXT) $(args) + $(run_cmd) $(TEST_LAUNCHER) -l $(MALLOCPROXY.DLL) ./test_malloc_overload.$(TEST_EXT) $(args) + $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_overload_proxy.$(TEST_EXT) $(args) +endif + $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_lib_unload.$(TEST_EXT) $(args) + $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_used_by_lib.$(TEST_EXT) + $(run_cmd) ./test_malloc_whitebox.$(TEST_EXT) $(args) 1:4 + $(run_cmd) $(TEST_LAUNCHER) -u ./test_malloc_compliance.$(TEST_EXT) $(args) 1:4 + $(run_cmd) ./test_ScalableAllocator.$(TEST_EXT) $(args) + $(run_cmd) ./test_ScalableAllocator_STL.$(TEST_EXT) $(args) + $(run_cmd) ./test_malloc_regression.$(TEST_EXT) $(args) + $(run_cmd) ./test_malloc_init_shutdown.$(TEST_EXT) $(args) + $(run_cmd) ./test_malloc_pure_c.$(TEST_EXT) $(args) +# ----------------------------------------------------- + +#------------------------------------------------------ +# End of rules for making the TBBMalloc unit tests +#------------------------------------------------------ + +# Include automatically generated dependencies +-include *.d diff --git a/build/Makefile.tbbproxy b/build/Makefile.tbbproxy new file mode 100644 index 0000000..eb2e0fd --- /dev/null +++ b/build/Makefile.tbbproxy @@ -0,0 +1,109 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# default target +default_tbbproxy: tbbproxy tbbproxy_test + +tbb_root ?= $(TBBROOT) +BUILDING_PHASE=1 +include $(tbb_root)/build/common.inc +DEBUG_SUFFIX=$(findstring _debug,_$(cfg)) + +PROXY_ROOT ?= $(tbb_root)/src/tbbproxy +PROXY_SOURCE_ROOT ?= $(PROXY_ROOT) + +VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test +VPATH += $(PROXY_ROOT) $(PROXY_SOURCE_ROOT) + +CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DLL_NAME=$(TBB.DLL) +CPLUS_FLAGS += $(DEFINE_KEY)__TBB_LST=$(TBB.LST) +CPLUS_FLAGS += $(foreach dir,$(VPATH),$(INCLUDE_KEY)$(dir)) +CPLUS_FLAGS += $(PIC_KEY) $(DSE_KEY) + +include $(tbb_root)/build/common_rules.inc + +#------------------------------------------------------ +# Define rules for making the TBB Proxy static library. +#------------------------------------------------------ + +# Object files that make up TBB Proxy +PROXY_CPLUS.OBJ = tbbproxy.$(OBJ) +PROXY_ASM.OBJ = tbbproxy-asm.$(OBJ) +PROXY.OBJ := $(PROXY_CPLUS.OBJ) $(PROXY_ASM.OBJ) + +# Not using intrinsics prevents undesired dependence on ICL libraries (e.g. libirc). +# Not using default libs prevents link issues caused by different CRT versions in tbbproxy and in an app. +$(PROXY.OBJ): CPLUS_FLAGS += $(DEFINE_KEY)ARCH_$(arch) $(DEFINE_KEY)OS_$(tbb_os) $(NOINTRINSIC_KEY) $(NODEFAULTLIB_KEY) + +$(PROXY_CPLUS.OBJ): CPLUS_FLAGS+=$(if $(filter windows.%cl,$(tbb_os).$(compiler)),/Fdtbbproxy$(DEBUG_SUFFIX).pdb) +$(PROXY_CPLUS.OBJ): %.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(INCLUDES) $< + +$(PROXY.LIB): $(PROXY.OBJ) + $(AR) $(AR_FLAGS) $(AR_OUTPUT_KEY)$@ $^ + +.PRECIOUS : %.$(ASMEXT) +tbbproxy-asm.$(ASMEXT) : tbbproxy-$(tbb_os).$(ASMEXT) $(TBB.LST) $(TBB-OBJECTS.LST) + $(CPLUS) $(PREPROC_ONLY) $< $(INCLUDES) $(CPLUS_FLAGS) $(DEFINE_KEY)__TBB_BUILD=1 > $@ + +.PHONY: tbbproxy +ifeq (windows,$(tbb_os)) +tbbproxy: $(PROXY.LIB) +else +tbbproxy: +endif + +#------------------------------------------------------ +# End of rules for making the TBB Proxy static library +#------------------------------------------------------ + +#------------------------------------------------------ +# Define rules for making the TBB Proxy unit tests +#------------------------------------------------------ + +add_debug=$(basename $(1))_debug$(suffix $(1)) +cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1)) + +PROXY_LIB = $(call cross_suffix,$(PROXY.LIB)) +PROXY_TESTS_SRCS = test_runtime_loader.cpp +PROXY_TESTS_OBJS = $(PROXY_TESTS_SRCS:.cpp=.$(OBJ)) +PROXY_TESTS_EXES = $(PROXY_TESTS_OBJS:.$(OBJ)=.$(TEST_EXT)) + +# Run rules. +.PHONY: tbbproxy_test +ifeq (windows,$(tbb_os)) +tbbproxy_test: $(call cross_suffix,$(PROXY.LIB)) $(TEST_PREREQUISITE) $(PROXY_TESTS_EXES) + $(run_cmd) ./test_runtime_loader.$(TEST_EXT) $(args) +else +tbbproxy_test: +endif + +# Link rules. +$(PROXY_TESTS_EXES): %.$(TEST_EXT): %.$(OBJ) $(PROXY_LIB) + $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(PROXY_LIB) $(LIBS) $(LIBDL) $(LINK_FLAGS) + +# Compilation rules. +$(PROXY_TESTS_OBJS): %.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(OUTPUT_KEY)$@ $< + +#------------------------------------------------------ +# End of rules for making the TBB Proxy unit tests +#------------------------------------------------------ + +# Include automatically generated dependencies +-include *.d diff --git a/build/Makefile.test b/build/Makefile.test new file mode 100644 index 0000000..9de7860 --- /dev/null +++ b/build/Makefile.test @@ -0,0 +1,317 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +#------------------------------------------------------------------------------ +# Define rules for making the TBB tests. +#------------------------------------------------------------------------------ +.PHONY: default test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old clean + +default: test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old + +tbb_root ?= $(TBBROOT) +BUILDING_PHASE=1 +TEST_RESOURCE = $(TBB.RES) +TESTFILE=test +include $(tbb_root)/build/common.inc +DEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg))) + +#------------------------------------------------------------ +# Define static pattern rules dealing with .cpp source files +#------------------------------------------------------------ + +VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/rml/client $(tbb_root)/src/old $(tbb_root)/src/test $(tbb_root)/src/perf +CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1) \ + $(if $(no_exceptions),$(DEFINE_KEY)__TBB_TEST_NO_EXCEPTIONS=1) \ + $(if $(LINK_TBB.LIB),$(DEFINE_KEY)TEST_USES_TBB=1) + +TEST_PREREQUISITE+=$(TBB.LIB) +LINK_FILES+=$(LINK_TBB.LIB) + +ifdef use_proxy + USE_PROXY_FLAG = $(DEFINE_KEY)HARNESS_USE_RUNTIME_LOADER + CPLUS_FLAGS += $(USE_PROXY_FLAG) + LINK_TBB.LIB = $(PROXY.LIB) + LIBS += $(LIBDL) +endif + +TEST_SUFFIXES=secondary compiler_builtins pic +include $(tbb_root)/build/common_rules.inc + +# Rules for the tests, which use TBB in a dynamically loadable library +test_model_plugin.$(TEST_EXT): LINK_TBB.LIB = +test_model_plugin.$(TEST_EXT): CPLUS_FLAGS := $(CPLUS_FLAGS:$(USE_PROXY_FLAG)=) +test_model_plugin.$(TEST_EXT): LIBS += $(LIBDL) +ifneq (,$(DYLIB_KEY)) +test_model_plugin.$(TEST_EXT): test_model_plugin_dll.$(DLL) +endif + +# tbb_misc.$(OBJ) has to be specified here (instead of harness_inject_scheduler.h) because it carries dependency on version_string.ver +SCHEDULER_DEPENDENCIES = $(TBB_ASM.OBJ) tbb_misc.$(OBJ) + +# These executables don't depend on the TBB library, but include core .cpp files directly +SCHEDULER_DIRECTLY_INCLUDED = test_task_leaks.$(TEST_EXT) \ + test_task_assertions.$(TEST_EXT) \ + test_fast_random.$(TEST_EXT) \ + test_global_control_whitebox.$(TEST_EXT) \ + test_concurrent_queue_whitebox.$(TEST_EXT) + +# Necessary to locate version_string.ver referenced from directly included tbb_misc.cpp +INCLUDES += $(INCLUDE_KEY). $(INCLUDE_TEST_HEADERS) + +$(SCHEDULER_DIRECTLY_INCLUDED): CPLUS_FLAGS += $(DSE_KEY) +$(SCHEDULER_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS) +$(SCHEDULER_DIRECTLY_INCLUDED): LIBS += $(LIBDL) +#tbb.lib must not be linked to scheduler white box tests in order to not violate ODR +$(SCHEDULER_DIRECTLY_INCLUDED): LINK_TBB.LIB = +$(SCHEDULER_DIRECTLY_INCLUDED): LINK_FILES += $(SCHEDULER_DEPENDENCIES) +$(SCHEDULER_DIRECTLY_INCLUDED): $(SCHEDULER_DEPENDENCIES) + +# test_tbb_header detects "multiple definition" linker error using the test that covers the whole library +TWICE_LINKED_TESTS = test_tbb_header.$(TEST_EXT) \ + test_concurrent_unordered_set.$(TEST_EXT) + +%_secondary.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_SECONDARY=1 + +# Detecting "multiple definition" linker error using the test that covers the whole library +$(TWICE_LINKED_TESTS): %.$(TEST_EXT): %.$(OBJ) %_secondary.$(OBJ) +$(TWICE_LINKED_TESTS): LINK_FILES+=$(@:.$(TEST_EXT)=_secondary.$(OBJ)) + +# Checks that TBB works correctly in position independent code +%_pic.$(OBJ): CPLUS_FLAGS+=$(PIC_KEY) +%_pic.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_PIC=1 + +# Test of generic gcc port and icc intrinsics port +%_compiler_builtins.$(TEST_EXT): LINK_TBB.LIB = +%_compiler_builtins.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_BUILTINS=1 $(DEFINE_KEY)TBB_USE_ASSERT=0 + +# dynamic_link tests don't depend on the TBB library +test_dynamic_link%.$(TEST_EXT): LINK_TBB.LIB = +test_dynamic_link.$(TEST_EXT): LIBS += $(LIBDL) + +# Resolving issue with the number of sections that an object file can contain +ifneq (,$(BIGOBJ_KEY)) +TEST_BIGOBJ = test_opencl_node.$(TEST_EXT) \ + test_atomic.$(TEST_EXT) \ + test_concurrent_unordered_set.$(TEST_EXT) \ + test_concurrent_unordered_map.$(TEST_EXT) \ + test_join_node_key_matching.$(TEST_EXT) \ + test_join_node_msg_key_matching.$(TEST_EXT) \ + test_join_node.$(TEST_EXT) +$(TEST_BIGOBJ): override CXXFLAGS += $(BIGOBJ_KEY) +endif + +# TODO: remove repetition of .$(TEST_EXT) in the list bellow +# The main list of TBB tests +TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT) \ + test_global_control.$(TEST_EXT) \ + test_tbb_fork.$(TEST_EXT) \ + test_assembly_compiler_builtins.$(TEST_EXT) \ + test_aligned_space.$(TEST_EXT) \ + test_atomic.$(TEST_EXT) \ + test_atomic_pic.$(TEST_EXT) \ + test_atomic_compiler_builtins.$(TEST_EXT) \ + test_blocked_range.$(TEST_EXT) \ + test_blocked_range2d.$(TEST_EXT) \ + test_blocked_range3d.$(TEST_EXT) \ + test_concurrent_queue.$(TEST_EXT) \ + test_concurrent_vector.$(TEST_EXT) \ + test_concurrent_unordered_set.$(TEST_EXT) \ + test_concurrent_unordered_map.$(TEST_EXT) \ + test_concurrent_hash_map.$(TEST_EXT) \ + test_enumerable_thread_specific.$(TEST_EXT) \ + test_handle_perror.$(TEST_EXT) \ + test_halt.$(TEST_EXT) \ + test_model_plugin.$(TEST_EXT) \ + test_mutex.$(TEST_EXT) \ + test_mutex_native_threads.$(TEST_EXT) \ + test_rwm_upgrade_downgrade.$(TEST_EXT) \ + test_cache_aligned_allocator.$(TEST_EXT) \ + test_cache_aligned_allocator_STL.$(TEST_EXT) \ + test_parallel_for.$(TEST_EXT) \ + test_parallel_reduce.$(TEST_EXT) \ + test_parallel_sort.$(TEST_EXT) \ + test_parallel_scan.$(TEST_EXT) \ + test_parallel_while.$(TEST_EXT) \ + test_parallel_do.$(TEST_EXT) \ + test_pipeline.$(TEST_EXT) \ + test_pipeline_with_tbf.$(TEST_EXT) \ + test_parallel_pipeline.$(TEST_EXT) \ + test_lambda.$(TEST_EXT) \ + test_task_scheduler_init.$(TEST_EXT) \ + test_task_scheduler_observer.$(TEST_EXT) \ + test_task.$(TEST_EXT) \ + test_tbb_thread.$(TEST_EXT) \ + test_std_thread.$(TEST_EXT) \ + test_tick_count.$(TEST_EXT) \ + test_inits_loop.$(TEST_EXT) \ + test_yield.$(TEST_EXT) \ + test_eh_tasks.$(TEST_EXT) \ + test_eh_algorithms.$(TEST_EXT) \ + test_eh_flow_graph.$(TEST_EXT) \ + test_parallel_invoke.$(TEST_EXT) \ + test_task_group.$(TEST_EXT) \ + test_ittnotify.$(TEST_EXT) \ + test_parallel_for_each.$(TEST_EXT) \ + test_tbb_header.$(TEST_EXT) \ + test_combinable.$(TEST_EXT) \ + test_task_auto_init.$(TEST_EXT) \ + test_task_arena.$(TEST_EXT) \ + test_concurrent_monitor.$(TEST_EXT) \ + test_semaphore.$(TEST_EXT) \ + test_critical_section.$(TEST_EXT) \ + test_reader_writer_lock.$(TEST_EXT) \ + test_tbb_condition_variable.$(TEST_EXT) \ + test_intrusive_list.$(TEST_EXT) \ + test_concurrent_priority_queue.$(TEST_EXT) \ + test_task_priority.$(TEST_EXT) \ + test_task_enqueue.$(TEST_EXT) \ + test_task_steal_limit.$(TEST_EXT) \ + test_hw_concurrency.$(TEST_EXT) \ + test_fp.$(TEST_EXT) \ + test_tuple.$(TEST_EXT) \ + test_flow_graph.$(TEST_EXT) \ + test_broadcast_node.$(TEST_EXT) \ + test_continue_node.$(TEST_EXT) \ + test_function_node.$(TEST_EXT) \ + test_limiter_node.$(TEST_EXT) \ + test_join_node.$(TEST_EXT) \ + test_join_node_key_matching.$(TEST_EXT) \ + test_join_node_msg_key_matching.$(TEST_EXT) \ + test_buffer_node.$(TEST_EXT) \ + test_queue_node.$(TEST_EXT) \ + test_priority_queue_node.$(TEST_EXT) \ + test_sequencer_node.$(TEST_EXT) \ + test_source_node.$(TEST_EXT) \ + test_overwrite_node.$(TEST_EXT) \ + test_write_once_node.$(TEST_EXT) \ + test_indexer_node.$(TEST_EXT) \ + test_multifunction_node.$(TEST_EXT) \ + test_split_node.$(TEST_EXT) \ + test_static_assert.$(TEST_EXT) \ + test_aggregator.$(TEST_EXT) \ + test_concurrent_lru_cache.$(TEST_EXT) \ + test_examples_common_utility.$(TEST_EXT) \ + test_dynamic_link.$(TEST_EXT) \ + test_parallel_for_vectorization.$(TEST_EXT) \ + test_tagged_msg.$(TEST_EXT) \ + test_partitioner_whitebox.$(TEST_EXT) \ + test_flow_graph_whitebox.$(TEST_EXT) \ + test_composite_node.$(TEST_EXT) \ + test_async_node.$(TEST_EXT) \ + test_async_msg.$(TEST_EXT) \ + test_tbb_version.$(TEST_EXT) # insert new files right above + +# These tests depend on other technologies +TEST_TBB_SPECIAL.EXE = test_openmp.$(TEST_EXT) \ + test_cilk_interop.$(TEST_EXT) \ + test_gfx_factory.$(TEST_EXT) \ + test_opencl_node.$(TEST_EXT) + +# skip mode_plugin for now +skip_tests += test_model_plugin + +ifdef OPENMP_FLAG +test_openmp.$(TEST_EXT): CPLUS_FLAGS += $(OPENMP_FLAG) + +test_tbb_openmp: $(TEST_PREREQUISITE) test_openmp.$(TEST_EXT) + $(run_cmd) ./test_openmp.$(TEST_EXT) 1:4 +else +test_tbb_openmp: + @echo "OpenMP is not available" +endif + +ifdef CILK_AVAILABLE +# Workaround on cilkrts linkage known issue (see Intel(R) C++ Composer XE 2011 Release Notes) +# The issue reveals itself if a version of binutils is prior to 2.17 +ifeq (linux_icc,$(tbb_os)_$(compiler)) +test_cilk_interop.$(TEST_EXT): LIBS += -lcilkrts +test_gfx_factory.$(TEST_EXT): LIBS += -lcilkrts +endif +test_tbb_cilk: test_cilk_interop.$(TEST_EXT) + $(run_cmd) ./test_cilk_interop.$(TEST_EXT) $(args) +else +test_tbb_cilk: + @echo "Intel(R) Cilk(TM) Plus is not available" +endif + +test_opencl_node.$(TEST_EXT): LIBS += $(OPENCL.LIB) + +$(TEST_TBB_PLAIN.EXE) $(TEST_TBB_SPECIAL.EXE): WARNING_KEY += $(TEST_WARNING_KEY) + +# Run tests that are in SCHEDULER_DIRECTLY_INCLUDED and TEST_TBB_PLAIN.EXE but not in skip_tests (which is specified by user) +TESTS_TO_RUN := $(filter-out $(addsuffix .$(TEST_EXT),$(skip_tests)),$(TEST_TBB_PLAIN.EXE) $(SCHEDULER_DIRECTLY_INCLUDED)) + +# This definition intentionally consists of two blank lines +define eol + + +endef + +# First build the targets, then run them +# Form a list of commands separated with end of line +# Note that usually run_cmd is empty, and tests run directly + +test_tbb_plain: $(TEST_PREREQUISITE) $(TESTS_TO_RUN) + $(foreach test, $(TESTS_TO_RUN), $(run_cmd) ./$(test) $(args) $(eol)) + + +# For deprecated files, we don't mind warnings etc., thus compilation rules are most relaxed +CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)__TBB_TEST_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) $(INCLUDE_KEY)$(tbb_root)/src/test +TEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ) test_task_scheduler_observer_v3.$(OBJ) + +$(TEST_TBB_OLD.OBJ): CPLUS_FLAGS := $(CPLUS_FLAGS_DEPRECATED) + +TEST_TBB_OLD.EXE = $(subst .$(OBJ),.$(TEST_EXT),$(TEST_TBB_OLD.OBJ)) + +ifeq (,$(NO_LEGACY_TESTS)) +test_tbb_old: $(TEST_PREREQUISITE) $(TEST_TBB_OLD.EXE) + $(run_cmd) ./test_concurrent_vector_v2.$(TEST_EXT) $(args) 1:4 + $(run_cmd) ./test_concurrent_queue_v2.$(TEST_EXT) $(args) 1:4 + $(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 1 + $(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 2 + $(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 4 + $(run_cmd) ./test_task_scheduler_observer_v3.$(TEST_EXT) $(args) 1:4 +else +test_tbb_old: + @echo Legacy tests skipped +endif + +ifneq (,$(codecov)) +codecov_gen: + profmerge + codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt +endif + +time_%: time_%.$(TEST_EXT) $(TEST_PREREQUISITE) + $(run_cmd) ./$< $(args) + + +# for some reason, "perf_%.$(TEST_EXT): perf_dll.$(DLL)" does not work TODO: find out how to apply pattern here +perf_sched.$(TEST_EXT): perf_dll.$(DLL) +perf_%.$(TEST_EXT): TEST_LIBS = perf_dll.$(LIBEXT) +perf_%: perf_%.$(TEST_EXT) $(TEST_PREREQUISITE) + $(run_cmd) ./$< $(args) + +clean_%: + $(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d *.ver + +clean: + $(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9] *.ver + +# Include automatically generated dependencies +-include *.d diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc new file mode 100644 index 0000000..d487015 --- /dev/null +++ b/build/SunOS.gcc.inc @@ -0,0 +1,92 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor +DYLIB_KEY = -shared +LIBDL = -ldl + +CPLUS = g++ +CONLY = gcc +LIB_LINK_FLAGS = -shared +LIBS = -lpthread -lrt -ldl +C_FLAGS = $(CPLUS_FLAGS) -x c + +ifeq ($(cfg), release) + CPLUS_FLAGS = -g -O2 -DUSE_PTHREAD +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD +endif + +ASM= +ASM_FLAGS= + +TBB_ASM.OBJ= + +ifeq (ia64,$(arch)) +# Position-independent code (PIC) is a must for IA-64 + CPLUS_FLAGS += $(PIC_KEY) +endif + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify) +ifeq (sparc,$(arch)) + CPLUS_FLAGS += -mcpu=v9 -m64 + LIB_LINK_FLAGS += -mcpu=v9 -m64 +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASSEMBLY_SOURCE=$(arch)-gas +ifeq (ia64,$(arch)) + ASM=ias + TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o +endif +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/SunOS.inc b/build/SunOS.inc new file mode 100644 index 0000000..447e059 --- /dev/null +++ b/build/SunOS.inc @@ -0,0 +1,83 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +ifndef arch + arch:=$(shell uname -p) + ifeq ($(arch),i386) + ifeq ($(shell isainfo -b),64) + arch:=intel64 + else + arch:=ia32 + endif + endif + export arch +# For non-IA systems running Sun OS, 'arch' will contain whatever is printed by uname -p. +# In particular, for SPARC architecture it will contain "sparc". +endif + +ifndef runtime + gcc_version:=$(shell gcc -dumpversion) + os_version:=$(shell uname -r) + os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//') + export runtime:=cc$(gcc_version)_kernel$(os_kernel_version) +endif + +ifeq ($(arch),sparc) + native_compiler := gcc + export compiler ?= gcc +else + native_compiler := suncc + export compiler ?= suncc +endif +# debugger ?= gdb + +CMD=$(SHELL) -c +CWD=$(shell pwd) +RM?=rm -f +RD?=rmdir +MD?=mkdir -p +NUL= /dev/null +SLASH=/ +MAKE_VERSIONS=bash $(tbb_root)/build/version_info_sunos.sh $(VERSION_FLAGS) >version_string.ver +MAKE_TBBVARS=bash $(tbb_root)/build/generate_tbbvars.sh + +ifdef LD_LIBRARY_PATH + export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH) +else + export LD_LIBRARY_PATH := . +endif + +####### Build settings ######################################################## + +OBJ = o +DLL = so +LIBEXT=so + +TBB.LST = +TBB.DEF = +TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = $(TBB.DLL) +LINK_TBB.LIB = $(TBB.LIB) + +MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL) +MALLOC.LIB = $(MALLOC.DLL) +LINK_MALLOC.LIB = $(MALLOC.LIB) + +MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL) + +TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs) diff --git a/build/SunOS.suncc.inc b/build/SunOS.suncc.inc new file mode 100644 index 0000000..a99e86b --- /dev/null +++ b/build/SunOS.suncc.inc @@ -0,0 +1,92 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -xMMD -errtags +PREPROC_ONLY = -E -xMMD +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -KPIC +DYLIB_KEY = -G +LIBDL = -ldl +# WARNING_AS_ERROR_KEY = -errwarn=%all +WARNING_AS_ERROR_KEY = Warning as error +# Supported Solaris Studio* 12.2 and above, remove ',inlasmpnu' in the line below to build by compiler prior Solaris Studio* 12.2 +WARNING_SUPPRESS = -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem,inlasmpnu +tbb_strict=0 + +CPLUS = CC +CONLY = cc + +OPENMP_FLAG = -xopenmp +LIB_LINK_FLAGS = -G -R . -M$(tbb_root)/build/suncc.map.pause +LINK_FLAGS += -M$(tbb_root)/build/suncc.map.pause +LIBS = -lpthread -lrt -R . +C_FLAGS = $(CPLUS_FLAGS) + +#TODO: the $(stdlib) instead of hard-wiring STLPort +ifeq ($(cfg), release) + CPLUS_FLAGS = -mt -xO2 -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS) +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -mt -DTBB_USE_DEBUG -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS) +endif + +ASM= +ASM_FLAGS= + +TBB_ASM.OBJ= + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 + ASM_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +# TODO: verify whether -m64 implies V9 on relevant Sun Studio versions +# (those that handle gcc assembler syntax) +ifeq (sparc,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +export TBB_CUSTOM_VARS_SH=export CXXFLAGS="-I$${TBBROOT}/include -library=stlport4 $(CXXFLAGS) -M$${TBBROOT}/build/suncc.map.pause" +export TBB_CUSTOM_VARS_CSH=setenv CXXFLAGS "-I$${TBBROOT}/include -library=stlport4 $(CXXFLAGS) -M$${TBBROOT}/build/suncc.map.pause" + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASSEMBLY_SOURCE=$(arch)-fbe +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ +M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT) +M_CPLUS_FLAGS = $(CPLUS_FLAGS) +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/android.clang.inc b/build/android.clang.inc new file mode 100644 index 0000000..a935968 --- /dev/null +++ b/build/android.clang.inc @@ -0,0 +1,118 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +SDL_FLAGS = -fPIE -fPIC -fstack-protector -Wformat -Wformat-security +TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra + +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +LIBDL = -ldl + +CPLUS = $(TARGET_CXX) +CONLY = $(TARGET_CC) + +# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now + +# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly +PIE_FLAG = -pie +ifeq ($(APP_PIE), false) + PIE_FLAG= +endif + +LINK_FLAGS = -Wl,-rpath-link=. -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + SDL_FLAGS += -D_FORTIFY_SOURCE=2 + CPLUS_FLAGS = -O2 +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG +endif + +CPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H + +ifneq (,$(findstring $(arch),ia32 intel64)) + CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY +endif + +ifeq (0, $(dynamic_load)) + CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0 +endif + +# Paths to the NDK prebuilt tools and libraries +CPLUS_FLAGS += --sysroot=$(SYSROOT) +LIB_LINK_FLAGS += --sysroot=$(SYSROOT) +LIBS = -L$(CPLUS_LIB_PATH) -lc++_shared +ifeq (,$(findstring $(ndk_version),$(foreach v, 7 8 9 10 11,r$(v) r$(v)b r$(v)c r$(v)d r$(v)e))) + LIBS += -lc++abi + ifeq (arm,$(arch)) + LIBS += -lunwind + endif +endif + +ifeq (arm,$(arch)) + CPLUS_FLAGS += $(DEFINE_KEY)__TBB_64BIT_ATOMICS=0 +endif + +CPLUS_FLAGS += $(TARGET_CFLAGS) +LIB_LINK_FLAGS += $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -L$(CPLUS_LIB_PATH) + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ASM = $(tbb_tool_prefix)as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/android.gcc.inc b/build/android.gcc.inc new file mode 100644 index 0000000..973ca3f --- /dev/null +++ b/build/android.gcc.inc @@ -0,0 +1,117 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra + +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +LIBDL = -ldl + +CPLUS = $(tbb_tool_prefix)g++ +CONLY = $(tbb_tool_prefix)gcc + +# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) + +# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly +PIE_FLAG = -pie +ifeq ($(APP_PIE), false) + PIE_FLAG= +endif + +LINK_FLAGS = -Wl,-rpath-link=. -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + CPLUS_FLAGS = -O2 +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG +endif + +CPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H + +ifneq (,$(findstring $(arch),ia32 intel64)) + CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY +endif + +ifeq (0, $(dynamic_load)) + CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0 +endif + + +# Paths to the NDK prebuilt tools and libraries +CPLUS_FLAGS += --sysroot=$(SYSROOT) +LIB_LINK_FLAGS += --sysroot=$(SYSROOT) +LIBS = -L$(CPLUS_LIB_PATH) -lgnustl_shared + +ifeq (ia32,$(arch)) + # TODO: Determine best setting of -march and add to CPLUS_FLAGS + CPLUS_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +else ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +else ifeq (arm,$(arch)) + CPLUS_FLAGS += -march=armv7-a $(DEFINE_KEY)TBB_USE_GCC_BUILTINS=1 $(DEFINE_KEY)__TBB_64BIT_ATOMICS=0 +else ifeq (arm64,$(arch)) + CPLUS_FLAGS += -march=armv8-a +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ASM = $(tbb_tool_prefix)as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/android.icc.inc b/build/android.icc.inc new file mode 100644 index 0000000..64da9fd --- /dev/null +++ b/build/android.icc.inc @@ -0,0 +1,120 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = +TEST_WARNING_KEY = -Wshadow -Woverloaded-virtual -Wextra + +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +LIBDL = -ldl + +CPLUS = icpc +CONLY = icc + +# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) + +# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly +PIE_FLAG = -pie +ifeq ($(APP_PIE), false) + PIE_FLAG= +endif + +LINK_FLAGS = -Wl,-rpath-link=. -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + CPLUS_FLAGS = -O2 +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG +endif + +CPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H + +ifneq (,$(findstring $(arch),ia32 intel64)) + CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY +endif + +ifeq (0, $(dynamic_load)) + CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0 +endif + + +# Paths to the NDK prebuilt tools and libraries +CPLUS_FLAGS += --sysroot=$(SYSROOT) +LIB_LINK_FLAGS += --sysroot=$(SYSROOT) +# the -static-intel flag is to remove the need to copy Intel-specific libs to the device. +LIBS = -L$(CPLUS_LIB_PATH) -lgnustl_shared -static-intel + +ifeq (ia32,$(arch)) + # TODO: Determine best setting of -march and add to CPLUS_FLAGS + CPLUS_FLAGS += -m32 -march=pentium4 -falign-stack=maintain-16-byte + LIB_LINK_FLAGS += -m32 +else + ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 + endif +endif + +ifeq (arm,$(findstring arm,$(arch))) + $(error "Unsupported architecture $(arch) for icc compiler") +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ASM = $(tbb_tool_prefix)as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/android.inc b/build/android.inc new file mode 100644 index 0000000..aeeb68c --- /dev/null +++ b/build/android.inc @@ -0,0 +1,63 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# +# Extra gmake command-line parameters for use with Android: +# +# dlopen_workaround: Some OS versions need workaround for dlopen to avoid recursive calls. +# + +####### Detections and Commands ############################################### + +ifeq (android,$(findstring android,$(tbb_os))) + $(error TBB only supports cross-compilation for Android. Specify "target=android" instead.) +endif + +ifndef BUILDING_PHASE + ifneq ("command line","$(origin arch)") + ifeq (icc,$(compiler)) + export COMPILER_VERSION := ICC: $(shell icc -V &1 | grep 'Version') + ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION))) + export arch:=ia32 + else ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION))) + export arch:=intel64 + else + $(error "No support for Android in $(COMPILER_VERSION)") + endif + + else + ifdef ANDROID_SERIAL + uname_m:=$(shell adb shell uname -m) + ifeq (i686,$(uname_m)) + export arch:=ia32 + else + export arch:=$(uname_m) + endif + endif + endif + endif +endif + +ifeq ("$(arch)","") + $(error "No target architecture specified and \'ANDROID_SERIAL\' environment variable specifying target device not set") +endif + +# Android platform only supported from TBB 4.1 forward +NO_LEGACY_TESTS = 1 + + diff --git a/build/android.linux.inc b/build/android.linux.inc new file mode 100644 index 0000000..7d02243 --- /dev/null +++ b/build/android.linux.inc @@ -0,0 +1,67 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +####### Detections and Commands ############################################### + +# Must set def_prefix according to target architecture detected above +ifeq (ia32,$(arch)) + def_prefix = lin32 +endif +ifeq (arm,$(findstring arm,$(arch))) + def_prefix = lin32 +endif +ifeq (64,$(findstring 64,$(arch))) + def_prefix = lin64 +endif + +ifdef ndk_version + $(warning "NDK version $(ndk_version)") +else + $(warning "NDK version not set in environment, using \'unknown\' instead.") + ndk_version:=unknown +endif + +export runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version) + +AR = $(tbb_tool_prefix)ar +MAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver + +####### Build settings ######################################################## + +# No SONAME_SUFFIX for Android allowed in library names +TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst +TBB.DEF = $(TBB.LST:.lst=.def) +TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = $(TBB.DLL) +TBB_NO_VERSION.DLL= +LINK_TBB.LIB = $(TBB.LIB) + +MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def +MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL) +MALLOC.LIB = $(MALLOC.DLL) +MALLOC_NO_VERSION.DLL= +LINK_MALLOC.LIB = $(MALLOC.LIB) + +MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def +MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL) +MALLOCPROXY_NO_VERSION.DLL= +MALLOCPROXY.LIB = $(MALLOCPROXY.DLL) +LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB) + +TEST_LAUNCHER= +run_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs) diff --git a/build/android.linux.launcher.sh b/build/android.linux.launcher.sh new file mode 100644 index 0000000..b3cf876 --- /dev/null +++ b/build/android.linux.launcher.sh @@ -0,0 +1,148 @@ +#!/bin/sh +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Usage: +# android.linux.launcher.sh [-v] [-q] [-s] [-r ] [-u] [-l ] +# where: -v enables verbose output +# where: -q enables quiet mode +# where: -s runs the test in stress mode (until non-zero exit code or ctrl-c pressed) +# where: -r specifies number of times to repeat execution +# where: -u is ignored on Android +# where: -l specifies the library name to be assigned to LD_PRELOAD +# +# Libs and executable necessary for testing should be present in the current directory before running. +# ANDROID_SERIAL must be set to the connected Android target device name for file transfer and test runs. +# ANDROID_TEST_DIRECTORY may be set to the directory used for testing on the Android target device; otherwise, +# the default directory used is "/data/local/tmp/$(basename $PWD)". +# Note: Do not remove the redirections to '/dev/null' in the script, otherwise the nightly test system will fail. + +do_cleanup() # +{ # + adb pull $targetdir/events.txt events.txt > /dev/null 2>&1 # + # Remove target directory on the device + adb shell "rm -r ${targetdir}; mkdir -p ${targetdir}" > /dev/null 2>&1 # +} # +do_trap_cleanup() # +{ # + do_cleanup # + exit -1 # +} # +while getopts "qvsr:ul:" flag # +do case $flag in # + s ) # Stress testing mode + echo Doing stress testing. Press Ctrl-C to terminate + run_env='stressed() { while $*; do :; done; }; ' # + run_prefix="stressed $run_prefix" ;; # + r ) # Repeats test n times + run_env="repeated() { for i in $(seq -s ' ' 1 $OPTARG) ; do echo \$i of $OPTARG:; \$*; done; }; " # + run_prefix="repeated $run_prefix" ;; # + l ) # Additional library + ldpreload="$OPTARG " ;; # + u ) # Stack limit + ;; # + q ) # Quiet mode, removes 'done' but prepends any other output by test name + OUTPUT='2>&1 | sed -e "s/done//;/^[[:space:]]*$/d;s!^!$exename: !"' ;; # + v ) # Verbose mode + SUPPRESS='' # + verbose=1 ;; # +esac done # +shift `expr $OPTIND - 1` # +[ -z "$OUTPUT" ] && OUTPUT='| sed -e "s/\\r$//"' # +[ $verbose ] || SUPPRESS='>/dev/null' # +# Collect the executable name +exename=$(basename $1) # +shift # +# Prepare the target directory on the device +currentdir=$(basename $PWD) # +targetdir=${ANDROID_TEST_DIRECTORY:-/data/local/tmp/$currentdir} # +do_cleanup # +trap do_trap_cleanup INT # if someone hits control-c, cleanup the device +# Collect the list of files to transfer to the target device, starting with executable itself. +fnamelist="$exename" # +# Add the C++ standard library from the NDK, which is required for all tests on Android. +if [ ! -z "${LIB_STL_ANDROID}" ]; then # + fnamelist="$fnamelist ${LIB_STL_ANDROID}" # +else # + fnamelist="$fnamelist libc++_shared.so" # +fi # +# Find the TBB libraries and add them to the list. +# Add TBB libraries from the current directory that contains libtbb* files +files="$(ls libtbb* 2> /dev/null)" # +[ -z "$files" ] || fnamelist="$fnamelist $files" # +# Add any libraries built for specific tests. +exeroot=${exename%\.*} # +files="$(ls ${exeroot}*.so ${exeroot}*.so.* 2> /dev/null)" # +[ -z "$files" ] || fnamelist="$fnamelist $files" # +# TODO: Add extra libraries from the Intel(R) Compiler for certain tests +# found=$(echo $exename | egrep 'test_malloc_atexit\|test_malloc_lib_unload' 2> /dev/null) +# if [ ! -z $found ] ; then +# fnamelist="$fnamelist ${compiler_path_lib}/libimf.so \ +# ${compiler_path_lib}/libsvml.so \ +# ${compiler_path_lib}/libintlc.so.5" +# fi + +# Transfer collected executable and library files to the target device. +transfers_ok=1 # +for fullname in $fnamelist; do { # + if [ -r $fullname ]; then { # + # Transfer the executable and libraries to top-level target directory + [ $verbose ] && echo -n "Pushing $fullname: " # + eval "adb push $fullname ${targetdir}/$(basename $fullname) $SUPPRESS 2>&1" # + }; else { # + echo "Error: required file ${currentdir}/${fullname} for test $exename not available for transfer." # + transfers_ok=0 # + }; fi # +}; done # +if [ "${transfers_ok}" = "0" ]; then { # + do_cleanup # + exit -1 # +}; fi # +# Transfer input files used by example codes by scanning the executable argument list. +for fullname in "$@"; do { # + if [ -r $fullname ]; then { # + directory=$(dirname $fullname) # + filename=$(basename $fullname) # + # strip leading "." from fullname if present + if [ "$directory" = "\." ]; then { # + directory="" # + fullname=$filename # + }; fi # + # Create the target directory to hold input file if necessary + if [ ! -z $directory ]; then { # + eval "adb shell 'mkdir $directory' $SUPPRESS 2>&1" # + }; fi # + # Transfer the input file to corresponding directory on target device + [ $verbose ] && echo -n "Pushing $fullname: " # + eval "adb push $fullname ${targetdir}/$fullname $SUPPRESS 2>&1" # + }; fi # +}; done # +# Set LD_PRELOAD if necessary +[ -z "$ldpreload" ] || run_prefix="LD_PRELOAD='$ldpreload' $run_prefix" # +[ $verbose ] && echo Running $run_prefix ./$exename $* # +run_env="$run_env cd $targetdir; export LD_LIBRARY_PATH=." # +[ -z "$VIRTUAL_MACHINE" ] || run_env="$run_env; export VIRTUAL_MACHINE=$VIRTUAL_MACHINE" # +# The return_code file is the best way found to return the status of the test execution when using adb shell. +eval 'adb shell "$run_env; $run_prefix ./$exename $* || echo -n \$? >error_code"' "${OUTPUT}" # +# Capture the return code string and remove the trailing \r from the return_code file contents +err=`adb shell "cat $targetdir/error_code 2>/dev/null"` # +[ -z $err ] || echo $exename: exited with error $err # +do_cleanup # +# Return the exit code of the test. +exit $err # diff --git a/build/android.macos.inc b/build/android.macos.inc new file mode 100644 index 0000000..bf84578 --- /dev/null +++ b/build/android.macos.inc @@ -0,0 +1,76 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +####### Detections and Commands ############################################### + +# Must set def_prefix according to target architecture detected above +ifeq (ia32,$(arch)) + def_prefix = lin32 +endif +ifeq (arm,$(findstring arm,$(arch))) + def_prefix = lin32 +endif +ifeq (64,$(findstring 64,$(arch))) + def_prefix = lin64 +endif + +ifdef ndk_version + $(warning "NDK version $(ndk_version)") +else + $(warning "NDK version not set in environment, using \'unknown\' instead.") + ndk_version:=unknown +endif + +export runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version) + +AR = $(tbb_tool_prefix)ar +MAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver + +####### Build settings ######################################################## + +# No SONAME_SUFFIX for Android allowed in library names +TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst +TBB.DEF = $(TBB.LST:.lst=.def) +TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = $(TBB.DLL) +TBB_NO_VERSION.DLL= +LINK_TBB.LIB = $(TBB.LIB) + +MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def +MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL) +MALLOC.LIB = $(MALLOC.DLL) +MALLOC_NO_VERSION.DLL= +LINK_MALLOC.LIB = $(MALLOC.LIB) + +MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def +MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL) +MALLOCPROXY_NO_VERSION.DLL= +MALLOCPROXY.LIB = $(MALLOCPROXY.DLL) +LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB) + +TBB.RES = +MALLOC.RES = +RML.RES = +TBB.MANIFEST = +MALLOC.MANIFEST = +RML.MANIFEST = +OBJ = o +DLL = so + +TEST_LAUNCHER= +run_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs) diff --git a/build/android.windows.inc b/build/android.windows.inc new file mode 100644 index 0000000..f58e5d5 --- /dev/null +++ b/build/android.windows.inc @@ -0,0 +1,78 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +####### Detections and Commands ############################################### + +# Must set def_prefix according to target architecture detected above +ifeq (ia32,$(arch)) + def_prefix = lin32 +endif +ifeq (arm,$(findstring arm,$(arch))) + def_prefix = lin32 +endif +ifeq (64,$(findstring 64,$(arch))) + def_prefix = lin64 +endif + +ifdef ndk_version + $(warning "NDK version $(ndk_version)") +else + $(warning "NDK version not set in environment, using \'unknown\' instead.") + ndk_version:=unknown +endif + +export runtime:=$(target)_NDK$(ndk_version)_version_$(target_os_version) + +AR = $(tbb_tool_prefix)ar +MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(CONLY) $(arch) $(subst \,/,"$(VERSION_FLAGS)") > version_string.ver + +####### Build settings ######################################################## + +# No SONAME_SUFFIX for Android allowed in library names +TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst +TBB.DEF = $(TBB.LST:.lst=.def) +TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = $(TBB.DLL) +TBB_NO_VERSION.DLL= +LINK_TBB.LIB = $(TBB.LIB) + +MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def +MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL) +MALLOC.LIB = $(MALLOC.DLL) +MALLOC_NO_VERSION.DLL= +LINK_MALLOC.LIB = $(MALLOC.LIB) + +MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def +MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL) +MALLOCPROXY_NO_VERSION.DLL= +MALLOCPROXY.LIB = $(MALLOCPROXY.DLL) + +TBB.RES = +MALLOC.RES = +RML.RES = +TBB.MANIFEST = +MALLOC.MANIFEST = +RML.MANIFEST = +OBJ = o +DLL = so + +TEST_LAUNCHER= +run_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs) +export UNIXMODE = 1 +# Clang for Android* uses the INCLUDE variable (instead of CPATH) +export USE_INCLUDE_ENV = 1 diff --git a/build/big_iron.inc b/build/big_iron.inc new file mode 100644 index 0000000..efed212 --- /dev/null +++ b/build/big_iron.inc @@ -0,0 +1,76 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +#------------------------------------------------------------------------------ +# Defines settings for building the TBB run-time as a static library. +# Use these only on platforms where dynamic linking is impractical. +# +# IF YOU USE TBB AS A STATIC LIBRARY, YOU MUST GUARANTEE THAT ONLY ONE COPY OF +# THE TBB RUN-TIME IS LINKED INTO AN APPLICATION! LINKING IN MULTIPLE COPIES +# OF THE TBB RUN-TIME, DIRECTLY OR INDIRECTLY, MAY CAUSE PROGRAM FAILURE! +#------------------------------------------------------------------------------ + +# Note that ITT_NOTIFY allows to selectively remove the definition of +# DO_ITT_NOTIFY without sabotaging deferred expansion of CPLUS_FLAGS. +# TODO: currently only in linux.{gcc,xl}.inc + +# Note that -pthread with xl gives "1501-210 (W) command option t contains an incorrect subargument"; +# multithreading is instead achieved by using the _r affix in the compiler name. +# TODO: is -lpthread still relevant/needed with XL and _r affix? + +# Note that usage of dynamic (shared) libraries is disabled +# (via -D__TBB_DYNAMIC_LOAD_ENABLED=0 and LIBDL emptied) primarily for performance. + +# OS specific settings => + LIB_LINK_CMD = ar rcs + LIB_LINK_FLAGS = + LIB_LINK_LIBS = + LIB_OUTPUT_KEY = + DYLIB_KEY = + ifeq ($(tbb_os),linux) + ifeq ($(compiler),clang) + LIBS = -pthread -lrt + endif + ifeq ($(compiler),gcc) + LIBS = -pthread -lrt + endif + ifeq ($(compiler),xl) + LIBS = -lpthread -lrt + endif + LINK_FLAGS = + endif + override CXXFLAGS += -D__TBB_DYNAMIC_LOAD_ENABLED=0 -D__TBB_SOURCE_DIRECTLY_INCLUDED=1 + ITT_NOTIFY = + DLL = a + LIBEXT = a + LIBPREF = lib + LIBDL = +# <= OS specific settings + +TBB.DLL = $(LIBPREF)tbb$(DEBUG_SUFFIX).$(LIBEXT) +LINK_TBB.LIB = $(TBB.DLL) +TBB.LST = +TBB.DEF = +TBB_NO_VERSION.DLL = + +MALLOC.DLL = $(LIBPREF)tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT) +LINK_MALLOC.LIB = $(MALLOC.DLL) +MALLOC.DEF = +MALLOC_NO_VERSION.DLL = +MALLOCPROXY.DLL = +MALLOCPROXY.DEF = diff --git a/build/codecov.txt b/build/codecov.txt new file mode 100644 index 0000000..e22f805 --- /dev/null +++ b/build/codecov.txt @@ -0,0 +1,7 @@ +src/tbb +src/tbbmalloc +include/tbb +src/rml/server +src/rml/client +src/rml/include +source/malloc diff --git a/build/common.inc b/build/common.inc new file mode 100644 index 0000000..b2c20de --- /dev/null +++ b/build/common.inc @@ -0,0 +1,166 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +ifndef tbb_os + + # Windows sets environment variable OS; for other systems, ask uname + ifeq ($(OS),) + OS:=$(shell uname) + ifeq ($(OS),) + $(error "Cannot detect operating system") + endif + export tbb_os=$(OS) + endif + + ifeq ($(OS), Windows_NT) + export tbb_os=windows + endif + ifeq ($(OS), Linux) + export tbb_os=linux + endif + ifeq ($(OS), Darwin) + export tbb_os=macos + endif + +endif # !tbb_os + +ifeq (1,$(tbb_cpf)) + export CPF_SUFFIX ?=_preview +endif + +ifeq (0,$(exceptions)) +# Inverse the value, for simplicity of use + export no_exceptions=1 +endif + +ifdef cpp0x + $(warning "Warning: deprecated cpp0x=$(cpp0x) is used, stdver must be used instead. Building in stdver=c++0x mode.") + export stdver?=c++0x + override cpp0x= +endif + +ifneq (,$(stdver)) + ifeq (,$(findstring ++, $(stdver))) + $(warning "Warning: unexpected stdver=$(stdver) is used.") + endif + CXX_STD_FLAGS=-std=$(stdver) +endif + +# The requested option is added unconditionally. +# If it is not supported, a compiler warning or error is expected. +# Note that CXX_STD_FLAGS can be changed in ..inc. +CXX_ONLY_FLAGS+=$(CXX_STD_FLAGS) + +ifeq (,$(wildcard $(tbb_root)/build/$(tbb_os).inc)) + $(error "$(tbb_os)" is not supported. Add build/$(tbb_os).inc file with os-specific settings ) +endif + +# detect arch and runtime versions, provide common host-specific definitions +include $(tbb_root)/build/$(tbb_os).inc + +ifeq ($(arch),) + $(error Architecture not detected) +endif +ifeq ($(runtime),) + $(error Runtime version not detected) +endif + +# process target-dependent compilation and testing configurations +ifdef target + # optionally process target-dependent options for compilation and testing + ifneq (,$(wildcard $(tbb_root)/build/$(target).inc)) + include $(tbb_root)/build/$(target).inc + endif + + # optionally process host-dependent environment for target-dependent compilation and testing + ifneq (,$(wildcard $(tbb_root)/build/$(target).$(tbb_os).inc)) + include $(tbb_root)/build/$(target).$(tbb_os).inc + endif + + # insure at least one target-dependent configuration file was found for compilation and testing + ifeq (,$(wildcard $(tbb_root)/build/$(target).inc)$(wildcard $(tbb_root)/build/$(target).$(tbb_os).inc)) + $(error "$(target)" is not supported. Add build/$(target).inc or build/$(target).$(tbb_os).inc file) + endif +endif #target + +# Support for running debug tests to release library and vice versa +flip_cfg=$(subst _flipcfg,_release,$(subst _release,_debug,$(subst _debug,_flipcfg,$(1)))) +cross_cfg = $(if $(crosstest),$(call flip_cfg,$(1)),$(1)) +# Setting default configuration to release +cfg?=release + +compiler_name=$(notdir $(compiler)) +ifdef BUILDING_PHASE + ifndef target + target:=$(tbb_os) + endif + # process host/target compiler-dependent build configuration + ifeq (,$(wildcard $(tbb_root)/build/$(target).$(compiler_name).inc)) + $(error "$(compiler_name)" is not supported on $(target). Add build/$(target).$(compiler_name).inc file with compiler-specific settings. ) + endif + include $(tbb_root)/build/$(target).$(compiler_name).inc +endif + +ifneq ($(BUILDING_PHASE),1) + # definitions for top-level Makefiles + origin_build_dir:=$(origin tbb_build_dir) + tbb_build_dir?=$(tbb_root)$(SLASH)build + export tbb_build_prefix?=$(tbb_os)_$(arch)_$(compiler_name)_$(runtime)$(CPF_SUFFIX) + work_dir=$(tbb_build_dir)$(SLASH)$(tbb_build_prefix) +endif # BUILDING_PHASE != 1 + +ifdef offload + extra_inc=$(offload).offload.inc +endif +ifdef extra_inc + ifneq (,$(wildcard $(tbb_root)/build/$(extra_inc))) + include $(tbb_root)/build/$(extra_inc) + else + $(error specified build file: "build/$(extra_inc)" is not found. ) + endif +endif + +ifndef BUILDING_PHASE + work_dir:=$(work_dir) + # assign new value for tbb_root if path is not absolute (the filter keeps only /* paths) + ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),) + full_tbb_root:=$(CURDIR)/$(tbb_root) + ifeq ($(origin_build_dir),undefined) + #relative path are needed here as a workaround to support whitespaces in path + override tbb_root:=../.. + else + override tbb_root:=$(full_tbb_root) + endif + export tbb_root + endif + endif # !BUILDING_PHASE + +.DELETE_ON_ERROR: # Make will delete target if error occurred when building it. + +# MAKEOVERRIDES contains the command line variable definitions. Reseting it to +# empty allows propogating all exported overridden variables to nested makes. +# NOTEs: +# 1. All variable set in command line are propagated to nested makes. +# 2. All variables declared with the "export" keyword are propagated to +# nested makes. +# 3. "override" allows changing variables set in command line. But it doesn't +# propagate new values to nested makes. For propagation, the "export" keyword +# should be used. +# 4. gmake v3.80 doesn't support exporting of target-specific variables using +# the "export" keyword +MAKEOVERRIDES = diff --git a/build/common_rules.inc b/build/common_rules.inc new file mode 100644 index 0000000..3922413 --- /dev/null +++ b/build/common_rules.inc @@ -0,0 +1,168 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + + +ifeq ($(tbb_strict),1) + ifeq ($(WARNING_AS_ERROR_KEY),) + $(error WARNING_AS_ERROR_KEY is empty) + endif + # Do not remove line below! + WARNING_KEY += $(WARNING_AS_ERROR_KEY) +endif + +ifneq (,$(findstring s,$(MAKEFLAGS))) + override largs+=-q +endif +ifneq (,$(repeat)) + override largs+=-r $(repeat) +endif +ifneq (,$(largs)$(run_prefix)) + override run_cmd:=$(run_cmd) $(TEST_LAUNCHER) + TEST_LAUNCHER= + ifeq (,$(strip $(run_cmd))) + $(warning Test launcher is not defined for the platform, ignoring launcher arguments) + endif +endif + +ifndef TEST_EXT + TEST_EXT = exe +endif + +INCLUDES += $(INCLUDE_KEY)$(tbb_root)/src $(INCLUDE_KEY)$(tbb_root)/src/rml/include $(INCLUDE_KEY)$(tbb_root)/include + +CPLUS_FLAGS += $(WARNING_KEY) $(CXXFLAGS) +ifeq (1,$(tbb_cpf)) +CPLUS_FLAGS += $(DEFINE_KEY)__TBB_CPF_BUILD=1 +endif +ifeq (0,$(exceptions)) +CPLUS_FLAGS += $(DEFINE_KEY)TBB_USE_EXCEPTIONS=0 +endif +LINK_FLAGS += $(LDFLAGS) +LIB_LINK_FLAGS += $(LDFLAGS) + +LIB_LINK_CMD ?= $(CPLUS) $(PIC_KEY) +ifeq ($(origin LIB_OUTPUT_KEY), undefined) + LIB_OUTPUT_KEY = $(OUTPUT_KEY) +endif +ifeq ($(origin LIB_LINK_LIBS), undefined) + LIB_LINK_LIBS = $(LIBDL) $(LIBS) +endif + +CONLY ?= $(CPLUS) + +# The most generic rules +#$(1) - is the target pattern +define make-cxx-obj +$1: %.cpp + $$(CPLUS) $$(OUTPUTOBJ_KEY)$$@ $$(COMPILE_ONLY) $$(CPLUS_FLAGS) $$(CXX_ONLY_FLAGS) $$(CXX_WARN_SUPPRESS) $$(INCLUDES) $$< +endef + +TEST_AFFIXES_OBJS=$(addsuffix .$(OBJ),$(addprefix %_,$(TEST_SUFFIXES)) $(addsuffix _%,$(TEST_PREFIXES))) + +# Make will not process the same recipe for each test pattern (since the dependency on the same %.cpp) +# thus the separated recipes should be provided +$(foreach t,%.$(OBJ) $(TEST_AFFIXES_OBJS),$(eval $(call make-cxx-obj,$(t)))) + +.PRECIOUS: %.$(OBJ) %.$(TEST_EXT) %.res $(TEST_AFFIXES_OBJS) + +# Rules for generating a test DLL +%_dll.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $< + +#$(1) - is the binary name +#$(2) - is the input obj files and libraries +define make-test-binary + $(CPLUS) $(OUTPUT_KEY)$(strip $1) $(CPLUS_FLAGS) $(2) $(LIBS) $(LINK_FLAGS) +endef + +# LINK_FILES the list of options to link test specific files (libraries and object files) +LINK_FILES+=$(TEST_LIBS) +# Rule for generating executable test +%.$(TEST_EXT): %.$(OBJ) $(TEST_LIBS) $(TEST_PREREQUISITE) $(if $(use_proxy),$(PROXY.LIB)) + $(call make-test-binary,$@,$< $(LINK_FILES) $(PIE_FLAG)) + +# Rules for generating a test DLL +%_dll.$(DLL): LINK_FLAGS += $(PIC_KEY) $(DYLIB_KEY) +%_dll.$(DLL): TEST_LIBS := $(subst %_dll.$(DLL),,$(TEST_LIBS)) +%_dll.$(DLL): %_dll.$(OBJ) + $(call make-test-binary,$@,$< $(LINK_FILES)) +.PRECIOUS: %_dll.$(OBJ) %_dll.$(DLL) + +%.$(OBJ): %.c + $(CONLY) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(C_FLAGS) $(INCLUDES) $< + +%.$(OBJ): %.asm + $(ASM) $(ASM_FLAGS) $< + +%.$(OBJ): %.s + cpp <$< | grep -v '^#' >$*.tmp + $(ASM) $(ASM_FLAGS) -o $@ $*.tmp + +# Rule for generating .E file if needed for visual inspection +# Note that ICL treats an argument after PREPROC_ONLY as a file to open, +# so all uses of PREPROC_ONLY should be immediately followed by a file name +%.E: %.cpp + $(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $(PREPROC_ONLY) $< >$@ + +# TODO Rule for generating .asm file if needed for visual inspection +%.asm: %.cpp + $(CPLUS) /c /FAs /Fa $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $< + +# TODO Rule for generating .s file if needed for visual inspection +%.s: %.cpp + $(CPLUS) -S $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $< + +# Customizations +$(KNOWN_WARNINGS): %.$(OBJ): %.cpp + $(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $< + +tbb_misc.$(OBJ): version_string.ver +tbb_misc.$(OBJ): INCLUDES+=$(INCLUDE_KEY). + +tbb_misc.E: tbb_misc.cpp version_string.ver + $(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@ + +%.res: %.rc version_string.ver $(TBB.MANIFEST) + rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $< + +# TODO: add $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS) (in a separate line?) and remove useless $(INCLUDES) +VERSION_FLAGS=$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) + +ifneq (,$(TBB.MANIFEST)) +$(TBB.MANIFEST): + cmd /C "echo #include ^ >tbbmanifest.c" + cmd /C "echo int main(){return 0;} >>tbbmanifest.c" + cl /nologo $(C_FLAGS) tbbmanifest.c + +version_string.ver: $(TBB.MANIFEST) + $(MAKE_VERSIONS) + cmd /C "echo #define TBB_MANIFEST 1 >> version_string.ver" +# TODO: fix parallel build by writing to a temporary file and rename it when complete +else +# TODO: make version strings directly representative for all the libraries +version_string.ver: + $(MAKE_VERSIONS) +endif + +test_% debug_%: test_%.$(TEST_EXT) $(TEST_PREREQUISITE) + $(run_cmd) ./$< $(args) +ifneq (,$(codecov)) + profmerge + codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt +endif + diff --git a/build/detect.js b/build/detect.js new file mode 100644 index 0000000..b2a0943 --- /dev/null +++ b/build/detect.js @@ -0,0 +1,199 @@ +// Copyright (c) 2005-2017 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// +// + +function readAllFromFile(fname) { + var fso = new ActiveXObject("Scripting.FileSystemObject"); + var file = null; + try { + file = fso.OpenTextFile(fname, 1, 0); + return (file.readAll()); + } finally { + // Close the file in the finally section to guarantee that it will be closed in any case + // (if the exception is thrown or not). + file.Close(); + } +} + +function doWork() { + var WshShell = WScript.CreateObject("WScript.Shell"); + + var tmpExec = WshShell.Run("cmd /c echo int main(){return 0;} >detect.c", 0, true); + + // The next block deals with GCC (MinGW) + if (WScript.Arguments.Count() > 1) { + var compilerPath = WScript.Arguments(1); + // The RegExp matches everything up to and including the last slash (it uses a greedy approach.) + var compilerName = compilerPath.replace(/^.*[\/\\]/, ""); + if (compilerName.match(/gcc/i) != null) { + if (WScript.Arguments(0) == "/arch") { + // Get predefined macros + tmpExec = WshShell.Run("cmd /C " + compilerPath + " -dM -E detect.c > detect.map", 0, true); + var defs = readAllFromFile("detect.map"); + //detect target architecture + var intel64 = /x86_64|amd64/mgi; + var ia32 = /i386/mgi; + if (defs.match(intel64)) { + WScript.Echo("intel64"); + } else if (defs.match(ia32)) { + WScript.Echo("ia32"); + } else { + WScript.Echo("unknown"); + } + } else { + tmpExec = WshShell.Exec(compilerPath + " -dumpversion"); + var gccVersion = tmpExec.StdOut.ReadLine(); + if (WScript.Arguments(0) == "/runtime") { + WScript.Echo("mingw" + gccVersion); + } + else if (WScript.Arguments(0) == "/minversion") { + // Comparing strings, not numbers; will not work for two-digit versions + if (gccVersion >= WScript.Arguments(2)) { + WScript.Echo("ok"); + } else { + WScript.Echo("fail"); + } + } + } + return; + } + } + + //Compile binary + tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP"); + while (tmpExec.Status == 0) { + WScript.Sleep(100); + } + //compiler banner that includes version and target arch was printed to stderr + var clVersion = tmpExec.StdErr.ReadAll(); + + if (WScript.Arguments(0) == "/arch") { + //detect target architecture + var intel64 = /AMD64|EM64T|x64/mgi; + var ia32 = /[80|\s]x86/mgi; + var arm = /ARM/mgi; + if (clVersion.match(intel64)) { + WScript.Echo("intel64"); + } else if (clVersion.match(ia32)) { + WScript.Echo("ia32"); + } else if (clVersion.match(arm)) { + WScript.Echo("armv7"); + } else { + WScript.Echo("unknown"); + } + return; + } + + if (WScript.Arguments(0) == "/runtime") { + //read map-file + var mapContext = readAllFromFile("detect.map"); + //detect runtime + var vc71 = /MSVCR71\.DLL/mgi; + var vc80 = /MSVCR80\.DLL/mgi; + var vc90 = /MSVCR90\.DLL/mgi; + var vc100 = /MSVCR100\.DLL/mgi; + var vc110 = /MSVCR110\.DLL/mgi; + var vc120 = /MSVCR120\.DLL/mgi; + var vc140 = /VCRUNTIME140\.DLL/mgi; + var psdk = /MSVCRT\.DLL/mgi; + if (mapContext.match(vc71)) { + WScript.Echo("vc7.1"); + } else if (mapContext.match(vc80)) { + WScript.Echo("vc8"); + } else if (mapContext.match(vc90)) { + WScript.Echo("vc9"); + } else if (mapContext.match(vc100)) { + WScript.Echo("vc10"); + } else if (mapContext.match(vc110)) { + WScript.Echo("vc11"); + } else if (mapContext.match(vc120)) { + WScript.Echo("vc12"); + } else if (mapContext.match(vc140)) { + if (WshShell.ExpandEnvironmentStrings("%VisualStudioVersion%") == "15.0") + WScript.Echo("vc14.1"); + else + WScript.Echo("vc14"); + } else { + WScript.Echo("unknown"); + } + return; + } + + if (WScript.Arguments(0) == "/minversion") { + var compilerVersion; + var compilerUpdate; + if (WScript.Arguments(1) == "cl") { + compilerVersion = clVersion.match(/Compiler Version ([0-9.]+)\s/mi)[1]; + // compilerVersion is in xx.xx.xxxxx.xx format, i.e. a string. + // It will compare well with major.minor versions where major has two digits, + // which is sufficient as the versions of interest start from 13 (for VC7). + } else if (WScript.Arguments(1) == "icl") { + // Get predefined ICL macros + tmpExec = WshShell.Run("cmd /C icl /QdM /E detect.c > detect.map", 0, true); + var defs = readAllFromFile("detect.map"); + // In #define __INTEL_COMPILER XXYY, XX is the major ICL version, YY is minor + compilerVersion = defs.match(/__INTEL_COMPILER[ \t]*([0-9]+).*$/mi)[1] / 100; + compilerUpdate = defs.match(/__INTEL_COMPILER_UPDATE[ \t]*([0-9]+).*$/mi)[1]; + // compiler version is a number; it compares well with another major.minor + // version number, where major has one, two, and perhaps more digits (9.1, 11, etc). + } + var requestedVersion = WScript.Arguments(2); + var requestedUpdate = 0; + if (WScript.Arguments.Count() > 3) + requestedUpdate = WScript.Arguments(3); + if (compilerVersion < requestedVersion) { + WScript.Echo("fail"); + } else if (compilerVersion == requestedVersion && compilerUpdate < requestedUpdate) { + WScript.Echo("fail"); + } else { + WScript.Echo("ok"); + } + return; + } +} + +function doClean() { + var fso = new ActiveXObject("Scripting.FileSystemObject"); + // delete intermediate files + if (fso.FileExists("detect.c")) + fso.DeleteFile("detect.c", false); + if (fso.FileExists("detect.obj")) + fso.DeleteFile("detect.obj", false); + if (fso.FileExists("detect.map")) + fso.DeleteFile("detect.map", false); + if (fso.FileExists("detect.exe")) + fso.DeleteFile("detect.exe", false); + if (fso.FileExists("detect.exe.manifest")) + fso.DeleteFile("detect.exe.manifest", false); +} + +if (WScript.Arguments.Count() > 0) { + + try { + doWork(); + } catch (error) { + WScript.Echo("unknown"); + } + doClean(); + +} else { + WScript.Echo("Supported options:\n" + + "\t/arch [compiler]\n" + + "\t/runtime [compiler]\n" + + "\t/minversion compiler version"); +} + diff --git a/build/generate_tbbvars.bat b/build/generate_tbbvars.bat new file mode 100644 index 0000000..8925f57 --- /dev/null +++ b/build/generate_tbbvars.bat @@ -0,0 +1,66 @@ +@echo off +REM +REM Copyright (c) 2005-2017 Intel Corporation +REM +REM Licensed under the Apache License, Version 2.0 (the "License"); +REM you may not use this file except in compliance with the License. +REM You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. +REM +REM +REM +REM +REM +setlocal +for %%D in ("%tbb_root%") do set actual_root=%%~fD +set fslash_root=%actual_root:\=/% +set bin_dir=%CD% +set fslash_bin_dir=%bin_dir:\=/% +set _INCLUDE=INCLUDE& set _LIB=LIB +if not x%UNIXMODE%==x set _INCLUDE=CPATH& set _LIB=LIBRARY_PATH +if not x%USE_INCLUDE_ENV%==x set _INCLUDE=INCLUDE + +echo Generating local tbbvars.bat +echo @echo off>tbbvars.bat +echo SET TBBROOT=%actual_root%>>tbbvars.bat +echo SET TBB_ARCH_PLATFORM=%arch%\%runtime%>>tbbvars.bat +echo SET TBB_TARGET_ARCH=%arch%>>tbbvars.bat +echo SET %_INCLUDE%=%%TBBROOT%%\include;%%%_INCLUDE%%%>>tbbvars.bat +echo SET %_LIB%=%bin_dir%;%%%_LIB%%%>>tbbvars.bat +echo SET PATH=%bin_dir%;%%PATH%%>>tbbvars.bat +if not x%UNIXMODE%==x echo SET LD_LIBRARY_PATH=%bin_dir%;%%LD_LIBRARY_PATH%%>>tbbvars.bat + +echo Generating local tbbvars.sh +echo #!/bin/sh>tbbvars.sh +echo export TBBROOT="%fslash_root%">>tbbvars.sh +echo export TBB_ARCH_PLATFORM="%arch%\%runtime%">>tbbvars.sh +echo export TBB_TARGET_ARCH="%arch%">>tbbvars.sh +echo export %_INCLUDE%="${TBBROOT}/include;$%_INCLUDE%">>tbbvars.sh +echo export %_LIB%="%fslash_bin_dir%;$%_LIB%">>tbbvars.sh +echo export PATH="%fslash_bin_dir%;$PATH">>tbbvars.sh +if not x%UNIXMODE%==x echo export LD_LIBRARY_PATH="%fslash_bin_dir%;$LD_LIBRARY_PATH">>tbbvars.sh + +echo Generating local tbbvars.csh +echo #!/bin/csh>tbbvars.csh +echo setenv TBBROOT "%actual_root%">>tbbvars.csh +echo setenv TBB_ARCH_PLATFORM "%arch%\%runtime%">>tbbvars.csh +echo setenv TBB_TARGET_ARCH "%arch%">>tbbvars.csh +echo setenv %_INCLUDE% "${TBBROOT}\include;$%_INCLUDE%">>tbbvars.csh +echo setenv %_LIB% "%bin_dir%;$%_LIB%">>tbbvars.csh +echo setenv PATH "%bin_dir%;$PATH">>tbbvars.csh +if not x%UNIXMODE%==x echo setenv LD_LIBRARY_PATH "%bin_dir%;$LD_LIBRARY_PATH">>tbbvars.csh + +if not x%LIB_STL_ANDROID%==x ( +REM Workaround for copying Android* specific stl shared library to work folder +copy /Y "%LIB_STL_ANDROID:/=\%" . +) + +endlocal +exit diff --git a/build/generate_tbbvars.sh b/build/generate_tbbvars.sh new file mode 100644 index 0000000..0ca0965 --- /dev/null +++ b/build/generate_tbbvars.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Script used to generate tbbvars.[c]sh scripts +bin_dir="$PWD" # +cd "$tbb_root" # keep this comments here +tbb_root="$PWD" # to make it unsensible +cd "$bin_dir" # to EOL encoding +cat >./tbbvars.sh <./tbbvars.csh < + + +

Overview

+This directory contains the internal Makefile infrastructure for Intel® Threading Building Blocks (Intel® TBB). + +

+See below for how to build Intel TBB and how to port Intel TBB +to a new platform, operating system or architecture. +

+ +

Files

+The files here are not intended to be used directly. See below for usage. +
+
Makefile.tbb +
Main Makefile to build the Intel TBB library. + Invoked via 'make tbb' from top-level Makefile. +
Makefile.tbbmalloc +
Main Makefile to build the Intel TBB scalable memory allocator library as well as its tests. + Invoked via 'make tbbmalloc' from top-level Makefile. +
Makefile.test +
Main Makefile to build and run the tests for the Intel TBB library. + Invoked via 'make test' from top-level Makefile. +
common.inc +
Main common included Makefile that includes OS-specific and compiler-specific Makefiles. +
<os>.inc +
OS-specific Makefile for a particular <os>. +
<os>.<compiler>.inc +
Compiler-specific Makefile for a particular <os> / <compiler> combination. +
*.sh +
Infrastructure utilities for Linux* OS, macOS*, and UNIX*-related operating systems. +
*.js, *.bat +
Infrastructure utilities for Windows* OS. +
+ +

To Build

+

+To port Intel TBB to a new platform, operating system or architecture, see the porting directions below. +

+ +

Software prerequisites:

+
    +
  1. C++ compiler for the platform, operating system and architecture of interest. + Either the native compiler for your system, or, optionally, the appropriate Intel® C++ Compiler, may be used. +
  2. GNU make utility. On Windows OS, if a UNIX* emulator is used to run GNU make, + it should be able to run Windows OS utilities and commands. On Linux OS, macOS, etc., + shell commands issued by GNU make should execute in a Bourne or BASH compatible shell. + In the following examples, replace make with the correct GNU make command for + your system (for example, gmake). GNU make version 3.80 and more recent are supported. +
+ +

+Intel TBB libraries can be built by performing the following steps. +On systems that support only one ABI (e.g., 32-bit), these steps build the libraries for that ABI. +On systems that support both 64-bit and 32-bit libraries, these steps build the 64-bit libraries +(Linux OS, macOS, and related systems) or whichever ABI is selected in the development environment (Windows OS). +

+
    +
  1. Change to the top-level directory of the installed software. +
  2. If using the Intel® C++ Compiler, make sure the appropriate compiler is available in your PATH + (e.g., by sourcing the appropriate iccvars script for the compiler to be used). +
  3. Invoke GNU make using no arguments, for example, make. +
+ +

+To build Intel TBB libraries for other than the default ABI (e.g., to build 32-bit libraries on Linux OS, macOS, +or related systems that support both 64-bit and 32-bit libraries), perform the following steps: +

+
    +
  1. Change to the top-level directory of the installed software. +
  2. If using the Intel® C++ Compiler, make sure the appropriate compiler is available in your PATH + (e.g., by sourcing the appropriate iccvars script for the compiler to be used). +
  3. Explicitly specify the architecture when invoking GNU make, e.g. make arch=ia32. +
+ +

The default make target will build the release and debug versions of the Intel TBB library.

+

Other targets are available in the top-level Makefile. You might find the following targets useful: +

    +
  • make test will build and run Intel TBB unit-tests; +
  • make examples will build and run Intel TBB examples. Available in the open-source version only. +For the commercial version, you can download Intel TBB Samples at the Intel® Software Product Samples and Tutorials website; +
  • make all will do all of the above. Available in the open-source version only. +
+See also the list of other targets below. +

+ +

+By default, the libraries will be built in sub-directories within the build/ directory. +The sub-directories are named according to the operating system, architecture, compiler and software environment used +(the sub-directory names also distinguish release vs. debug libraries). On Linux OS, the software environment comprises +the GCC, libc and kernel version used. On macOS, the software environment comprises the GCC and OS version used. +On Windows OS, the software environment comprises the Microsoft* Visual Studio* version used. +See below for how to change the default build directory. +

+ +

+To perform different build and/or test operations, use the following steps. +

+
    +
  1. Change to the top-level directory of the installed software. +
  2. If using the Intel® C++ Compiler, make sure the appropriate compiler is available in your PATH + (e.g., by sourcing the appropriate iccvars script for the compiler to be used). +
  3. Invoke GNU make by using one or more of the following commands. +
    +
    make +
    Default build. Equivalent to make tbb tbbmalloc. +
    make all +
    Equivalent to make tbb tbbmalloc test examples. Available in the open-source version only. +
    cd src;make release +
    Build and test release libraries only. +
    cd src;make debug +
    Build and test debug libraries only. +
    make tbb +
    Make Intel TBB release and debug libraries. +
    make tbbmalloc +
    Make Intel TBB scalable memory allocator libraries. +
    make test +
    Compile and run unit-tests +
    make examples +
    Build libraries and run all examples, like doing make debug clean release from the general example Makefile. + Available in the open-source version only. +
    make python +
    Build, install, and test Python* API for Intel TBB. See details here. +
    make compiler={icl, icc, gcc, clang} [(above options or targets)] +
    Build and run as above, but use specified compilers instead of default, native compilers +
      +
    1. {icl, icc} - to use Intel® compilers (icl on Windows OS, icc on Linux OS or macOS).
    2. +
    3. gcc - to use g++ (e.g. MinGW on Windows OS)
    4. +
    5. clang - to use Clang compiler
    6. +
    +
    make compiler=clang stdlib=libc++ [(above options or targets)] +
    Build and run as above, but use libc++ as a standard c++ library for clang. +
    make stdver={c++11, c++14, ...} [(above options or targets)] +
    Build and run as above, but additionally specify the version of the C++ standard or dialect to be used by + the compiler. The specified value of stdver will be used as a parameter to the appropriate + compiler option (such as -std); the behavior in case of unsupported value is compiler-specific. +
    make target_app={win8ui, uwp} [target_mode=store] [(above options or targets)] +
    Build and run as above, but use API that is compliant with Universal Windows* applications. Use win8ui option, if you want to use Intel TBB in Windows* 8 Universal application and uwp in case of Windows* 10 Universal Windows application. + target_mode=store is used to produce binaries that are compliant with Windows Store* application container. In later case they won't work with Intel TBB unit tests but work only with Windows Store* applications. +
    ndk-build target=android [(above options or targets)] +
    Build and run as above, but build libraries for Android* OS by Android NDK that should be installed. Makefiles were tested with revision 8. +
    make arch={ia32, intel64, ia64} [(above options or targets)] +
    Build and run as above, but build libraries for the selected ABI. + Might be useful for cross-compilation; ensure proper environment is set before running this command. +
    make tbb_root={(Intel TBB directory)} [(above options or targets)] +
    Build and run as above; for use when invoking make from a directory other than the top-level directory. +
    make tbb_build_dir={(build directory)} [(above options or targets)] +
    Build and run as above, but place the built libraries in the specified directory, rather than in the default sub-directory within the build/ directory. This command might have troubles with the build in case the sources installed to the directory with spaces in the path. +
    make tbb_build_prefix={(build sub-directory)} [(above options or targets)] +
    Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory, rather than using the default sub-directory name. +
    make tbb_cpf=1 [(above options or targets)] +
    Build and run as above, but build and use libraries with the Community Preview Features enabled, rather than the default libraries. +
    make [(above options)] clean +
    Remove any executables or intermediate files produced by the above commands. + Includes build directories, object files, libraries and test executables. +
    +
+ +

To Port

+

+This section provides information on how to port Intel TBB to a new platform, operating system or architecture. +A subset or a superset of these steps may be required for porting to a given platform. +

+ +

To port the Intel TBB source code:

+
    +
  1. If porting to a new architecture, create a file that describes the architecture-specific details for that architecture. +
      +
    • Create a <os>_<architecture>.h file in the include/tbb/machine directory + that describes these details. +
        +
      • The <os>_<architecture>.h is named after the operating system and architecture as recognized by + include/tbb/tbb_machine.h and the Makefile infrastructure. +
      • This file defines the implementations of synchronization operations, and also the + scheduler yield function, for the operating system and architecture. +
      • Several examples of <os>_<architecture>.h files can be found in the + include/tbb/machine directory. +
          +
        • A minimal implementation defines the 4-byte and 8-byte compare-and-swap operations, + and the scheduler yield function. See include/tbb/machine/mac_ppc.h + for an example of a minimal implementation. +
        • More complex implementation examples can also be found in the + include/tbb/machine directory + that implement all the individual variants of synchronization operations that Intel TBB uses. + Such implementations are more verbose but may achieve better performance on a given architecture. +
        • In a given implementation, any synchronization operation that is not defined is implemented, by default, + in terms of 4-byte or 8-byte compare-and-swap. More operations can thus be added incrementally to increase + the performance of an implementation. +
        • In most cases, synchronization operations are implemented as inline assembly code; examples also exist, + (e.g., for Intel® Itanium® processors) that use out-of-line assembly code in *.s or *.asm files + (see the assembly code sub-directories in the src/tbb directory). +
        +
      +
    • Modify include/tbb/tbb_machine.h, if needed, to invoke the appropriate + <os>_<architecture>.h file in the include/tbb/machine directory. +
    +
  2. Add an implementation of DetectNumberOfWorkers() in src/tbb/tbb_misc.h, + that returns the number of cores found on the system in case it is not supported by the current implementation. + This is used to determine the default number of threads for the Intel TBB task scheduler. +
  3. Either properly define FillDynamicLinks for use in + src/tbb/cache_aligned_allocator.cpp, + or hardcode the allocator to be used. +
  4. Additional types might be required in the union defined in + include/tbb/aligned_space.h + to ensure proper alignment on your platform. +
  5. Changes may be required in include/tbb/tick_count.h + for systems that do not provide gettimeofday. +
+ +

To port the Makefile infrastructure:

+Modify the appropriate files in the Makefile infrastructure to add a new platform, operating system or architecture as needed. +See the Makefile infrastructure files for examples. +
    +
  1. The top-level Makefile includes common.inc to determine the operating system. +
      +
    • To add a new operating system, add the appropriate test to common.inc, and create the needed <os>.inc and <os>.<compiler>.inc files (see below). +
    +
  2. The <os>.inc file makes OS-specific settings for a particular operating systems. +
      +
    • For example, linux.inc makes settings specific to Linux operating systems. +
    • This file performs OS-dependent tests to determine the specific platform and/or architecture, and sets other platform-dependent values. +
    • Add a new <os>.inc file for each new operating system added. +
    +
  3. The <os>.<compiler>.inc file makes compiler-specific settings for a particular + <os> / <compiler> combination. +
      +
    • For example, linux.gcc.inc makes specific settings for using GCC on Linux OS, and linux.icc.inc makes specific settings for using the Intel® C++ compiler on Linux OS. +
    • This file sets particular compiler, assembler and linker options required when using a particular <os> / <compiler> combination. +
    • Add a new <os>.<compiler>.inc file for each new <os> / <compiler> combination added. +
    +
+ +
+Up to parent directory +

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, the Intel logo and Itanium are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries. +

+* Other names and brands may be claimed as the property of others. + + diff --git a/build/ios.clang.inc b/build/ios.clang.inc new file mode 100644 index 0000000..265e9fa --- /dev/null +++ b/build/ios.clang.inc @@ -0,0 +1,23 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +include $(tbb_root)/build/macos.clang.inc + +CPLUS_FLAGS += -miphoneos-version-min=8.0 +LINK_FLAGS += -miphoneos-version-min=8.0 +LIB_LINK_FLAGS += -miphoneos-version-min=8.0 diff --git a/build/ios.macos.inc b/build/ios.macos.inc new file mode 100644 index 0000000..ae723bd --- /dev/null +++ b/build/ios.macos.inc @@ -0,0 +1,36 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +ifneq ($(arch),$(filter $(arch),ia32 intel64 armv7 armv7s arm64)) + $(error $(arch) is unknown architecture. Known arhitechtures are ia32 intel64 armv7 armv7s arm64) +endif + +# If target is ios but arch is ia32/intel64 then build for 32/64 simulator! +ifeq (,$(SDKROOT)) + ifeq ($(arch),$(filter $(arch),ia32 intel64)) + export SDKROOT:=$(shell xcodebuild -sdk -version | grep -o -E '/.*SDKs/iPhoneSimulator.*' 2>/dev/null) + else + export SDKROOT:=$(shell xcodebuild -sdk -version | grep -o -E '/.*SDKs/iPhoneOS.*' 2>/dev/null) + endif +endif +ifeq (,$(SDKROOT)) + $(error iOS* SDK not found) +endif + +ios_version:=$(shell echo $(SDKROOT) | sed -e "s/.*[a-z,A-Z]\(.*\).sdk/\1/") +runtime:=cc$(clang_version)_ios$(ios_version) diff --git a/build/linux.clang.inc b/build/linux.clang.inc new file mode 100644 index 0000000..edabab2 --- /dev/null +++ b/build/linux.clang.inc @@ -0,0 +1,115 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor -Wno-dangling-else +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +LIBDL = -ldl + +CPLUS = clang++ +CONLY = clang +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) +LIBS += -lpthread -lrt +LINK_FLAGS = -Wl,-rpath-link=. -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD +endif + +ifneq (,$(stdlib)) + CPLUS_FLAGS += -stdlib=$(stdlib) + LIB_LINK_FLAGS += -stdlib=$(stdlib) +endif + +ifneq (,$(gcc_version)) + # TODO: do not assume that GCC minor and patchlevel versions are always single-digit. + CPLUS_FLAGS += -DTBB_USE_GLIBCXX_VERSION=$(subst .,0,$(gcc_version)) +endif + +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ifeq (intel64,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m32 -march=pentium4 + LIB_LINK_FLAGS += -m32 +endif + +ifeq (ppc64,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ppc32,$(arch)) + CPLUS_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +ifeq (bg,$(arch)) + CPLUS = bgclang++ + CONLY = bgclang +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc new file mode 100644 index 0000000..348bac0 --- /dev/null +++ b/build/linux.gcc.inc @@ -0,0 +1,155 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor + +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +LIBDL = -ldl + +CPLUS = g++ +CONLY = gcc +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) +LIBS += -lpthread -lrt +LINK_FLAGS = -Wl,-rpath-link=. -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +# gcc 4.2 and higher support OpenMP +ifneq (,$(shell gcc -dumpversion | egrep "^(4\.[2-9]|[5-9])")) + OPENMP_FLAG = -fopenmp +endif + +# gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them +ifneq (,$(shell gcc -dumpversion | egrep "^(4\.[8-9]|[5-9])")) + RTM_KEY = -mrtm +endif + +# gcc 4.0 and later have -Wextra that is used by some our customers. +ifneq (,$(shell gcc -dumpversion | egrep "^([4-9])")) + TEST_WARNING_KEY += -Wextra +endif + +# gcc 5.0 and later have -Wsuggest-override option +# enable it via a pre-included header in order to limit to C++11 and above +ifneq (,$(shell gcc -dumpversion | egrep "^([5-9])")) + INCLUDE_TEST_HEADERS = -include $(tbb_root)/src/test/harness_preload.h +endif + +# gcc 6.0 and later have -flifetime-dse option that controls +# elimination of stores done outside the object lifetime +ifneq (,$(shell gcc -dumpversion | egrep "^([6-9])")) + # keep pre-contruction stores for zero initialization + DSE_KEY = -flifetime-dse=1 +endif + +ifeq ($(cfg), release) + CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD +endif + +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ifeq (ia64,$(arch)) +# Position-independent code (PIC) is a must on IA-64 architecture, even for regular (not shared) executables + CPLUS_FLAGS += $(PIC_KEY) +endif + +ifeq (intel64,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m64 $(RTM_KEY) + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m32 -march=pentium4 $(RTM_KEY) + LIB_LINK_FLAGS += -m32 +endif + +ifeq (ppc64,$(arch)) + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ppc32,$(arch)) + CPLUS_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +ifeq (bg,$(arch)) + CPLUS = $(firstword $(notdir $(shell which powerpc{64,32,}-bg{z..a}-linux-g++ 2>/dev/null))) + CONLY = $(firstword $(notdir $(shell which powerpc{64,32,}-bg{z..a}-linux-gcc 2>/dev/null))) +endif + +# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify) +ifeq (sparc,$(arch)) + CPLUS_FLAGS += -mcpu=v9 -m64 + LIB_LINK_FLAGS += -mcpu=v9 -m64 +endif + +# automatically generate "IT" instructions when compiling for Thumb ISA +ifeq (armv7,$(arch)) + CPLUS_FLAGS += -Wa,-mimplicit-it=thumb +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +ifeq (ia64,$(arch)) + ASM_FLAGS += -xexplicit + TBB_ASM.OBJ += atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o + MALLOC_ASM.OBJ += atomic_support.o lock_byte.o pause.o log2.o +endif +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/linux.icc.inc b/build/linux.icc.inc new file mode 100644 index 0000000..c1830f5 --- /dev/null +++ b/build/linux.icc.inc @@ -0,0 +1,120 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -w1 +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +NOINTRINSIC_KEY = -fno-builtin +LIBDL = -ldl +ifneq (,$(shell icc -dumpversion | egrep "1[2-9]\.")) +SDL_FLAGS = -fstack-protector -Wformat -Wformat-security +endif + +CPLUS = icpc +CONLY = icc + +ITT_NOTIFY = -DDO_ITT_NOTIFY +ifeq (release,$(cfg)) +SDL_FLAGS += -D_FORTIFY_SOURCE=2 +CPLUS_FLAGS = $(ITT_NOTIFY) -O2 -g -DUSE_PTHREAD +else +CPLUS_FLAGS = $(ITT_NOTIFY) -O0 -g -DUSE_PTHREAD -DTBB_USE_DEBUG +endif + +LIB_LINK_FLAGS = -shared -static-intel -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now +LIBS += -lpthread -lrt +LINK_FLAGS = -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +ifneq (,$(shell icc -dumpversion | egrep "^1[6-9]\.")) +OPENMP_FLAG = -qopenmp +else +OPENMP_FLAG = -openmp +endif + +# ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus +ifneq (,$(shell icc -dumpversion | egrep "^1[2-9]\.")) + CILK_AVAILABLE = yes +endif + +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 -falign-stack=maintain-16-byte + LIB_LINK_FLAGS += -m32 +endif + +ifeq (ia64,$(arch)) + ITT_NOTIFY = +# Position-independent code (PIC) is a must on IA-64 architecture, even for regular (not shared) executables +# strict-ansi does not work with on RHEL 4 AS + CPLUS_FLAGS += $(PIC_KEY) $(if $(findstring cc3.,$(runtime)),-ansi,-strict-ansi) +else +# For ICC 16 and older, in std=c++14 mode -strict-ansi does not work with GNU C++ library headers +# egrep returns 0 or 1, compare it in concatenation + CPLUS_FLAGS += $(if $(findstring c++14_1,$(stdver)_$(shell icc -dumpversion| egrep -c "^1[1-6]\.")),-ansi,-strict-ansi) +endif + +ifneq (,$(codecov)) +# no tool support for code coverage, need profile data generation + ITT_NOTIFY = -prof-gen=srcpos +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +ifeq (ia64,$(arch)) + ASM_FLAGS += -xexplicit + TBB_ASM.OBJ += atomic_support.o lock_byte.o log2.o pause.o ia64_misc.o + MALLOC_ASM.OBJ += atomic_support.o lock_byte.o pause.o log2.o +endif +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ + diff --git a/build/linux.inc b/build/linux.inc new file mode 100644 index 0000000..daeaaf9 --- /dev/null +++ b/build/linux.inc @@ -0,0 +1,142 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +####### Detections and Commands ############################################### + +ifeq (icc,$(compiler)) + export COMPILER_VERSION := ICC: $(shell icc -V &1 | grep 'Version') + ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION))) + export arch:=ia32 + else + ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION))) + export arch:=intel64 + else + ifneq (,$(findstring IA-64, $(COMPILER_VERSION))) + export arch:=ia64 + endif + endif + endif + ifeq (,$(arch)) + $(warning "Unknown Intel compiler") + endif +endif + +ifndef arch + uname_m:=$(shell uname -m) + ifeq ($(uname_m),i686) + export arch:=ia32 + endif + ifeq ($(uname_m),ia64) + export arch:=ia64 + endif + ifeq ($(uname_m),x86_64) + export arch:=intel64 + endif + ifeq ($(uname_m),sparc64) + export arch:=sparc + endif + ifeq ($(uname_m),armv7l) + export arch:=armv7 + endif + ifndef arch + export arch:=$(uname_m) + endif +endif + +ifndef runtime + export gcc_version:=$(shell gcc -dumpversion) + os_version:=$(shell uname -r) + os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//') + export os_glibc_version_full:=$(shell getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //') + os_glibc_version:=$(shell echo "$(os_glibc_version_full)" | sed -e '2,$$d' -e 's/-.*$$//') + export runtime:=cc$(gcc_version)_libc$(os_glibc_version)_kernel$(os_kernel_version) +endif + +native_compiler := gcc +export compiler ?= gcc +debugger ?= gdb + +CMD=sh -c +CWD=$(shell pwd) +CP=cp +RM?=rm -f +RD?=rmdir +MD?=mkdir -p +NUL= /dev/null +SLASH=/ +MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(VERSION_FLAGS) >version_string.ver +MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh + +ifdef LD_LIBRARY_PATH + export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH) +else + export LD_LIBRARY_PATH := . +endif + +####### Build settings ######################################################## + +OBJ = o +DLL = so +MALLOC_DLL?=$(DLL) +LIBEXT = so +SONAME_SUFFIX =$(shell grep TBB_COMPATIBLE_INTERFACE_VERSION $(tbb_root)/include/tbb/tbb_stddef.h | egrep -o [0-9.]+) + +ifeq ($(arch),ia64) + def_prefix = lin64ipf +endif +ifneq (,$(findstring $(arch),sparc s390x)) + def_prefix = lin64 +endif +ifeq ($(arch),armv7) + def_prefix = lin32 +endif +ifeq (,$(def_prefix)) + ifeq (64,$(findstring 64,$(arch))) + def_prefix = lin64 + else + def_prefix = lin32 + endif +endif +TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst +TBB.DEF = $(TBB.LST:.lst=.def) + +TBB.DLL = $(TBB_NO_VERSION.DLL).$(SONAME_SUFFIX) +TBB.LIB = $(TBB.DLL) +TBB_NO_VERSION.DLL=libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +LINK_TBB.LIB = $(TBB_NO_VERSION.DLL) + +MALLOC_NO_VERSION.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(MALLOC_DLL) +MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def +MALLOC.DLL = $(MALLOC_NO_VERSION.DLL).$(SONAME_SUFFIX) +MALLOC.LIB = $(MALLOC_NO_VERSION.DLL) +LINK_MALLOC.LIB = $(MALLOC_NO_VERSION.DLL) + +MALLOCPROXY_NO_VERSION.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL) +MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def +MALLOCPROXY.DLL = $(MALLOCPROXY_NO_VERSION.DLL).$(SONAME_SUFFIX) +MALLOCPROXY.LIB = $(MALLOCPROXY_NO_VERSION.DLL) +LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB) + +RML_NO_VERSION.DLL = libirml$(DEBUG_SUFFIX).$(DLL) +RML.DEF = $(RML_SERVER_ROOT)/lin-rml-export.def +RML.DLL = $(RML_NO_VERSION.DLL).1 +RML.LIB = $(RML_NO_VERSION.DLL) + +TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs) + +OPENCL.LIB = -lOpenCL diff --git a/build/linux.pathcc.inc b/build/linux.pathcc.inc new file mode 100644 index 0000000..948f231 --- /dev/null +++ b/build/linux.pathcc.inc @@ -0,0 +1,93 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra + +WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor +DYLIB_KEY = -shared +EXPORT_KEY = -Wl,--version-script, +LIBDL = -ldl + +CPLUS = pathCC +CONLY = pathcc +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) +LIBS += -lstl -lpthread -lrt +LINK_FLAGS = -Wl,-rpath-link=. -rdynamic +C_FLAGS = $(CPLUS_FLAGS) + +OPENMP_FLAG = -openmp + +ifeq ($(cfg), release) + CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD +endif + +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +ifeq (intel64,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -m32 -march=pentium4 + LIB_LINK_FLAGS += -m32 +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += --64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += --32 +endif +ifeq ($(cfg),debug) + ASM_FLAGS += -g +endif + +ASSEMBLY_SOURCE=$(arch)-gas +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/linux.xl.inc b/build/linux.xl.inc new file mode 100644 index 0000000..fccb559 --- /dev/null +++ b/build/linux.xl.inc @@ -0,0 +1,104 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +####### Detections and Commands ############################################### + +COMPILE_ONLY = -c +PREPROC_ONLY = -E -qsourcetype=c +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -qpic +WARNING_AS_ERROR_KEY = -qhalt=w +WARNING_KEY = +TEST_WARNING_KEY = + +WARNING_SUPPRESS = +DYLIB_KEY = -qmkshrobj +EXPORT_KEY = -Wl,--version-script, +LIBDL = -ldl + +CPLUS = xlc++_r +CONLY = xlc_r +LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY) +LIBS = -lpthread -lrt +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + CPLUS_FLAGS = $(ITT_NOTIFY) -O2 -DUSE_PTHREAD +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD +endif + +# Adding directly to CPLUS_FLAGS instead of to WARNING_SUPPRESS because otherwise it would not be used in several tests (why not?). +# Suppress warnings like: +# - "1500-029: (W) WARNING: subprogram [...] could not be inlined into [...]." +# - "1501-201: (W) Maximum number of common component diagnostics, 10 has been exceeded." +# see http://www-01.ibm.com/support/docview.wss?uid=swg1LI72843 +# it seems that the internal compiler error that would ensue has now been avoided, making the condition harmless +# - "1540-0198 (W) The omitted keyword "private" is assumed for base class "no_copy"." +# - "1540-0822 (W) The name "__FUNCTION__" must not be defined as a macro." +CPLUS_FLAGS += -qsuppress=1500-029:1501-201:1540-0198:1540-0822 + +ASM= +ASM_FLAGS= + +TBB_ASM.OBJ= + +ifeq (intel64,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -q64 + LIB_LINK_FLAGS += -q64 +endif + +# TODO: equivalent for -march=pentium4 in CPLUS_FLAGS +ifeq (ia32,$(arch)) + ITT_NOTIFY = -DDO_ITT_NOTIFY + CPLUS_FLAGS += -q32 -qarch=pentium4 + LIB_LINK_FLAGS += -q32 +endif + +ifeq (ppc64,$(arch)) + CPLUS_FLAGS += -q64 + LIB_LINK_FLAGS += -q64 +endif + +ifeq (ppc32,$(arch)) + CPLUS_FLAGS += -q32 + LIB_LINK_FLAGS += -q32 +endif + +ifeq (bg,$(arch)) + CPLUS = bgxlC_r + CONLY = bgxlc_r +endif + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +# Suppress innumerable warnings like "1540-1088 (W) The exception specification is being ignored." +# Suppress warnings like "1540-1090 (I) The destructor of "lock" might not be called." +# TODO: aren't these warnings an indication that -qnoeh might not be appropriate? +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -qnortti -qnoeh -qsuppress=1540-1088:1540-1090 + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/macos.clang.inc b/build/macos.clang.inc new file mode 100644 index 0000000..3237705 --- /dev/null +++ b/build/macos.clang.inc @@ -0,0 +1,123 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +CPLUS = clang++ +CONLY = clang +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor +WARNING_SUPPRESS = -Wno-non-virtual-dtor -Wno-dangling-else +DYLIB_KEY = -dynamiclib +EXPORT_KEY = -Wl,-exported_symbols_list, +LIBDL = -ldl + +LIBS = -lpthread +LINK_FLAGS = +LIB_LINK_FLAGS = -dynamiclib -install_name @rpath/$(BUILDING_LIBRARY) +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + CPLUS_FLAGS = -g -O2 +else + CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG +endif + +CPLUS_FLAGS += -DUSE_PTHREAD + +# For Clang, we add the option to support RTM intrinsics *iff* xtest is found in +ifneq (,$(shell grep xtest `echo "\#include" | clang -E -M - 2>&1 | grep immintrin.h` 2>/dev/null)) + RTM_KEY = -mrtm +endif + +ifneq (,$(stdlib)) + CPLUS_FLAGS += -stdlib=$(stdlib) + LIB_LINK_FLAGS += -stdlib=$(stdlib) +endif + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 $(RTM_KEY) + LINK_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 $(RTM_KEY) + LINK_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +ifeq (ppc64,$(arch)) + CPLUS_FLAGS += -arch ppc64 + LINK_FLAGS += -arch ppc64 + LIB_LINK_FLAGS += -arch ppc64 +endif + +ifeq (ppc32,$(arch)) + CPLUS_FLAGS += -arch ppc + LINK_FLAGS += -arch ppc + LIB_LINK_FLAGS += -arch ppc +endif + +ifeq ($(arch),$(filter $(arch),armv7 armv7s arm64)) + CPLUS_FLAGS += -arch $(arch) + LINK_FLAGS += -arch $(arch) + LIB_LINK_FLAGS += -arch $(arch) +endif + +ifdef SDKROOT + CPLUS_FLAGS += -isysroot $(SDKROOT) + LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/ + LIB_LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/ +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ + +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += -arch x86_64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += -arch i386 +endif +ifeq ($(cfg), debug) + ASM_FLAGS += -g +endif + +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ + diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc new file mode 100644 index 0000000..65c7047 --- /dev/null +++ b/build/macos.gcc.inc @@ -0,0 +1,112 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +CPLUS = g++ +CONLY = gcc +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor +WARNING_SUPPRESS = -Wno-non-virtual-dtor +DYLIB_KEY = -dynamiclib +EXPORT_KEY = -Wl,-exported_symbols_list, +LIBDL = -ldl + +LIBS = -lpthread +LINK_FLAGS = +LIB_LINK_FLAGS = -dynamiclib -install_name @rpath/$(BUILDING_LIBRARY) +C_FLAGS = $(CPLUS_FLAGS) + +ifeq ($(cfg), release) + CPLUS_FLAGS = -g -O2 +else + CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG +endif + +CPLUS_FLAGS += -DUSE_PTHREAD + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 + LINK_FLAGS += -m64 + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 + LINK_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 +endif + +ifeq (ppc64,$(arch)) + CPLUS_FLAGS += -arch ppc64 + LINK_FLAGS += -arch ppc64 + LIB_LINK_FLAGS += -arch ppc64 +endif + +ifeq (ppc32,$(arch)) + CPLUS_FLAGS += -arch ppc + LINK_FLAGS += -arch ppc + LIB_LINK_FLAGS += -arch ppc +endif + +ifeq (armv7,$(arch)) + CPLUS_FLAGS += -arch armv7 + LINK_FLAGS += -arch armv7 + LIB_LINK_FLAGS += -arch armv7 +endif + +ifdef SDKROOT + CPLUS_FLAGS += -isysroot $(SDKROOT) + LIB_LINK_FLAGS += -L$(SDKROOT)/usr/lib/system -L$(SDKROOT)/usr/lib/ +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ + +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += -arch x86_64 +endif +ifeq (ia32,$(arch)) + ASM_FLAGS += -arch i386 +endif +ifeq ($(cfg), debug) + ASM_FLAGS += -g +endif + +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ + diff --git a/build/macos.icc.inc b/build/macos.icc.inc new file mode 100644 index 0000000..92a339b --- /dev/null +++ b/build/macos.icc.inc @@ -0,0 +1,106 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +CPLUS = icpc +CONLY = icc +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -w1 +ifneq (,$(shell icc -dumpversion | egrep "1[2-9]\.")) +SDL_FLAGS = -fstack-protector -Wformat -Wformat-security +endif + +DYLIB_KEY = -dynamiclib +EXPORT_KEY = -Wl,-exported_symbols_list, +LIBDL = -ldl + +LIBS = -lpthread +LINK_FLAGS = +LIB_LINK_FLAGS = -dynamiclib -static-intel -install_name @rpath/$(BUILDING_LIBRARY) +C_FLAGS = $(CPLUS_FLAGS) + +ifneq (,$(shell icc -dumpversion | egrep "^1[6-9]\.")) +OPENMP_FLAG = -qopenmp +else +OPENMP_FLAG = -openmp +endif + +# ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus +ifneq (,$(shell icc -dumpversion | egrep "^1[2-9]\.")) + CILK_AVAILABLE = yes +endif + +ifeq ($(cfg), release) + SDL_FLAGS += -D_FORTIFY_SOURCE=2 + CPLUS_FLAGS = -g -O2 -fno-omit-frame-pointer +else + CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG +endif + +CPLUS_FLAGS += -DUSE_PTHREAD + +ifneq (,$(codecov)) + CPLUS_FLAGS += -prof-gen=srcpos +endif + +# ICC 14.0 and higher support usage of libc++, clang standard library +MACOSX_DEPLOYMENT_TARGET ?= 10.11 +ifneq (,$(shell icc -dumpversion | egrep "^1[4-9]\.")) +ifneq (,$(stdlib)) + CPLUS_FLAGS += -stdlib=$(stdlib) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) + LIB_LINK_FLAGS += -stdlib=$(stdlib) -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) +endif +endif + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ + +ASM = as +ifeq (intel64,$(arch)) + ASM_FLAGS += -arch x86_64 +endif +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 + LINK_FLAGS += -m32 + LIB_LINK_FLAGS += -m32 + ASM_FLAGS += -arch i386 +endif +ifeq ($(cfg), debug) + ASM_FLAGS += -g +endif + +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ diff --git a/build/macos.inc b/build/macos.inc new file mode 100644 index 0000000..8df5bbd --- /dev/null +++ b/build/macos.inc @@ -0,0 +1,107 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +####### Detections and Commands ############################################### + +ifeq (icc,$(compiler)) + export COMPILER_VERSION := ICC: $(shell icc -V &1 | grep 'Version') + ifneq (,$(findstring running on IA-32, $(COMPILER_VERSION))) + export arch:=ia32 + else + ifneq (,$(findstring running on Intel(R) 64, $(COMPILER_VERSION))) + export arch:=intel64 + endif + endif + ifeq (,$(arch)) + $(warning "Unknown Intel compiler") + endif +endif + +ifndef arch + ifeq ($(shell /usr/sbin/sysctl -n hw.machine),Power Macintosh) + ifeq ($(shell /usr/sbin/sysctl -n hw.optional.64bitops),1) + export arch:=ppc64 + else + export arch:=ppc32 + endif + else + ifeq ($(shell /usr/sbin/sysctl -n hw.optional.x86_64 2>/dev/null),1) + export arch:=intel64 + else + export arch:=ia32 + endif + endif +endif + +ifndef runtime + clang_version:=$(shell clang -v 2>&1 >/dev/null | grep version | sed -e "s/.*version \(.*[0-9]\) .*/\1/") + ifndef os_version + os_version:=$(shell /usr/bin/sw_vers -productVersion) + endif + export runtime:=cc$(clang_version)_os$(os_version) +endif + +native_compiler := clang +export compiler ?= clang +debugger ?= lldb + +export stdlib ?= libc++ + +CMD=$(SHELL) -c +CWD=$(shell pwd) +RM?=rm -f +RD?=rmdir +MD?=mkdir -p +NUL= /dev/null +SLASH=/ +MAKE_VERSIONS=sh $(tbb_root)/build/version_info_macos.sh $(VERSION_FLAGS) >version_string.ver +MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh DY + +ifdef DYLD_LIBRARY_PATH + export DYLD_LIBRARY_PATH := .:$(DYLD_LIBRARY_PATH) +else + export DYLD_LIBRARY_PATH := . +endif + +####### Build settings ######################################################## + +OBJ=o +DLL=dylib +MALLOC_DLL?=$(DLL) +LIBEXT=dylib + +def_prefix = $(if $(findstring 64,$(arch)),mac64,mac32) + +TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst +TBB.DEF = $(TBB.LST:.lst=.def) +TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = $(TBB.DLL) +LINK_TBB.LIB = $(TBB.LIB) + +MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def +MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(MALLOC_DLL) +MALLOC.LIB = $(MALLOC.DLL) +LINK_MALLOC.LIB = $(MALLOC.LIB) + +MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(MALLOC_DLL) +MALLOCPROXY.LIB = $(MALLOCPROXY.DLL) +LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB) + +TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs) + +OPENCL.LIB = -framework OpenCL diff --git a/build/mic.icc.inc b/build/mic.icc.inc new file mode 100644 index 0000000..5574a8d --- /dev/null +++ b/build/mic.icc.inc @@ -0,0 +1,79 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = -fPIC +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -w1 +DYLIB_KEY = -shared -Wl,-soname=$@ +EXPORT_KEY = -Wl,--version-script, +NOINTRINSIC_KEY = -fno-builtin +LIBDL = -ldl +SDL_FLAGS = -fstack-protector -Wformat -Wformat-security +CPLUS = icpc +CONLY = icc + +ifeq (release,$(cfg)) + SDL_FLAGS += -D_FORTIFY_SOURCE=2 + CPLUS_FLAGS = -O2 -g -DUSE_PTHREAD +else + CPLUS_FLAGS = -O0 -g -DUSE_PTHREAD -DTBB_USE_DEBUG +endif + +ifneq (,$(codecov)) + CPLUS_FLAGS += -prof-gen=srcpos +endif + +ifneq (,$(shell icc -dumpversion | egrep "^1[6-9]\.")) +OPENMP_FLAG = -qopenmp +else +OPENMP_FLAG = -openmp +endif + +LIB_LINK_FLAGS = -shared -static-intel -Wl,-soname=$(BUILDING_LIBRARY) -z relro -z now +LIBS += -lpthread -lrt +C_FLAGS = $(CPLUS_FLAGS) +CILK_AVAILABLE = yes + +TBB_ASM.OBJ= +MALLOC_ASM.OBJ= + +CPLUS_FLAGS += -DHARNESS_INCOMPLETE_SOURCES=1 -D__TBB_MIC_NATIVE -DTBB_USE_EXCEPTIONS=0 -qopt-streaming-stores never +CPLUS += -mmic +CONLY += -mmic +LINK_FLAGS = -Wl,-rpath-link=. -rdynamic +# Tell the icc to not link against libcilk*. Otherwise icc tries to link and emits a warning message. +LIB_LINK_FLAGS += -no-intel-extensions + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ + + + diff --git a/build/mic.linux.inc b/build/mic.linux.inc new file mode 100644 index 0000000..b739d61 --- /dev/null +++ b/build/mic.linux.inc @@ -0,0 +1,43 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +ifeq ($(tbb_os),mic) + $(error MIC supports only cross-compilation. Specify "target=mic" instead.) +endif + +ifneq ($(BUILDING_PHASE),1) + # The same build prefix should be used in offload.inc + ifeq (,$(tbb_build_prefix)) + tbb_build_prefix=mic_icc$(CPF_SUFFIX) + endif + # For examples + mic_tbb_build_prefix=$(tbb_build_prefix) +endif + +MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(VERSION_FLAGS) >version_string.ver +MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh MIC_ MIC_ +def_prefix=lin64 + +TEST_LAUNCHER= +run_cmd ?= bash $(tbb_root)/build/mic.linux.launcher.sh $(largs) + +# detects whether examples are being built. +ifeq ($(BUILDING_PHASE),0) + export UI = con + export x64 = 64 +endif # examples diff --git a/build/mic.linux.launcher.sh b/build/mic.linux.launcher.sh new file mode 100644 index 0000000..ac69a43 --- /dev/null +++ b/build/mic.linux.launcher.sh @@ -0,0 +1,161 @@ +#!/bin/bash +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Usage: +# mic.linux.launcher.sh [-v] [-q] [-s] [-r ] [-u] [-l ] +# where: -v enables verbose output +# where: -q enables quiet mode +# where: -s runs the test in stress mode (until non-zero exit code or ctrl-c pressed) +# where: -r specifies number of times to repeat execution +# where: -u limits stack size +# where: -l specifies the library name to be assigned to LD_PRELOAD +# +# Libs and executable necessary for testing should be present in the current directory before running. +# Note: Do not remove the redirections to '/dev/null' in the script, otherwise the nightly test system will fail. +# +trap 'echo Error at line $LINENO while executing "$BASH_COMMAND"' ERR # +trap 'echo -e "\n*** Interrupted ***" && exit 1' SIGINT SIGQUIT # +# Process the optional arguments if present +while getopts "qvsr:ul:" flag # +do case $flag in # + s ) # Stress testing mode + echo Doing stress testing. Press Ctrl-C to terminate + run_env='stressed() { while $*; do :; done; };' # + run_prefix="stressed $run_prefix" ;; # + r ) # Repeats test n times + run_env="repeated() { for i in \$(seq 1 $OPTARG); do echo \$i of $OPTARG:; \$*; done; };" # + run_prefix="repeated $run_prefix" ;; # + l ) # Additional library + ldd_list+="$OPTARG " # + run_prefix+=" LD_PRELOAD=$OPTARG" ;; # + u ) # Set stack limit + run_prefix="ulimit -s 10240; $run_prefix" ;; # + q ) # Quiet mode, removes 'done' but prepends any other output by test name + SUPPRESS='>/dev/null' # + verbose=1 ;; # TODO: implement a better quiet mode + v ) # Verbose mode + verbose=1 ;; # +esac done # +shift `expr $OPTIND - 1` # +[ $verbose ] || SUPPRESS='>/dev/null' # +# +# Collect the executable name +fexename="$1" # +exename=`basename $1` # +shift # +# +: ${MICDEV:=mic0} # +RSH="sudo ssh $MICDEV" # +RCP="sudo scp" # +currentdir=$PWD # +# +# Prepare the target directory on the device +targetdir="`$RSH mktemp -d /tmp/tbbtestXXXXXX 2>/dev/null`" # +# Prepare the temporary directory on the host +hostdir="`mktemp -d /tmp/tbbtestXXXXXX 2>/dev/null`" # +# +function copy_files { # + [ $verbose ] && echo Going to copy $* # + eval "cp $* $hostdir/ $SUPPRESS 2>/dev/null || exit \$?" # + eval "$RCP $hostdir/* $MICDEV:$targetdir/ $SUPPRESS 2>/dev/null || exit \$?" # + eval "rm $hostdir/* $SUPPRESS 2>/dev/null || exit \$?" # +} # copy files +# +function clean_all() { # + eval "$RSH rm -fr $targetdir $SUPPRESS" ||: # + eval "rm -fr $hostdir $SUPPRESS" ||: # +} # clean all temporary files +# +function kill_interrupt() { # + echo -e "\n*** Killing remote $exename ***" && $RSH "killall $exename" # + clean_all # +} # kill target process +# +trap 'clean_all' SIGINT SIGQUIT # trap keyboard interrupt (control-c) +# +# Transfer the test executable file and its auxiliary libraries (named as {test}_dll.so) to the target device. +copy_files $fexename `ls ${exename%\.*}*.so 2>/dev/null ||:` # +# +# Collect all dependencies of the test and its auxiliary libraries to transfer them to the target device. +ldd_list+="libtbbmalloc*.so* libirml*.so* `$RSH ldd $targetdir/\* | grep = | cut -d= -f1 2>/dev/null`" # +fnamelist="" # +# +# Find the libraries and add them to the list. +# For example, go through MIC_LD_LIBRARY_PATH and add TBB libraries from the first +# directory that contains tbb files +mic_dir_list=`echo .:$MIC_LD_LIBRARY_PATH | tr : " "` # +[ $verbose ] && echo Searching libraries in $mic_dir_list +for name in $ldd_list; do # adds the first matched name in specified dirs + found="`find -L $mic_dir_list -name $name -a -readable -print -quit 2>/dev/null` "||: # + [ $verbose ] && echo File $name: $found + fnamelist+=$found +done # +# +# Remove extra spaces. +fnamelist=`echo $fnamelist` # +# Transfer collected executable and library files to the target device. +[ -n "$fnamelist" ] && copy_files $fnamelist +# +# Transfer input files used by example codes by scanning the executable argument list. +argfiles= # +args= # +for arg in "$@"; do # + if [ -r $arg ]; then # + argfiles+="$arg " # + args+="$(basename $arg) " # + else # + args+="$arg " # + fi # +done # +[ -n "$argfiles" ] && copy_files $argfiles # +# +# Get the list of transferred files +testfiles="`$RSH find $targetdir/ -type f | tr '\n' ' ' 2>/dev/null`" # +# +[ $verbose ] && echo Running $run_prefix ./$exename $args # +# Run the test on the target device +trap 'kill_interrupt' SIGINT SIGQUIT # trap keyboard interrupt (control-c) +trap - ERR # +run_env+="cd $targetdir; export LD_LIBRARY_PATH=.:\$LD_LIBRARY_PATH;" # +$RSH "$run_env $run_prefix ./$exename $args" # +# +# Delete the test files and get the list of output files +outfiles=`$RSH rm $testfiles 2>/dev/null; find $targetdir/ -type f 2>/dev/null` ||: # +if [ -n "$outfiles" ]; then # + for outfile in $outfiles; do # + filename=$(basename $outfile) # + subdir=$(dirname $outfile) # + subdir="${subdir#$targetdir}" # + [ -n $subdir ] subdir=$subdir/ # + # Create directories on host + [ ! -d "$hostdir/$subdir" ] && mkdir -p "$hostdir/$subdir" # + [ ! -d "$currentdir/$subdir" ] && mkdir -p "$currentdir/$subdir" # + # Copy the output file to the temporary directory on host + eval "$RCP -r '$MICDEV:${outfile#}' '$hostdir/$subdir$filename' $SUPPRESS 2>&1 || exit \$?" # + # Copy the output file from the temporary directory to the current directory + eval "cp '$hostdir/$subdir$filename' '$currentdir/$subdir$filename' $SUPPRESS 2>&1 || exit \$?" # + done # +fi # +# +# Clean up temporary directories +clean_all +# +# Return the exit code of the test. +exit $? # diff --git a/build/mic.offload.inc b/build/mic.offload.inc new file mode 100644 index 0000000..96f0800 --- /dev/null +++ b/build/mic.offload.inc @@ -0,0 +1,118 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +ifneq (mic,$(offload)) + $(error File mic.offload.inc should not be included directly. Use offload=mic instead.) +endif +ifneq (icc,$(compiler)) + $(error Only Intel(R) Compiler is supported for MIC offload compilation) +endif + +# The same build prefix should be used in mic.linux.inc +mic_tbb_build_prefix=mic_icc$(CPF_SUFFIX) +MIC_OFFLOAD_NATIVE_PATH?=../$(mic_tbb_build_prefix)_$(cfg) + +ifdef BUILDING_PHASE + ifeq ($(BUILDING_PHASE),1) + # Tests + export MIC_OFFLOAD_NATIVE_PATH + LINK_TBB_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(TBB.LIB) + LINK_TBB.LIB=-qoffload-option,mic,ld,"$(LINK_TBB_NATIVE.LIB)" $(TBB.LIB) + LINK_MALLOC_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(MALLOC.DLL) + LINK_MALLOC.LIB=-qoffload-option,mic,ld,"$(LINK_MALLOC_NATIVE.LIB)" $(MALLOC.LIB) + LINK_MALLOCPROXY_NATIVE.LIB=$(MIC_OFFLOAD_NATIVE_PATH)/$(MALLOCPROXY.DLL) + LINK_MALLOCPROXY.LIB=-qoffload-option,mic,ld,"$(LINK_MALLOCPROXY_NATIVE.LIB)" $(MALLOCPROXY.LIB) + + # Export extensions for test_launcher + export DLL + export TEST_EXT=offload.exe + OBJ=offload.o + + # Do not use -Werror because it is too strict for the early offload compiler. + # Need to set anything because WARNING_AS_ERROR_KEY should not be empty. + # Treat #2426 as a warning. Print errors only. + tbb_strict=0 + WARNING_AS_ERROR_KEY = Warning as error + WARNING_KEY = -diag-warning 2426 -w0 + + CXX_MIC_STUFF = -qoffload-attribute-target=mic -D__TBB_MIC_OFFLOAD=1 -qoffload-option,mic,compiler,"-D__TBB_MIC_OFFLOAD=1 $(CXX_MIC_NATIVE_STUFF)" + CXX_MIC_NATIVE_STUFF = -DHARNESS_INCOMPLETE_SOURCES=1 -D__TBB_MIC_NATIVE -DTBB_USE_EXCEPTIONS=0 + CPLUS_FLAGS += $(CXX_MIC_STUFF) + + # Some tests require that an executable exports its symbols. + LINK_FLAGS += -qoffload-option,mic,ld,"--export-dynamic" + + # libcoi_device.so is needed for COIProcessProxyFlush used in Harness. + LINK_FLAGS += -qoffload-option,mic,ld,"-lcoi_device" + + # DSO-linking semantics forces linking libpthread and librt to a test. + LINK_FLAGS += -qoffload-option,mic,ld,"-lpthread -lrt" + + .PHONY: FORCE + FORCE: + + $(MIC_OFFLOAD_NATIVE_PATH)/%_dll.$(DLL): FORCE + @$(MAKE) --no-print-directory -C "$(MIC_OFFLOAD_NATIVE_PATH)" target=mic offload= -f$(tbb_root)/build/Makefile.$(TESTFILE) $*_dll.$(DLL) + %_dll.$(DLL): $(MIC_OFFLOAD_NATIVE_PATH)/%_dll.$(DLL) FORCE + @$(MAKE) --no-print-directory offload= -f$(tbb_root)/build/Makefile.$(TESTFILE) $*_dll.$(DLL) + + .PRECIOUS: $(MIC_OFFLOAD_NATIVE_PATH)/%_dll.$(DLL) + + %.$(TEST_EXT): LINK_FILES+=-qoffload-option,mic,ld,"$(addprefix $(MIC_OFFLOAD_NATIVE_PATH)/,$(TEST_LIBS))" + + TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs) + + ifdef MIC_LD_LIBRARY_PATH + export MIC_LD_LIBRARY_PATH := $(MIC_OFFLOAD_NATIVE_PATH):$(MIC_LD_LIBRARY_PATH) + else + export MIC_LD_LIBRARY_PATH := $(MIC_OFFLOAD_NATIVE_PATH) + endif + else + # Examples + export UI = con + export x64 = 64 + endif +else + # Libraries + LIB_TARGETS = tbb tbbmalloc tbbproxy rml + addsuffixes = $(foreach suff,$(1),$(addsuffix $(suff),$(2))) + + .PHONY: $(call addsuffixes, _debug _release _debug_mic _release_mic,$(LIB_TARGETS)) + + # The dependence on *_debug and *_release targets unifies the offload support + # for top-level Makefile and src/Makefile + $(LIB_TARGETS): %: %_release %_debug + + # "override offload=" suppresses the "offload" variable value for nested makes + $(LIB_TARGETS) $(call addsuffixes, _debug _release,$(LIB_TARGETS)): override offload= + # Apply overriding for library builds + export offload + export tbb_build_prefix + # Add the dependency on target libraries + $(call addsuffixes, _debug _release,$(LIB_TARGETS)): %: %_mic + + # tbb_build_prefix should be overridden since we want to restart make in "clear" environment + $(call addsuffixes, _debug_mic _release_mic,$(LIB_TARGETS)): override tbb_build_prefix= + $(call addsuffixes, _debug_mic _release_mic,$(LIB_TARGETS)): %_mic: + @$(MAKE) --no-print-directory -C "$(full_tbb_root)/src" $* target=mic tbb_root=.. + + mic_clean: override tbb_build_prefix= + mic_clean: + @$(MAKE) --no-print-directory -C "$(full_tbb_root)/src" clean offload= target=mic tbb_root=.. + clean: mic_clean +endif diff --git a/build/suncc.map.pause b/build/suncc.map.pause new file mode 100644 index 0000000..a92d08e --- /dev/null +++ b/build/suncc.map.pause @@ -0,0 +1 @@ +hwcap_1 = OVERRIDE; \ No newline at end of file diff --git a/build/test_launcher.bat b/build/test_launcher.bat new file mode 100644 index 0000000..88c43dc --- /dev/null +++ b/build/test_launcher.bat @@ -0,0 +1,74 @@ +@echo off +REM +REM Copyright (c) 2005-2017 Intel Corporation +REM +REM Licensed under the Apache License, Version 2.0 (the "License"); +REM you may not use this file except in compliance with the License. +REM You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. +REM +REM +REM +REM +REM + +set cmd_line= +if DEFINED run_prefix set cmd_line=%run_prefix% +:while +if NOT "%1"=="" ( + REM Verbose mode + if "%1"=="-v" ( + set verbose=yes + GOTO continue + ) + REM Silent mode of 'make' requires additional support for associating + REM of test output with the test name. Verbose mode is the simplest way + if "%1"=="-q" ( + set verbose=yes + GOTO continue + ) + REM Run in stress mode + if "%1"=="-s" ( + echo Doing stress testing. Press Ctrl-C to terminate + set stress=yes + GOTO continue + ) + REM Repeat execution specified number of times + if "%1"=="-r" ( + set repeat=%2 + SHIFT + GOTO continue + ) + REM no LD_PRELOAD under Windows + REM but run the test to check "#pragma comment" construction + if "%1"=="-l" ( + REM The command line may specify -l with empty dll name, + REM e.g. "test_launcher.bat -l app.exe". If the dll name is + REM empty then %2 contains the application name and the SHIFT + REM operation is not necessary. + if exist "%3" SHIFT + GOTO continue + ) + REM no need to setup up stack size under Windows + if "%1"=="-u" GOTO continue + set cmd_line=%cmd_line% %1 +:continue + SHIFT + GOTO while +) +set cmd_line=%cmd_line:./=.\% +if DEFINED verbose echo Running %cmd_line% +if DEFINED stress set cmd_line=%cmd_line% ^& IF NOT ERRORLEVEL 1 GOTO stress +:stress +if DEFINED repeat ( + for /L %%i in (1,1,%repeat%) do echo %%i of %repeat%: & %cmd_line% +) else ( + %cmd_line% +) diff --git a/build/test_launcher.sh b/build/test_launcher.sh new file mode 100644 index 0000000..831136f --- /dev/null +++ b/build/test_launcher.sh @@ -0,0 +1,94 @@ +#!/bin/sh +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Usage: +# test_launcher.sh [-v] [-q] [-s] [-r ] [-u] [-l ] +# where: -v enables verbose output +# where: -q enables quiet mode +# where: -s runs the test in stress mode (until non-zero exit code or ctrl-c pressed) +# where: -r specifies number of times to repeat execution +# where: -u limits stack size +# where: -l specifies the library name to be assigned to LD_PRELOAD + +while getopts "qvsr:ul:" flag # +do case $flag in # + s ) # Stress testing mode + run_prefix="stressed $run_prefix" ;; # + r ) # Repeats test n times + repeat=$OPTARG # + run_prefix="repeated $run_prefix" ;; # + l ) if [ `uname` = 'Linux' ] ; then # + LD_PRELOAD=$OPTARG # + elif [ `uname` = 'Darwin' ] ; then # + DYLD_INSERT_LIBRARIES=$OPTARG # + else # + echo 'skip' # + exit # + fi ;; # + u ) # Set stack limit + ulimit -s 10240 ;; # + q ) # Quiet mode, removes 'done' but prepends any other output by test name + OUTPUT='2>&1 | sed -e "s/done//;/^[[:space:]]*$/d;s!^!$1: !"' ;; # + v ) # Verbose mode + verbose=1 ;; # +esac done # +shift `expr $OPTIND - 1` # +if [ $MIC_OFFLOAD_NATIVE_PATH ] ; then # + LIB_NAME=${1/%.$TEST_EXT/_dll.$DLL} # + if [ -f "$MIC_OFFLOAD_NATIVE_PATH/$LIB_NAME" ]; then # + [ -z "$MIC_CARD" ] && MIC_CARD=mic0 # + TMPDIR_HOST=`mktemp -d /tmp/tbbtestXXXXXX` # + TMPDIR_MIC=`sudo ssh $MIC_CARD mktemp -d /tmp/tbbtestXXXXXX` # + sudo ssh $MIC_CARD "chmod +x $TMPDIR_MIC" # + # Test specific library may depend on libtbbmalloc* + cp "$MIC_OFFLOAD_NATIVE_PATH/$LIB_NAME" "$MIC_OFFLOAD_NATIVE_PATH"/libtbbmalloc* "$TMPDIR_HOST" >/dev/null 2>/dev/null # + sudo scp "$TMPDIR_HOST"/* $MIC_CARD:"$TMPDIR_MIC" >/dev/null 2>/dev/null # + + LD_LIBRARY_PATH=$TMPDIR_MIC:$LD_LIBRARY_PATH # + export LD_LIBRARY_PATH # + fi # +fi # +stressed() { echo Doing stress testing. Press Ctrl-C to terminate # + while :; do $*; done;# +} # +repeated() { # + i=0; while [ "$i" -lt $repeat ]; do i=`expr $i + 1`; echo $i of $repeat:; $*; done # +} # +# DYLD_LIBRARY_PATH can be purged on OS X 10.11, set it again +if [ `uname` = 'Darwin' -a -z "$DYLD_LIBRARY_PATH" ] ; then # + DYLD_LIBRARY_PATH=. # + export DYLD_LIBRARY_PATH # +fi # +# Run the command line passed via parameters +[ $verbose ] && echo Running $run_prefix $* # +if [ -n "$LD_PRELOAD" ] ; then # + export LD_PRELOAD # +elif [ -n "$DYLD_INSERT_LIBRARIES" ] ; then # + export DYLD_INSERT_LIBRARIES # +fi # +exec 4>&1 # extracting exit code of the first command in pipeline needs duplicated stdout +# custom redirection needs eval, otherwise shell cannot parse it +err=`eval '( $run_prefix $* || echo \$? >&3; )' ${OUTPUT} 3>&1 >&4` # +[ -z "$err" ] || echo $1: exited with error $err # +if [ $MIC_OFFLOAD_NATIVE_PATH ] ; then # + sudo ssh $MIC_CARD rm -fr "$TMPDIR_MIC" >/dev/null 2>/dev/null # + rm -fr "$TMPDIR_HOST" >/dev/null 2>/dev/null # +fi # +exit $err # diff --git a/build/version_info_aix.sh b/build/version_info_aix.sh new file mode 100644 index 0000000..622a22e --- /dev/null +++ b/build/version_info_aix.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Script used to generate version info string +echo "#define __TBB_VERSION_STRINGS(N) \\" +echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \' +# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out +echo '#N": BUILD_OS'"\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \' +echo '#N": BUILD_KERNEL'"\t"`uname -srv`'" ENDL \' +echo '#N": BUILD_GCC'"\t\t"`g++ --version &1 | grep 'g++'`'" ENDL \' +[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \' +echo '#N": BUILD_LIBC'"\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \' +echo '#N": BUILD_LD'"\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \' +echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \' +echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \' +echo "" +echo "#define __TBB_DATETIME \""`date -u`"\"" diff --git a/build/version_info_android.sh b/build/version_info_android.sh new file mode 100644 index 0000000..2439207 --- /dev/null +++ b/build/version_info_android.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Script used to generate version info string +echo "#define __TBB_VERSION_STRINGS(N) \\" +echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \' +# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out +echo '#N": BUILD_OS'"\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \' +echo '#N": BUILD_TARGET_CXX'"\t"`$TARGET_CXX --version | head -n1`'" ENDL \' +[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \' +[ -z "$ndk_version" ] || echo '#N": BUILD_NDK'"\t\t$ndk_version"'" ENDL \' +echo '#N": BUILD_LD'"\t\t"`${tbb_tool_prefix}ld -v 2>&1 | grep 'ld'`'" ENDL \' +echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \' +echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \' +echo "" +echo "#define __TBB_DATETIME \""`date -u`"\"" diff --git a/build/version_info_linux.sh b/build/version_info_linux.sh new file mode 100644 index 0000000..622a22e --- /dev/null +++ b/build/version_info_linux.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Script used to generate version info string +echo "#define __TBB_VERSION_STRINGS(N) \\" +echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \' +# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out +echo '#N": BUILD_OS'"\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \' +echo '#N": BUILD_KERNEL'"\t"`uname -srv`'" ENDL \' +echo '#N": BUILD_GCC'"\t\t"`g++ --version &1 | grep 'g++'`'" ENDL \' +[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \' +echo '#N": BUILD_LIBC'"\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \' +echo '#N": BUILD_LD'"\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \' +echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \' +echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \' +echo "" +echo "#define __TBB_DATETIME \""`date -u`"\"" diff --git a/build/version_info_macos.sh b/build/version_info_macos.sh new file mode 100644 index 0000000..397b108 --- /dev/null +++ b/build/version_info_macos.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Script used to generate version info string +echo "#define __TBB_VERSION_STRINGS(N) \\" +echo '#N": BUILD_HOST'"\t\t"`hostname -s`" ("`arch`")"'" ENDL \' +echo '#N": BUILD_OS'"\t\t"`sw_vers -productName`" version "`sw_vers -productVersion`'" ENDL \' +echo '#N": BUILD_KERNEL'"\t"`uname -v`'" ENDL \' +echo '#N": BUILD_CLANG'"\t"`clang --version &1 | grep 'version '`'" ENDL \' +echo '#N": BUILD_XCODE'"\t"`xcodebuild -version &1 | grep 'Xcode'`'" ENDL \' +[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \' +echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \' +echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \' +echo "" +echo "#define __TBB_DATETIME \""`date -u`"\"" diff --git a/build/version_info_sunos.sh b/build/version_info_sunos.sh new file mode 100644 index 0000000..96cd9ba --- /dev/null +++ b/build/version_info_sunos.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Script used to generate version info string +echo "#define __TBB_VERSION_STRINGS(N) \\" +echo '#N": BUILD_HOST'"\t"`hostname`" ("`arch`")"'" ENDL \' +echo '#N": BUILD_OS'"\t\t"`uname`'" ENDL \' +echo '#N": BUILD_KERNEL'"\t"`uname -srv`'" ENDL \' +echo '#N": BUILD_SUNCC'"\t"`CC -V &1 | grep 'C++'`'" ENDL \' +[ -z "$COMPILER_VERSION" ] || echo '#N": BUILD_COMPILER'"\t"$COMPILER_VERSION'" ENDL \' +echo '#N": BUILD_TARGET'"\t$arch on $runtime"'" ENDL \' +echo '#N": BUILD_COMMAND'"\t"$*'" ENDL \' +echo "" +echo "#define __TBB_DATETIME \""`date -u`"\"" diff --git a/build/version_info_windows.js b/build/version_info_windows.js new file mode 100644 index 0000000..5fd8b8a --- /dev/null +++ b/build/version_info_windows.js @@ -0,0 +1,95 @@ +// Copyright (c) 2005-2017 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// +// + +var WshShell = WScript.CreateObject("WScript.Shell"); + +var tmpExec; + +WScript.Echo("#define __TBB_VERSION_STRINGS(N) \\"); + +//Getting BUILD_HOST +WScript.echo( "#N \": BUILD_HOST\\t\\t" + + WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") + + "\" ENDL \\" ); + +//Getting BUILD_OS +tmpExec = WshShell.Exec("cmd /c ver"); +while ( tmpExec.Status == 0 ) { + WScript.Sleep(100); +} +tmpExec.StdOut.ReadLine(); + +WScript.echo( "#N \": BUILD_OS\\t\\t" + + tmpExec.StdOut.ReadLine() + + "\" ENDL \\" ); + +if ( WScript.Arguments(0).toLowerCase().match("gcc") ) { + tmpExec = WshShell.Exec(WScript.Arguments(0) + " --version"); + WScript.echo( "#N \": BUILD_GCC\\t\\t" + + tmpExec.StdOut.ReadLine() + + "\" ENDL \\" ); + +} else if ( WScript.Arguments(0).toLowerCase().match("clang") ) { + tmpExec = WshShell.Exec(WScript.Arguments(0) + " --version"); + WScript.echo( "#N \": BUILD_CLANG\\t" + + tmpExec.StdOut.ReadLine() + + "\" ENDL \\" ); + +} else { // MS / Intel compilers + //Getting BUILD_CL + tmpExec = WshShell.Exec("cmd /c echo #define 0 0>empty.cpp"); + tmpExec = WshShell.Exec("cl -c empty.cpp "); + while ( tmpExec.Status == 0 ) { + WScript.Sleep(100); + } + var clVersion = tmpExec.StdErr.ReadLine(); + WScript.echo( "#N \": BUILD_CL\\t\\t" + + clVersion + + "\" ENDL \\" ); + + //Getting BUILD_COMPILER + if ( WScript.Arguments(0).toLowerCase().match("icl") ) { + tmpExec = WshShell.Exec("icl -c empty.cpp "); + while ( tmpExec.Status == 0 ) { + WScript.Sleep(100); + } + WScript.echo( "#N \": BUILD_COMPILER\\t" + + tmpExec.StdErr.ReadLine() + + "\" ENDL \\" ); + } else { + WScript.echo( "#N \": BUILD_COMPILER\\t\\t" + + clVersion + + "\" ENDL \\" ); + } + tmpExec = WshShell.Exec("cmd /c del /F /Q empty.obj empty.cpp"); +} + +//Getting BUILD_TARGET +WScript.echo( "#N \": BUILD_TARGET\\t" + + WScript.Arguments(1) + + "\" ENDL \\" ); + +//Getting BUILD_COMMAND +WScript.echo( "#N \": BUILD_COMMAND\\t" + WScript.Arguments(2) + "\" ENDL" ); + +//Getting __TBB_DATETIME and __TBB_VERSION_YMD +var date = new Date(); +WScript.echo( "#define __TBB_DATETIME \"" + date.toUTCString() + "\"" ); +WScript.echo( "#define __TBB_VERSION_YMD " + date.getUTCFullYear() + ", " + + (date.getUTCMonth() > 8 ? (date.getUTCMonth()+1):("0"+(date.getUTCMonth()+1))) + + (date.getUTCDate() > 9 ? date.getUTCDate():("0"+date.getUTCDate())) ); diff --git a/build/vs2013/index.html b/build/vs2013/index.html new file mode 100644 index 0000000..4e597b6 --- /dev/null +++ b/build/vs2013/index.html @@ -0,0 +1,30 @@ + + + +

Overview

+This directory contains the Visual Studio* 2013 solution to build Intel® Threading Building Blocks. + + +

Files

+
+
makefile.sln +
Solution file.
+
tbb.vcxproj +
Library project file.
+
tbbmalloc.vcxproj +
Scalable allocator library project file.
+
tbbmalloc_proxy.vcxproj +
Standard allocator replacement project file.
+
+ +
+Up to parent directory +

+Copyright © 2017 Intel Corporation. All Rights Reserved. +

+Intel and the Intel logo are trademarks of Intel Corporation +or its subsidiaries in the U.S. and/or other countries. +

+* Other names and brands may be claimed as the property of others. + + diff --git a/build/vs2013/makefile.sln b/build/vs2013/makefile.sln new file mode 100644 index 0000000..b913551 --- /dev/null +++ b/build/vs2013/makefile.sln @@ -0,0 +1,80 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8898CE0B-0BFB-45AE-AA71-83735ED2510D}" + ProjectSection(SolutionItems) = preProject + index.html = index.html + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbb", "tbb.vcxproj", "{F62787DD-1327-448B-9818-030062BCFAA5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc", "tbbmalloc.vcxproj", "{B15F131E-328A-4D42-ADC2-9FF4CA6306D8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tbbmalloc_proxy", "tbbmalloc_proxy.vcxproj", "{02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Debug-MT|Win32 = Debug-MT|Win32 + Debug-MT|x64 = Debug-MT|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Release-MT|Win32 = Release-MT|Win32 + Release-MT|x64 = Release-MT|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.ActiveCfg = Debug|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|Win32.Build.0 = Debug|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.ActiveCfg = Debug|x64 + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug|x64.Build.0 = Debug|x64 + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|Win32.Build.0 = Debug-MT|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.ActiveCfg = Debug-MT|x64 + {F62787DD-1327-448B-9818-030062BCFAA5}.Debug-MT|x64.Build.0 = Debug-MT|x64 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.ActiveCfg = Release|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release|Win32.Build.0 = Release|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.ActiveCfg = Release|x64 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release|x64.Build.0 = Release|x64 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.ActiveCfg = Release-MT|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|Win32.Build.0 = Release-MT|Win32 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.ActiveCfg = Release-MT|x64 + {F62787DD-1327-448B-9818-030062BCFAA5}.Release-MT|x64.Build.0 = Release-MT|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.ActiveCfg = Debug|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|Win32.Build.0 = Debug|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.ActiveCfg = Debug|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug|x64.Build.0 = Debug|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|Win32.Build.0 = Debug-MT|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.ActiveCfg = Debug-MT|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Debug-MT|x64.Build.0 = Debug-MT|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.ActiveCfg = Release|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|Win32.Build.0 = Release|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.ActiveCfg = Release|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release|x64.Build.0 = Release|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.ActiveCfg = Release-MT|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|Win32.Build.0 = Release-MT|Win32 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.ActiveCfg = Release-MT|x64 + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8}.Release-MT|x64.Build.0 = Release-MT|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.ActiveCfg = Debug|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|Win32.Build.0 = Debug|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.ActiveCfg = Debug|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug|x64.Build.0 = Debug|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.ActiveCfg = Debug-MT|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|Win32.Build.0 = Debug-MT|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.ActiveCfg = Debug-MT|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Debug-MT|x64.Build.0 = Debug-MT|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.ActiveCfg = Release|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|Win32.Build.0 = Release|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.ActiveCfg = Release|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release|x64.Build.0 = Release|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.ActiveCfg = Release-MT|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|Win32.Build.0 = Release-MT|Win32 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.ActiveCfg = Release-MT|x64 + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7}.Release-MT|x64.Build.0 = Release-MT|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/build/vs2013/tbb.vcxproj b/build/vs2013/tbb.vcxproj new file mode 100644 index 0000000..7329d81 --- /dev/null +++ b/build/vs2013/tbb.vcxproj @@ -0,0 +1,696 @@ + + + + + Debug-MT + Win32 + + + Debug-MT + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release-MT + Win32 + + + Release-MT + x64 + + + Release + Win32 + + + Release + x64 + + + + {F62787DD-1327-448B-9818-030062BCFAA5} + tbb + Win32Proj + + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(ProjectName)_debug + $(ProjectName)_debug + $(ProjectName)_debug + $(ProjectName)_debug + + + + /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level4 + ProgramDatabase + + + /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb_debug.dll + true + Windows + false + + + MachineX86 + + + + + X64 + + + /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb_debug.dll + true + Windows + false + + + MachineX64 + false + + + + + /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreadedDLL + + + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb.dll + true + Windows + true + true + false + + + MachineX86 + + + + + X64 + + + /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreadedDLL + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb.dll + true + Windows + true + true + false + + + MachineX64 + false + + + + + /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level4 + ProgramDatabase + + + /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb_debug.dll + true + Windows + false + + + MachineX86 + + + + + X64 + + + /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb_debug.dll + true + Windows + false + + + MachineX64 + false + + + + + /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreaded + + + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb.dll + true + Windows + true + true + false + + + MachineX86 + + + + + X64 + + + /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBB_BUILD=1 /W4 /I../../src /I../../src/rml/include /I../../include + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreaded + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbb.def" %(AdditionalOptions) + $(OutDir)tbb.dll + true + Windows + true + true + false + + + MachineX64 + false + + + + + /coff /Zi + true + true + /coff /Zi + true + true + /coff + true + true + /coff + true + true + + + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + + + true + building intel64_misc.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building intel64_misc.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building intel64_misc.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building intel64_misc.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/intel64_misc.asm + $(IntDir)%(FileName).obj;%(Outputs) + + + /coff /Zi + true + true + /coff /Zi + true + true + /coff + true + true + /coff + true + true + + + true + building itsx.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building itsx.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building itsx.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building itsx.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/itsx.asm + $(IntDir)%(FileName).obj;%(Outputs) + + + /coff /Zi + true + true + /coff /Zi + /coff /Zi + true + true + /coff /Zi + /coff + true + true + /coff + true + true + + + + + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + + + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + true + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + generating tbb.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbb-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBB_BUILD=1 /I../../src /I../../include >"$(IntDir)tbb.def" + + $(IntDir)tbb.def;%(Outputs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + + + + + + + \ No newline at end of file diff --git a/build/vs2013/tbbmalloc.vcxproj b/build/vs2013/tbbmalloc.vcxproj new file mode 100644 index 0000000..90d5fe1 --- /dev/null +++ b/build/vs2013/tbbmalloc.vcxproj @@ -0,0 +1,558 @@ + + + + + Debug-MT + Win32 + + + Debug-MT + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release-MT + Win32 + + + Release-MT + x64 + + + Release + Win32 + + + Release + x64 + + + + {B15F131E-328A-4D42-ADC2-9FF4CA6306D8} + tbbmalloc + Win32Proj + + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(ProjectName)_debug + $(ProjectName)_debug + $(ProjectName)_debug + $(ProjectName)_debug + + + + /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + Level4 + ProgramDatabase + false + + + /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc_debug.dll + true + Windows + false + + + MachineX86 + + + + + X64 + + + /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + Disabled + .;%(AdditionalIncludeDirectories) + false + Default + MultiThreadedDebugDLL + true + Level4 + ProgramDatabase + false + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc_debug.dll + true + Windows + false + + + MachineX64 + + + + + /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreadedDLL + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc.dll + true + Windows + true + true + false + + + MachineX86 + + + + + X64 + + + /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreadedDLL + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc.dll + true + Windows + true + true + false + + + MachineX64 + + + + + /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + Level4 + ProgramDatabase + false + + + /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc_debug.dll + true + Windows + false + + + MachineX86 + + + + + X64 + + + /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + Disabled + .;%(AdditionalIncludeDirectories) + false + Default + MultiThreadedDebug + true + Level4 + ProgramDatabase + false + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc_debug.dll + true + Windows + false + + + MachineX64 + + + + + /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreaded + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc.dll + true + Windows + true + true + false + MachineX86 + + + + + X64 + + + /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc /I. + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + MultiThreaded + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DEF:"$(IntDir)tbbmalloc.def" %(AdditionalOptions) + $(OutDir)tbbmalloc.dll + true + Windows + true + true + false + + + MachineX64 + + + + + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DUSE_FRAME_POINTER /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + true + building atomic_support.obj + ml64 /Fo"$(IntDir)%(FileName).obj" /DEM64T=1 /c /Zi ../../src/tbb/intel64-masm/atomic_support.asm + $(IntDir)%(FileName).obj;%(Outputs) + + + + + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbb/win32-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + + + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + true + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbb/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + generating tbbmalloc.def file + cl /nologo /TC /EP ../../src/tbbmalloc/win64-tbbmalloc-export.def /DTBB_USE_DEBUG /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 /D__TBBMALLOC_BUILD=1 >"$(IntDir)tbbmalloc.def" + + $(IntDir)tbbmalloc.def;%(Outputs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + + + + + {f62787dd-1327-448b-9818-030062bcfaa5} + false + + + + + + + \ No newline at end of file diff --git a/build/vs2013/tbbmalloc_proxy.vcxproj b/build/vs2013/tbbmalloc_proxy.vcxproj new file mode 100644 index 0000000..758bb51 --- /dev/null +++ b/build/vs2013/tbbmalloc_proxy.vcxproj @@ -0,0 +1,425 @@ + + + + + Debug-MT + Win32 + + + Debug-MT + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release-MT + Win32 + + + Release-MT + x64 + + + Release + Win32 + + + Release + x64 + + + + {02F61511-D5B6-46E6-B4BB-DEAA96E6BCC7} + tbbmalloc_proxy + Win32Proj + + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + DynamicLibrary + NotSet + true + v120 + + + DynamicLibrary + NotSet + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(ProjectName)_debug + $(ProjectName)_debug + $(ProjectName)_debug + $(ProjectName)_debug + + + + /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + Sync + Default + MultiThreadedDebugDLL + + + Level4 + ProgramDatabase + + + /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy_debug.dll + true + Windows + false + + + MachineX86 + + + + + X64 + + + /c /MDd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + Disabled + .;%(AdditionalIncludeDirectories) + false + + + Default + MultiThreadedDebugDLL + true + + + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy_debug.dll + true + Windows + false + + + MachineX64 + + + + + /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + MultiThreadedDLL + + + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy.dll + true + Windows + true + true + false + + + MachineX86 + + + + + X64 + + + /c /MD /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + MultiThreadedDLL + + + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy.dll + true + Windows + true + true + false + + + MachineX64 + + + + + /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + Disabled + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + true + Sync + Default + MultiThreadedDebug + + + Level4 + ProgramDatabase + + + /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy_debug.dll + true + Windows + false + + + MachineX86 + + + + + X64 + + + /c /MTd /Od /Ob0 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=tbb_debug.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + Disabled + .;%(AdditionalIncludeDirectories) + false + + + Default + MultiThreadedDebug + true + + + Level4 + ProgramDatabase + false + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy_debug.dll + true + Windows + false + + + MachineX64 + + + + + /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + MultiThreaded + + + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy.dll + true + Windows + true + true + false + + + MachineX86 + + + + + X64 + + + /c /MT /O2 /Zi /EHsc /GR /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=tbb.lib /DDO_ITT_NOTIFY /GS /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0502 /W4 /D__TBBMALLOC_BUILD=1 /I../../src /I../../src/rml/include /I../../include /I../../src/tbbmalloc /I../../src/tbbmalloc + .;%(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + + + MultiThreaded + + + Level4 + ProgramDatabase + + + /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO %(AdditionalOptions) + $(OutDir)tbbmalloc_proxy.dll + true + Windows + true + true + false + + + MachineX64 + + + + + + + + + + + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + /I../../src /I../../include /DDO_ITT_NOTIFY /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0400 %(AdditionalOptions) + + + + + + + {b15f131e-328a-4d42-adc2-9ff4ca6306d8} + false + + + + + + + \ No newline at end of file diff --git a/build/vs2013/version_string.ver b/build/vs2013/version_string.ver new file mode 100644 index 0000000..5d8f04e --- /dev/null +++ b/build/vs2013/version_string.ver @@ -0,0 +1 @@ +#define __TBB_VERSION_STRINGS(N) "Empty" diff --git a/build/windows.cl.inc b/build/windows.cl.inc new file mode 100644 index 0000000..3906d08 --- /dev/null +++ b/build/windows.cl.inc @@ -0,0 +1,158 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +#------------------------------------------------------------------------------ +# Define compiler-specific variables. +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Setting compiler flags. +#------------------------------------------------------------------------------ +CPLUS = cl /nologo +LINK_FLAGS = /link /nologo +LIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DYNAMICBASE /NXCOMPAT + +ifneq (,$(stdver)) + CXX_STD_FLAGS = /std:$(stdver) +endif + +ifeq ($(arch), ia32) + LIB_LINK_FLAGS += /SAFESEH +endif + +ifeq ($(runtime), vc_mt) + MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d) +else + MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d) +endif +EH_FLAGS = $(if $(no_exceptions),/EHs-,/EHsc /GR) + +ifeq ($(cfg), release) + CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=$(TBB.LIB) + ASM_FLAGS = +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=$(TBB.LIB) + ASM_FLAGS = /DUSE_FRAME_POINTER +endif + +ZW_KEY = /ZW:nostdlib + +ifneq (,$(filter win8ui,$(target_app) $(target_ui))) + CPLUS_FLAGS += $(ZW_KEY) /D "_UNICODE" /D "UNICODE" /D "WINAPI_FAMILY=WINAPI_FAMILY_APP" + _WIN32_WINNT = 0x0602 +else ifneq (,$(filter uwp,$(target_app) $(target_ui))) + CPLUS_FLAGS += $(ZW_KEY) /D "_UNICODE" /D "UNICODE" /D "WINAPI_FAMILY=WINAPI_FAMILY_APP" + _WIN32_WINNT = 0x0A00 + LIB_LINK_FLAGS += /NODEFAULTLIB:kernel32.lib OneCore.lib +else + CPLUS_FLAGS += /DDO_ITT_NOTIFY +endif +ifneq (,$(filter store,$(target_mode) $(target_ui_mode))) +# it is necessary to source vcvars with 'store' argument in production + LIB_LINK_FLAGS += /APPCONTAINER +endif + +CPLUS_FLAGS += /GS + +COMPILE_ONLY = /c +PREPROC_ONLY = /TP /EP +INCLUDE_KEY = /I +DEFINE_KEY = /D +OUTPUT_KEY = /Fe +OUTPUTOBJ_KEY = /Fo +WARNING_AS_ERROR_KEY = /WX +WARNING_SUPPRESS = $(if $(no_exceptions),/wd4530 /wd4577) +BIGOBJ_KEY = /bigobj + +ifeq ($(runtime),vc7.1) + WARNING_KEY = /W3 +else + WARNING_KEY = /W4 + OPENMP_FLAG = /openmp +endif + +DYLIB_KEY = /DLL +EXPORT_KEY = /DEF: +NODEFAULTLIB_KEY = /Zl +NOINTRINSIC_KEY = /Oi- + +INCLUDE_TEST_HEADERS = /FI$(tbb_root)/src/test/harness_preload.h + +ifeq ($(runtime),vc8) + WARNING_KEY += /Wp64 + CPLUS_FLAGS += /D_USE_RTM_VERSION +endif + +# Since VS2012, VC++ provides /volatile option to control semantics of volatile variables. +# We want to use strict ISO semantics in the library and tests +ifeq (ok,$(call detect_js,/minversion cl 17)) + CPLUS_FLAGS += /volatile:iso +endif + +# Since VS2013, VC++ uses the same .pdb file for different sources so we need +# to add /FS (Force Synchronous PDB Writes) +ifeq (ok,$(call detect_js,/minversion cl 18)) + CPLUS_FLAGS += /FS +endif + +CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \ + /D_WIN32_WINNT=$(_WIN32_WINNT) +C_FLAGS = $(subst $(ZW_KEY),,$(subst $(EH_FLAGS),,$(CPLUS_FLAGS))) + +#------------------------------------------------------------------------------ +# End of setting compiler flags. +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASSEMBLY_SOURCE=$(arch)-masm +ifeq (intel64,$(arch)) + ASM=ml64 /nologo + ASM_FLAGS += /DEM64T=1 /c /Zi + TBB_ASM.OBJ = atomic_support.obj intel64_misc.obj itsx.obj + MALLOC_ASM.OBJ = atomic_support.obj +else +ifeq (armv7,$(arch)) + ASM= + TBB_ASM.OBJ= +else + ASM=ml /nologo + ASM_FLAGS += /c /coff /Zi /safeseh + TBB_ASM.OBJ = atomic_support.obj lock_byte.obj itsx.obj +endif +endif +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ +M_CPLUS_FLAGS = $(CPLUS_FLAGS) +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# End of define compiler-specific variables. +#------------------------------------------------------------------------------ diff --git a/build/windows.gcc.inc b/build/windows.gcc.inc new file mode 100644 index 0000000..be9842c --- /dev/null +++ b/build/windows.gcc.inc @@ -0,0 +1,142 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +#------------------------------------------------------------------------------ +# Overriding settings from windows.inc +#------------------------------------------------------------------------------ + +SLASH= $(strip \) +OBJ = o +LIBEXT = dll # MinGW allows linking with DLLs directly + +TBB.RES = +MALLOC.RES = +RML.RES = +TBB.MANIFEST = +MALLOC.MANIFEST = +RML.MANIFEST = + +ifeq (ia32,$(arch)) + TBB.LST = $(tbb_root)/src/tbb/lin32-tbb-export.lst +else + TBB.LST = $(tbb_root)/src/tbb/win64-gcc-tbb-export.lst +endif +MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-gcc-tbbmalloc-export.def +RML.DEF = $(RML_SERVER_ROOT)/lin-rml-export.def + +LINK_TBB.LIB = $(TBB.LIB) +# no TBB proxy for the configuration +PROXY.LIB = + +#------------------------------------------------------------------------------ +# End of overridden settings +#------------------------------------------------------------------------------ +# Compiler-specific variables +#------------------------------------------------------------------------------ + +CPLUS = g++ +COMPILE_ONLY = -c -MMD +PREPROC_ONLY = -E -x c++ +INCLUDE_KEY = -I +DEFINE_KEY = -D +OUTPUT_KEY = -o # +OUTPUTOBJ_KEY = -o # +PIC_KEY = +WARNING_AS_ERROR_KEY = -Werror +WARNING_KEY = -Wall +TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wno-uninitialized +WARNING_SUPPRESS = -Wno-parentheses -Wno-uninitialized -Wno-non-virtual-dtor +DYLIB_KEY = -shared +LIBDL = +EXPORT_KEY = -Wl,--version-script, +LIBS = -lpsapi +BIGOBJ_KEY = -Wa,-mbig-obj + +#------------------------------------------------------------------------------ +# End of compiler-specific variables +#------------------------------------------------------------------------------ +# Command lines +#------------------------------------------------------------------------------ + +LINK_FLAGS = -Wl,--enable-auto-import +LIB_LINK_FLAGS = $(DYLIB_KEY) + +# gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them +ifeq (ok,$(call detect_js,/minversion gcc 4.8)) + RTM_KEY = -mrtm +endif + +# gcc 6.0 and later have -flifetime-dse option that controls +# elimination of stores done outside the object lifetime +ifeq (ok,$(call detect_js,/minversion gcc 6.0)) + # keep pre-contruction stores for zero initialization + DSE_KEY = -flifetime-dse=1 +endif + +ifeq ($(cfg), release) + CPLUS_FLAGS = -g -O2 +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG +endif + +CPLUS_FLAGS += -DUSE_WINTHREAD +CPLUS_FLAGS += -D_WIN32_WINNT=$(_WIN32_WINNT) + +# MinGW specific +CPLUS_FLAGS += -DMINGW_HAS_SECURE_API=1 -D__MSVCRT_VERSION__=0x0700 -msse -mthreads + +CONLY = gcc +debugger = gdb +C_FLAGS = $(CPLUS_FLAGS) + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 $(RTM_KEY) + LIB_LINK_FLAGS += -m64 +endif + +ifeq (ia32,$(arch)) + CPLUS_FLAGS += -m32 -march=i686 $(RTM_KEY) + LIB_LINK_FLAGS += -m32 +endif + +# For examples +export UNIXMODE = 1 + +#------------------------------------------------------------------------------ +# End of command lines +#------------------------------------------------------------------------------ +# Setting assembler data +#------------------------------------------------------------------------------ + +ASM= +ASM_FLAGS= +TBB_ASM.OBJ= +ASSEMBLY_SOURCE=$(arch)-gas + +#------------------------------------------------------------------------------ +# End of setting assembler data +#------------------------------------------------------------------------------ +# Setting tbbmalloc data +#------------------------------------------------------------------------------ + +M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions + +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data +#------------------------------------------------------------------------------ diff --git a/build/windows.icl.inc b/build/windows.icl.inc new file mode 100644 index 0000000..7a0b116 --- /dev/null +++ b/build/windows.icl.inc @@ -0,0 +1,178 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +#------------------------------------------------------------------------------ +# Define compiler-specific variables. +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Setting default configuration to release. +#------------------------------------------------------------------------------ +cfg ?= release +#------------------------------------------------------------------------------ +# End of setting default configuration to release. +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Setting compiler flags. +#------------------------------------------------------------------------------ +CPLUS = icl /nologo $(VCCOMPAT_FLAG) +LINK_FLAGS = /link /nologo +LIB_LINK_FLAGS= /link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO /DYNAMICBASE /NXCOMPAT + +ifeq ($(arch), ia32) + LIB_LINK_FLAGS += /SAFESEH +endif + +ifneq (,$(stdver)) + CXX_STD_FLAGS = /Qstd=$(stdver) +endif + +# ICC 12.0 and higher provide Intel(R) Cilk(TM) Plus +ifeq (ok,$(call detect_js,/minversion icl 12)) + CILK_AVAILABLE = yes +endif + +# ICC 17.0.4 and higher provide support for VS2017 +ifeq (ok,$(call detect_js,/minversion icl 17 4)) + VS2017_SUPPORT = yes +endif + +ifeq ($(runtime), vc_mt) + MS_CRT_KEY = /MT$(if $(findstring debug,$(cfg)),d) +else + MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d) +endif +EH_FLAGS = $(if $(no_exceptions),/EHs-,/EHsc /GR) + +ifeq ($(cfg), release) + CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /D__TBB_LIB_NAME=$(TBB.LIB) + ASM_FLAGS = +endif +ifeq ($(cfg), debug) + CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG /D__TBB_LIB_NAME=$(TBB.LIB) + ASM_FLAGS = /DUSE_FRAME_POINTER +endif +CPLUS_FLAGS += /GS + +COMPILE_ONLY = /c /QMMD +# PREPROC_ONLY should really use /TP which applies to all files in the command line. +# But with /TP, ICL does not preprocess *.def files. +PREPROC_ONLY = /EP /Tp +INCLUDE_KEY = /I +DEFINE_KEY = /D +OUTPUT_KEY = /Fe +OUTPUTOBJ_KEY = /Fo +WARNING_AS_ERROR_KEY = /WX +WARNING_KEY = /W3 +WARNING_SUPPRESS = $(if $(no_exceptions),/wd583) +DYLIB_KEY = /DLL +EXPORT_KEY = /DEF: +NODEFAULTLIB_KEY = /Zl +NOINTRINSIC_KEY = /Oi- +BIGOBJ_KEY = /bigobj +INCLUDE_TEST_HEADERS = /FI$(tbb_root)/src/test/harness_preload.h + + +ifneq (,$(codecov)) + CPLUS_FLAGS += /Qprof-genx +else + CPLUS_FLAGS += /DDO_ITT_NOTIFY +endif + +OPENMP_FLAG = /Qopenmp +CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \ + /D_WIN32_WINNT=$(_WIN32_WINNT) + +ifeq ($(runtime),vc8) + CPLUS_FLAGS += /D_USE_RTM_VERSION +endif + + +C_FLAGS = $(subst $(EH_FLAGS),,$(CPLUS_FLAGS)) + +VCVERSION:=$(runtime) +VCCOMPAT_FLAG ?= $(if $(findstring vc7.1, $(VCVERSION)),/Qvc7.1) +ifeq ($(VCCOMPAT_FLAG),) + VCCOMPAT_FLAG := $(if $(findstring vc8, $(VCVERSION)),/Qvc8) +endif +ifeq ($(VCCOMPAT_FLAG),) + VCCOMPAT_FLAG := $(if $(findstring vc_mt, $(VCVERSION)),/Qvc10) +endif +ifeq ($(VCCOMPAT_FLAG),) + VCCOMPAT_FLAG := $(if $(findstring vc9, $(VCVERSION)),/Qvc9) +endif +ifeq ($(VCCOMPAT_FLAG),) + VCCOMPAT_FLAG := $(if $(findstring vc10, $(VCVERSION)),/Qvc10) +endif +ifeq ($(VCCOMPAT_FLAG),) + VCCOMPAT_FLAG := $(if $(findstring vc11, $(VCVERSION)),/Qvc11) +endif +ifeq ($(VCCOMPAT_FLAG),) + VCCOMPAT_FLAG := $(if $(findstring vc12, $(VCVERSION)),/Qvc12) +endif +ifeq ($(VCCOMPAT_FLAG),) + VCCOMPAT_FLAG := $(if $(findstring vc14, $(VCVERSION)),/Qvc14) + ifeq ($(VS2017_SUPPORT),yes) + ifneq (,$(findstring vc14.1, $(VCVERSION))) + VCCOMPAT_FLAG := /Qvc14.1 + endif + endif +endif +ifeq ($(VCCOMPAT_FLAG),) + $(error VC version not detected correctly: $(VCVERSION) ) +endif +export VCCOMPAT_FLAG + +#------------------------------------------------------------------------------ +# End of setting compiler flags. +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Setting assembler data. +#------------------------------------------------------------------------------ +ASSEMBLY_SOURCE=$(arch)-masm +ifeq (intel64,$(arch)) + ASM=ml64 /nologo + ASM_FLAGS += /DEM64T=1 /c /Zi + TBB_ASM.OBJ = atomic_support.obj intel64_misc.obj itsx.obj + MALLOC_ASM.OBJ = atomic_support.obj +else + ASM=ml /nologo + ASM_FLAGS += /c /coff /Zi /safeseh + TBB_ASM.OBJ = atomic_support.obj lock_byte.obj itsx.obj +endif +#------------------------------------------------------------------------------ +# End of setting assembler data. +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Setting tbbmalloc data. +#------------------------------------------------------------------------------ +M_CPLUS_FLAGS = $(CPLUS_FLAGS) +#------------------------------------------------------------------------------ +# End of setting tbbmalloc data. +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# End of define compiler-specific variables. +#------------------------------------------------------------------------------ diff --git a/build/windows.inc b/build/windows.inc new file mode 100644 index 0000000..01c7e2f --- /dev/null +++ b/build/windows.inc @@ -0,0 +1,111 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +export SHELL = cmd + +ifdef tbb_build_dir + test_dir:=$(tbb_build_dir) +else + test_dir:=. +endif + +# A convenience wrapper for calls to detect.js. +# $(1) is the full command line for the script, e.g. /minversion icl 12 +detect_js = $(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js $(1)") + +# TODO give an error if archs doesn't match +ifndef arch + export arch:=$(call detect_js, /arch $(compiler)) +endif + +ifndef runtime + export runtime:=$(call detect_js, /runtime $(compiler)) +endif + +native_compiler := cl +export compiler ?= cl +debugger ?= devenv /debugexe + +CMD=cmd /C +CWD=$(shell cmd /C echo %CD%) +RM=cmd /C del /Q /F +RD=cmd /C rmdir +MD=cmd /c mkdir +SLASH=\\ +NUL = nul + +AR=lib +AR_OUTPUT_KEY=/out: +AR_FLAGS=/nologo /nodefaultlib + +OBJ = obj +DLL = dll +LIBEXT = lib +ASMEXT = asm + +def_prefix = $(if $(findstring intel64,$(arch)),win64,win32) + +# Target Windows version. Do not increase beyond 0x0502 without prior discussion! +# Used as the value for macro definition option in windows.cl.inc etc. +# For tests, we need at least Windows XP SP2 for sake of enabling stack backtraces. +_WIN32_WINNT=0x0502 + +TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst +TBB.DEF = $(TBB.LST:.lst=.def) +TBB.DLL = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL) +TBB.LIB = tbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(LIBEXT) +TBB.RES = tbb_resource.res +# On Windows, we use #pragma comment to set the proper TBB lib to link with. +# But for cross-configuration testing, need to link explicitly. +# Tests use this variable to detect dependency on TBB binary, so have to be non-empty. +LINK_TBB.LIB = $(if $(crosstest),$(TBB.LIB),$(DEFINE_KEY)__TBB_IMPLICITLY_LINKED) +TBB.MANIFEST = +ifneq ($(filter vc8 vc9,$(runtime)),) + TBB.MANIFEST = tbbmanifest.exe.manifest +endif + +MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def +MALLOC.DLL = tbbmalloc$(DEBUG_SUFFIX).$(DLL) +MALLOC.LIB = tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT) +MALLOC.RES = tbbmalloc.res +MALLOC.MANIFEST = +ifneq ($(filter vc8 vc9,$(runtime)),) +MALLOC.MANIFEST = tbbmanifest.exe.manifest +endif +LINK_MALLOC.LIB = $(MALLOC.LIB) + +MALLOCPROXY.DLL = tbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL) +MALLOCPROXY.LIB = tbbmalloc_proxy$(DEBUG_SUFFIX).$(LIBEXT) +LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB) + +PROXY.LIB = tbbproxy$(DEBUG_SUFFIX).$(LIBEXT) + +RML.DEF = $(RML_SERVER_ROOT)/$(def_prefix)-rml-export.def +RML.DLL = irml$(DEBUG_SUFFIX).$(DLL) +RML.LIB = irml$(DEBUG_SUFFIX).$(LIBEXT) +RML.RES = irml.res +ifneq ($(filter vc8 vc9,$(runtime)),) +RML.MANIFEST = tbbmanifest.exe.manifest +endif + +MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(compiler) $(arch) $(subst \,/,"$(VERSION_FLAGS)") > version_string.ver +MAKE_TBBVARS = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat" + +TEST_LAUNCHER = $(subst /,\,$(tbb_root))\build\test_launcher.bat $(largs) + +OPENCL.LIB = OpenCL.$(LIBEXT) diff --git a/cmake/README.rst b/cmake/README.rst new file mode 100644 index 0000000..40befbf --- /dev/null +++ b/cmake/README.rst @@ -0,0 +1,285 @@ +.. contents:: + +Introduction +------------ +Many developers use CMake to manage their development projects, so the Intel(R) Threading Building Blocks (Intel(R) TBB) +team created the set of CMake modules to simplify integration of the Intel TBB library into a CMake project. +The modules are available starting from Intel TBB 2017 U7 in `/cmake `_. + +About Intel TBB +^^^^^^^^^^^^^^^ +Intel TBB is a library that supports scalable parallel programming using standard ISO C++ code. It does not require special languages or compilers. It is designed to promote scalable data parallel programming. Additionally, it fully supports nested parallelism, so you can build larger parallel components from smaller parallel components. To use the library, you specify tasks, not threads, and let the library map tasks onto threads in an efficient manner. + +Many of the library interfaces employ generic programming, in which interfaces are defined by requirements on types and not specific types. The C++ Standard Template Library (STL) is an example of generic programming. Generic programming enables Intel TBB to be flexible yet efficient. The generic interfaces enable you to customize components to your specific needs. + +The net result is that Intel TBB enables you to specify parallelism far more conveniently than using raw threads, and at the same time can improve performance. + +References +^^^^^^^^^^ +* `Official Intel TBB open source site `_ +* `Official GitHub repository `_ + +Engineering team contacts +^^^^^^^^^^^^^^^^^^^^^^^^^ +The Intel TBB team is very interested in convenient integration of the Intel TBB library into customer projects. These CMake modules were created to provide such a possibility for CMake projects using a simple but powerful interface. We hope you will try these modules and we are looking forward to receiving your feedback! + +E-mail us: `inteltbbdevelopers@intel.com `_. + +Visit our `forum `_. + +Release Notes +------------- +* Minimum supported CMake version: ``3.0.0``. +* Intel TBB versioning via `find_package `_ has restricted functionality: compatibility of update numbers (as well as interface versions) is not checked. Supported versioning: ``find_package(TBB . ...)``. Intel TBB interface version can be obtained in the customer project via the ``TBB_INTERFACE_VERSION`` variable. + +Use cases of Intel TBB integration into CMake-aware projects +------------------------------------------------------------ +There are two types of Intel TBB packages: + * Binary packages with pre-built binaries for Windows* OS, Linux* OS and macOS*. They are available on the releases page of the Github repository: https://github.com/01org/tbb/releases. The main purpose of the binary package integration is the ability to build Intel TBB header files and binaries into your CMake-aware project. + * A source package is also available to download from the release page via the "Source code" link. In addition, it can be cloned from the repository by ``git clone https://github.com/01org/tbb.git``. The main purpose of the source package integration is to allow you to do a custom build of the Intel TBB library from the source files and then build that into your CMake-aware project. + +There are four types of CMake modules that can be used to integrate Intel TBB: `TBBConfig`, `TBBGet`, `TBBMakeConfig` and `TBBBuild`. See `Technical documentation for CMake modules`_ section for additional details. + +Binary package integration +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following use case is valid for packages starting from Intel TBB 2017 U7: + +* Download package manually and make integration. + + Pre-condition: Location of TBBConfig.cmake is available via ``TBB_DIR`` or ``CMAKE_PREFIX_PATH`` contains path to Intel TBB root. + + CMake code for integration: + + .. code:: cmake + + find_package(TBB ) + +The following use case is valid for all Intel TBB 2017 packages. + +* Download package using TBBGet_ and make integration. + + Pre-condition: Intel TBB CMake modules are available via . + + CMake code for integration: + .. code:: cmake + + include(/TBBGet.cmake) + tbb_get(TBB_ROOT tbb_root CONFIG_DIR TBB_DIR) + find_package(TBB ) + +Source package integration +^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Build Intel TBB from existing source files using TBBBuild_ and make integration. + + Pre-condition: Intel TBB source code is available via and Intel TBB CMake modules are available via . + + CMake code for integration: + .. code:: cmake + + include(/TBBBuild.cmake) + tbb_build(TBB_ROOT CONFIG_DIR TBB_DIR) + find_package(TBB ) + +* Download Intel TBB source files using TBBGet_, build it using TBBBuild_ and make integration. + + Pre-condition: Intel TBB CMake modules are available via . + + CMake code for integration: + .. code:: cmake + + include(/TBBGet.cmake) + include(/TBBBuild.cmake) + tbb_get(TBB_ROOT tbb_root SOURCE_CODE) + tbb_build(TBB_ROOT ${tbb_root} CONFIG_DIR TBB_DIR) + find_package(TBB ) + +Tutorials: Intel TBB integration using CMake +-------------------------------------------- +Binary Intel TBB integration to the sub_string_finder sample (Windows* OS) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this example, we will integrate binary Intel TBB package into the sub_string_finder sample on Windows* OS (Microsoft* Visual Studio). +This example is also applicable for other platforms with slight changes. +Place holders and should be replaced with the actual values for the Intel TBB package being used. The example is written for `CMake 3.7.1`. + +Precondition: + * `Microsoft* Visual Studio 11` or higher. + * `CMake 3.0.0` or higher. + +#. Download the latest binary package for Windows from `this page `_ and unpack it to the directory ``C:\demo_tbb_cmake``. +#. In the directory ``C:\demo_tbb_cmake\tbb_oss\examples\GettingStarted\sub_string_finder`` create ``CMakeLists.txt`` file with the following content: + .. code:: cmake + + cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR) + + project(sub_string_finder CXX) + add_executable(sub_string_finder sub_string_finder.cpp) + + # find_package will search for available TBBConfig using variables CMAKE_PREFIX_PATH and TBB_DIR. + find_package(TBB REQUIRED tbb) + + # Link Intel TBB imported targets to the executable; + # "TBB::tbb" can be used instead of "${TBB_IMPORTED_TARGETS}". + target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS}) +#. Run CMake GUI and: + * Fill the following fields (you can use the buttons ``Browse Source...`` and ``Browse Build...`` accordingly) + + * Where is the source code: ``C:/demo_tbb_cmake/tbb_oss/examples/GettingStarted/sub_string_finder`` + * Where to build the binaries: ``C:/demo_tbb_cmake/tbb_oss/examples/GettingStarted/sub_string_finder/build`` + + * Add new cache entry using button ``Add Entry`` to let CMake know where to search for TBBConfig: + + * Name: ``CMAKE_PREFIX_PATH`` + * Type: ``PATH`` + * Value: ``C:/demo_tbb_cmake/tbb_oss`` + + * Push the button ``Generate`` and choose a proper generator for your Microsoft* Visual Studio version. +#. Now you can open the generated solution ``C:/demo_tbb_cmake/tbb_oss/examples/GettingStarted/sub_string_finder/build/sub_string_finder.sln`` in your Microsoft* Visual Studio and build it. + +Source code integration of Intel TBB to the sub_string_finder sample (Linux* OS) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this example, we will build Intel TBB from source code with enabled Community Preview Features and link the sub_string_finder sample with the built library. +This example is also applicable for other platforms with slight changes. + +Precondition: + * `CMake 3.0.0` or higher. + * `Git` (to clone the Intel TBB repository from GitHub) + +#. Create the directory ``~/demo_tbb_cmake``, go to the created directory and clone the Intel TBB repository there: + ``mkdir ~/demo_tbb_cmake ; cd ~/demo_tbb_cmake ; git clone https://github.com/01org/tbb.git`` +#. In the directory ``~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder`` create ``CMakeLists.txt`` file with following content: + .. code:: cmake + + cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR) + + project(sub_string_finder CXX) + add_executable(sub_string_finder sub_string_finder.cpp) + + include(${TBB_ROOT}/cmake/TBBBuild.cmake) + + # Build Intel TBB with enabled Community Preview Features (CPF). + tbb_build(TBB_ROOT ${TBB_ROOT} CONFIG_DIR TBB_DIR MAKE_ARGS tbb_cpf=1) + + find_package(TBB REQUIRED tbb_preview) + + # Link Intel TBB imported targets to the executable; + # "TBB::tbb_preview" can be used instead of "${TBB_IMPORTED_TARGETS}". + target_link_libraries(sub_string_finder ${TBB_IMPORTED_TARGETS}) +#. Create a build directory for the sub_string_finder sample to perform build out of source, go to the created directory + ``mkdir ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build ; cd ~/demo_tbb_cmake/tbb/examples/GettingStarted/sub_string_finder/build`` +#. Run CMake to prepare Makefile for the sub_string_finder sample and provide Intel TBB location (root) where to perform build: + ``cmake -DTBB_ROOT=${HOME}/demo_tbb_cmake/tbb ..`` +#. Make an executable and run it: + ``make ; ./sub_string_finder`` + +Technical documentation for CMake modules +----------------------------------------- +TBBConfig +^^^^^^^^^ + +Configuration module for ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library. + +How to use this module in your CMake project: + #. Add location of Intel TBB (root) to `CMAKE_PREFIX_PATH `_ + or specify location of TBBConfig.cmake in ``TBB_DIR``. + #. Use `find_package `_ to configure Intel TBB. + #. Use provided variables and/or imported targets (described below) to work with Intel TBB. + +Intel TBB components can be passed to `find_package `_ +after keyword ``COMPONENTS`` or ``REQUIRED``. +Use basic names of components (``tbb``, ``tbbmalloc``, ``tbb_preview``, etc.). + +If components are not specified then default are used: ``tbb``, ``tbbmalloc`` and ``tbbmalloc_proxy``. + +If ``tbbmalloc_proxy`` is requested, ``tbbmalloc`` component will also be added and set as dependency for ``tbbmalloc_proxy``. + +TBBConfig creates `imported targets `_ as +shared libraries using the following format: ``TBB::`` (for example, ``TBB::tbb``, ``TBB::tbbmalloc``). + +Variables set during Intel TBB configuration: + +========================= ================================================ + Variable Description +========================= ================================================ +``TBB_FOUND`` Intel TBB library is found +``TBB__FOUND`` specific Intel TBB component is found +``TBB_IMPORTED_TARGETS`` all created Intel TBB imported targets +``TBB_VERSION`` Intel TBB version (format: ``.``) +``TBB_INTERFACE_VERSION`` Intel TBB interface version +========================= ================================================ + +TBBGet +^^^^^^ + +Module for getting ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from `GitHub `_. + +Provides the following functions: + ``tbb_get(TBB_ROOT [RELEASE_TAG |LATEST] [SAVE_TO ] [SYSTEM_NAME Linux|Windows|Darwin] [CONFIG_DIR | SOURCE_CODE])`` + downloads Intel TBB from GitHub and creates TBBConfig for the downloaded binary package if there is no TBBConfig. + + ==================================== ==================================== + Parameter Description + ==================================== ==================================== + ``TBB_ROOT `` a variable to save Intel TBB root in, ``-NOTFOUND`` will be provided in case ``tbb_get`` is unsuccessful + ``RELEASE_TAG |LATEST`` Intel TBB release tag to be downloaded (for example, ``2017_U6``), ``LATEST`` is used by default + ``SAVE_TO `` path to location at which to unpack downloaded Intel TBB, ``${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded`` is used by default + ``SYSTEM_NAME Linux|Windows|Darwin`` operating system name to download a binary package for, + value of `CMAKE_SYSTEM_NAME `_ is used by default + ``CONFIG_DIR `` a variable to save location of TBBConfig.cmake and TBBConfigVersion.cmake. Ignored if ``SOURCE_CODE`` specified + ``SOURCE_CODE`` flag to get Intel TBB source code (instead of binary package) + ==================================== ==================================== + +TBBMakeConfig +^^^^^^^^^^^^^ + +Module for making TBBConfig in ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` binary package. + +This module is to be used for packages that do not have TBBConfig. + +Provides the following functions: + ``tbb_make_config(TBB_ROOT CONFIG_DIR [SYSTEM_NAME Linux|Windows|Darwin])`` + creates CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) for Intel TBB binary package. + + ==================================== ==================================== + Parameter Description + ==================================== ==================================== + ``TBB_ROOT `` path to Intel TBB root + ``CONFIG_DIR `` a variable to store location of the created configuration files + ``SYSTEM_NAME Linux|Windows|Darwin`` operating system name of the binary Intel TBB package, + value of `CMAKE_SYSTEM_NAME `_ is used by default + ==================================== ==================================== + +TBBBuild +^^^^^^^^ + +Module for building ``Intel(R) Threading Building Blocks (Intel(R) TBB)`` library from the source code. + +Provides the following functions: + ``tbb_build(TBB_ROOT CONFIG_DIR [MAKE_ARGS ])`` + builds Intel TBB from source code using the ``Makefile``, creates and provides the location of the CMake configuration files (TBBConfig.cmake and TBBConfigVersion.cmake) . + + ===================================== ==================================== + Parameter Description + ===================================== ==================================== + ``TBB_ROOT `` path to Intel TBB root + ``CONFIG_DIR `` a variable to store location of the created configuration files, + ``-NOTFOUND`` will be provided in case ``tbb_build`` is unsuccessful + ``MAKE_ARGS `` custom arguments to be passed to ``make`` tool. + + The following arguments are always passed with automatically detected values to + ``make`` tool if they are not redefined in ````: + + - ``compiler=`` + - ``tbb_build_dir=`` + - ``tbb_build_prefix=`` + - ``-j`` + ===================================== ==================================== + + +------------ + +Intel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries. + +``*`` Other names and brands may be claimed as the property of others. diff --git a/cmake/TBBBuild.cmake b/cmake/TBBBuild.cmake new file mode 100644 index 0000000..bcf04c8 --- /dev/null +++ b/cmake/TBBBuild.cmake @@ -0,0 +1,197 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# +# Usage: +# include(TBBBuild.cmake) +# tbb_build(ROOT MAKE_ARGS [... ]) +# find_package(TBB ) +# + +include(CMakeParseArguments) + +# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions, +# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html +set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR}) + +## +# Builds Intel TBB. +# +# Parameters: +# TBB_ROOT - path to Intel TBB root directory (with sources); +# MAKE_ARGS - user-defined arguments to be passed to make-tool; +# CONFIG_DIR - store location of the created TBBConfig if the build was ok, store -NOTFOUND otherwise. +# +function(tbb_build) + # NOTE: internal function are used to hide them from user. + + ## + # Provides arguments for make-command to build Intel TBB. + # + # Following arguments are provided automatically if they are not defined by user: + # compiler= + # tbb_build_dir= + # tbb_build_prefix= + # -j + # + # Parameters: + # USER_DEFINED_ARGS - list of user-defined arguments; + # RESULT - resulting list of 'make' arguments. + # + function(tbb_get_make_args) + set(oneValueArgs RESULT) + set(multiValueArgs USER_DEFINED_ARGS) + cmake_parse_arguments(tbb_GMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(result ${tbb_GMA_USER_DEFINED_ARGS}) + + if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "compiler=") + # TODO: add other supported compilers. + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(compiler gcc) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + set(compiler icc) + if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(compiler icl) + endif() + elseif (MSVC) + set(compiler cl) + elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(compiler clang) + endif() + + set(result "compiler=${compiler}" ${result}) + endif() + + if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "tbb_build_dir=") + set(result "tbb_build_dir=${CMAKE_CURRENT_BINARY_DIR}/tbb_cmake_build" ${result}) + endif() + + if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "tbb_build_prefix=") + set(result "tbb_build_prefix=tbb_cmake_build_subdir" ${result}) + endif() + + if (NOT tbb_GMA_USER_DEFINED_ARGS MATCHES "(;|^) *\\-j[0-9]* *(;|$)") + include(ProcessorCount) + ProcessorCount(num_of_cores) + if (NOT num_of_cores EQUAL 0) + set(result "-j${num_of_cores}" ${result}) + endif() + endif() + + if (CMAKE_SYSTEM_NAME MATCHES "Android") + set(result target=android ${result}) + endif() + + set(${tbb_GMA_RESULT} ${result} PARENT_SCOPE) + endfunction() + + ## + # Provides release and debug directories basing on 'make' arguments. + # + # Following 'make' arguments are parsed: tbb_build_dir, tbb_build_prefix + # + # Parameters: + # MAKE_ARGS - 'make' arguments (tbb_build_dir and tbb_build_prefix are required) + # RELEASE_DIR - store normalized (CMake) path to release directory + # DEBUG_DIR - store normalized (CMake) path to debug directory + # + function(tbb_get_build_paths_from_make_args) + set(oneValueArgs RELEASE_DIR DEBUG_DIR) + set(multiValueArgs MAKE_ARGS) + cmake_parse_arguments(tbb_GBPFMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + foreach(arg ${tbb_GBPFMA_MAKE_ARGS}) + if (arg MATCHES "tbb_build_dir=") + string(REPLACE "tbb_build_dir=" "" tbb_build_dir "${arg}") + elseif (arg MATCHES "tbb_build_prefix=") + string(REPLACE "tbb_build_prefix=" "" tbb_build_prefix "${arg}") + endif() + endforeach() + + set(tbb_release_dir "${tbb_build_dir}/${tbb_build_prefix}_release") + set(tbb_debug_dir "${tbb_build_dir}/${tbb_build_prefix}_debug") + + file(TO_CMAKE_PATH "${tbb_release_dir}" tbb_release_dir) + file(TO_CMAKE_PATH "${tbb_debug_dir}" tbb_debug_dir) + + set(${tbb_GBPFMA_RELEASE_DIR} ${tbb_release_dir} PARENT_SCOPE) + set(${tbb_GBPFMA_DEBUG_DIR} ${tbb_debug_dir} PARENT_SCOPE) + endfunction() + + # -------------------- # + # Function entry point # + # -------------------- # + set(oneValueArgs TBB_ROOT CONFIG_DIR) + set(multiValueArgs MAKE_ARGS) + cmake_parse_arguments(tbb_build "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT EXISTS "${tbb_build_TBB_ROOT}/Makefile" OR NOT EXISTS "${tbb_build_TBB_ROOT}/src") + message(STATUS "Intel TBB can not be built: Makefile or src directory was not found in ${tbb_build_TBB_ROOT}") + set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE) + return() + endif() + + set(make_tool_name make) + if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(make_tool_name gmake) + elseif (CMAKE_SYSTEM_NAME MATCHES "Android") + set(make_tool_name ndk-build) + endif() + + find_program(TBB_MAKE_TOOL ${make_tool_name} DOC "Make-tool to build Intel TBB.") + mark_as_advanced(TBB_MAKE_TOOL) + + if (NOT TBB_MAKE_TOOL) + message(STATUS "Intel TBB can not be built: required make-tool (${make_tool_name}) was not found") + set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE) + return() + endif() + + tbb_get_make_args(USER_DEFINED_ARGS ${tbb_build_MAKE_ARGS} RESULT tbb_make_args) + + set(tbb_build_cmd ${TBB_MAKE_TOOL} ${tbb_make_args}) + + string(REPLACE ";" " " tbb_build_cmd_str "${tbb_build_cmd}") + message(STATUS "Building Intel TBB: ${tbb_build_cmd_str}") + execute_process(COMMAND ${tbb_build_cmd} + WORKING_DIRECTORY ${tbb_build_TBB_ROOT} + RESULT_VARIABLE tbb_build_result + ERROR_VARIABLE tbb_build_error_output + OUTPUT_QUIET) + + if (NOT tbb_build_result EQUAL 0) + message(STATUS "Building is unsuccessful (${tbb_build_result}): ${tbb_build_error_output}") + set(${tbb_build_CONFIG_DIR} ${tbb_build_CONFIG_DIR}-NOTFOUND PARENT_SCOPE) + return() + endif() + + tbb_get_build_paths_from_make_args(MAKE_ARGS ${tbb_make_args} + RELEASE_DIR tbb_release_dir + DEBUG_DIR tbb_debug_dir) + + include(${_tbb_cmake_module_path}/TBBMakeConfig.cmake) + tbb_make_config(TBB_ROOT ${tbb_build_TBB_ROOT} + SYSTEM_NAME ${CMAKE_SYSTEM_NAME} + CONFIG_DIR tbb_config_dir + CONFIG_FOR_SOURCE + TBB_RELEASE_DIR ${tbb_release_dir} + TBB_DEBUG_DIR ${tbb_debug_dir}) + + set(${tbb_build_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE) +endfunction() diff --git a/cmake/TBBGet.cmake b/cmake/TBBGet.cmake new file mode 100644 index 0000000..4f595d2 --- /dev/null +++ b/cmake/TBBGet.cmake @@ -0,0 +1,298 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +include(CMakeParseArguments) + +# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions, +# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html +set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR}) + +## +# Downloads file. +# +# Parameters: +# URL - URL to download data from; +# SAVE_AS - filename there to save downloaded data; +# INFO - text description of content to be downloaded; +# will be printed as message in format is "Downloading : ; +# FORCE - option to delete local file from SAVE_AS if it exists; +# +function(_tbb_download_file) + set(options FORCE) + set(oneValueArgs URL RELEASE SAVE_AS INFO) + cmake_parse_arguments(tbb_df "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (tbb_df_FORCE AND EXISTS "${tbb_df_SAVE_AS}") + file(REMOVE ${tbb_df_SAVE_AS}) + endif() + + if (NOT EXISTS "${tbb_df_SAVE_AS}") + set(_show_progress) + if (TBB_DOWNLOADING_PROGRESS) + set(_show_progress SHOW_PROGRESS) + endif() + + message(STATUS "Downloading ${tbb_df_INFO}: ${tbb_df_URL}") + file(DOWNLOAD ${tbb_df_URL} ${tbb_df_SAVE_AS} ${_show_progress} STATUS download_status) + + list(GET download_status 0 download_status_num) + if (NOT download_status_num EQUAL 0) + message(STATUS "Unsuccessful downloading: ${download_status}") + file(REMOVE ${tbb_df_SAVE_AS}) + return() + endif() + else() + message(STATUS "Needed file was found locally ${tbb_df_SAVE_AS}. Remove it if you still want to download a new one") + endif() +endfunction() + +## +# Checks if specified Intel TBB release is available on GitHub. +# +# tbb_check_git_release( ) +# Parameters: +# - release to be checked; +# - store result (TRUE/FALSE). +# +function(_tbb_check_git_release_tag _tbb_release_tag _tbb_release_tag_avail) + if (_tbb_release_tag STREQUAL LATEST) + set(${_tbb_release_tag_avail} TRUE PARENT_SCOPE) + return() + endif() + + set(tbb_releases_file "${CMAKE_CURRENT_BINARY_DIR}/tbb_releases.json") + + _tbb_download_file(URL "${tbb_github_api}/releases" + SAVE_AS ${tbb_releases_file} + INFO "information from GitHub about Intel TBB releases" + FORCE) + + if (NOT EXISTS "${tbb_releases_file}") + set(${_tbb_release_tag_avail} FALSE PARENT_SCOPE) + return() + endif() + + file(READ ${tbb_releases_file} tbb_releases) + + string(REPLACE "\"" "" tbb_releases ${tbb_releases}) + string(REGEX MATCHALL "tag_name: *([A-Za-z0-9_\\.]+)" tbb_releases ${tbb_releases}) + + set(_release_available FALSE) + foreach(tbb_rel ${tbb_releases}) + string(REGEX REPLACE "tag_name: *" "" tbb_rel_cut ${tbb_rel}) + list(REMOVE_ITEM tbb_releases ${tbb_rel}) + list(APPEND tbb_releases ${tbb_rel_cut}) + if (_tbb_release_tag STREQUAL tbb_rel_cut) + set(_release_available TRUE) + break() + endif() + endforeach() + + if (NOT _release_available) + string(REPLACE ";" ", " tbb_releases_str "${tbb_releases}") + message(STATUS "Requested release tag ${_tbb_release_tag} is not available. Available Intel TBB release tags: ${tbb_releases_str}") + endif() + + set(${_tbb_release_tag_avail} ${_release_available} PARENT_SCOPE) +endfunction() + +## +# Compares two Intel TBB releases and provides result +# TRUE if the first release is less than the second, FALSE otherwise. +# +# tbb_is_release_less( ) +# +function(_tbb_is_release_less rel1 rel2 result) + # Convert release to numeric representation to compare it using "if" with VERSION_LESS. + string(REGEX REPLACE "[A-Za-z]" "" rel1 "${rel1}") + string(REPLACE "_" "." rel1 "${rel1}") + string(REGEX REPLACE "[A-Za-z]" "" rel2 "${rel2}") + string(REPLACE "_" "." rel2 "${rel2}") + + if (${rel1} VERSION_LESS ${rel2}) + set(${result} TRUE PARENT_SCOPE) + return() + endif() + + set(${result} FALSE PARENT_SCOPE) +endfunction() + +## +# Finds exact URL to download Intel TBB basing on provided parameters. +# +# Usage: +# _tbb_get_url(URL RELEASE_TAG OS [SOURCE_CODE]) +# +function(_tbb_get_url) + set(oneValueArgs URL RELEASE_TAG OS) + set(options SOURCE_CODE) + cmake_parse_arguments(tbb_get_url "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(tbb_github_api "https://api.github.com/repos/01org/tbb") + + _tbb_check_git_release_tag(${tbb_get_url_RELEASE_TAG} tbb_release_available) + if (NOT tbb_release_available) + set(${tbb_download_FULL_PATH} ${tbb_download_FULL_PATH}-NOTFOUND PARENT_SCOPE) + return() + endif() + + if (tbb_get_url_RELEASE_TAG STREQUAL LATEST) + set(tbb_rel_info_api_url "${tbb_github_api}/releases/latest") + else() + set(tbb_rel_info_api_url "${tbb_github_api}/releases/tags/${tbb_get_url_RELEASE_TAG}") + endif() + + set(tbb_release_info_file "${CMAKE_CURRENT_BINARY_DIR}/tbb_${tbb_get_url_RELEASE_TAG}_info.json") + + _tbb_download_file(URL ${tbb_rel_info_api_url} + SAVE_AS ${tbb_release_info_file} + INFO "information from GitHub about packages for Intel TBB ${tbb_get_url_RELEASE_TAG}" + FORCE) + + if (NOT EXISTS "${tbb_release_info_file}") + set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE) + return() + endif() + + file(STRINGS ${tbb_release_info_file} tbb_release_info) + + if (tbb_get_url_SOURCE_CODE) + # Find name of the latest release to get link to source archive. + if (tbb_get_url_RELEASE_TAG STREQUAL LATEST) + string(REPLACE "\"" "" tbb_release_info ${tbb_release_info}) + string(REGEX REPLACE ".*tag_name: *([A-Za-z0-9_\\.]+).*" "\\1" tbb_get_url_RELEASE_TAG "${tbb_release_info}") + endif() + + set(${tbb_get_url_URL} "https://github.com/01org/tbb/archive/${tbb_get_url_RELEASE_TAG}.tar.gz" PARENT_SCOPE) + else() + if (tbb_get_url_OS MATCHES "Linux") + set(tbb_lib_archive_suffix lin.tgz) + elseif (tbb_get_url_OS MATCHES "Windows") + set(tbb_lib_archive_suffix win.zip) + elseif (tbb_get_url_OS MATCHES "Darwin") + set(tbb_lib_archive_suffix mac.tgz) + + # Since 2017_U4 release archive for Apple has suffix "mac.tgz" instead of "osx.tgz". + if (NOT tbb_get_url_RELEASE_TAG STREQUAL "LATEST") + _tbb_is_release_less(${tbb_get_url_RELEASE_TAG} 2017_U4 release_less) + if (release_less) + set(tbb_lib_archive_suffix osx.tgz) + endif() + endif() + elseif (tbb_get_url_OS MATCHES "Android") + set(tbb_lib_archive_suffix and.tgz) + else() + message(STATUS "Currently prebuilt Intel TBB is not available for your OS (${tbb_get_url_OS})") + set(${tbb_get_url_URL} ${tbb_get_url_URL}-NOTFOUND PARENT_SCOPE) + return() + endif() + + string(REGEX REPLACE ".*(https.*oss_${tbb_lib_archive_suffix}).*" "\\1" tbb_bin_url "${tbb_release_info}") + + set(${tbb_get_url_URL} ${tbb_bin_url} PARENT_SCOPE) + endif() +endfunction() + +function(tbb_get) + set(oneValueArgs RELEASE_TAG SYSTEM_NAME SAVE_TO TBB_ROOT CONFIG_DIR) + set(options SOURCE_CODE) + cmake_parse_arguments(tbb_get "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(tbb_os ${CMAKE_SYSTEM_NAME}) + if (tbb_get_SYSTEM_NAME) + set(tbb_os ${tbb_get_SYSTEM_NAME}) + endif() + + set(tbb_release_tag LATEST) + if (tbb_get_RELEASE_TAG) + set(tbb_release_tag ${tbb_get_RELEASE_TAG}) + endif() + + set(tbb_save_to ${CMAKE_CURRENT_BINARY_DIR}/tbb_downloaded) + if (tbb_get_SAVE_TO) + set(tbb_save_to ${tbb_get_SAVE_TO}) + endif() + + if (tbb_get_SOURCE_CODE) + _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os} SOURCE_CODE) + else() + _tbb_get_url(URL tbb_url RELEASE_TAG ${tbb_release_tag} OS ${tbb_os}) + endif() + + if (NOT tbb_url) + message(STATUS "URL to download Intel TBB has not been found") + set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE) + return() + endif() + + get_filename_component(filename ${tbb_url} NAME) + set(local_file "${CMAKE_CURRENT_BINARY_DIR}/${filename}") + + _tbb_download_file(URL ${tbb_url} + SAVE_AS ${local_file} + INFO "Intel TBB library") + + if (NOT EXISTS "${local_file}") + set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE) + return() + endif() + + get_filename_component(subdir_name ${filename} NAME_WE) + file(MAKE_DIRECTORY ${tbb_save_to}/${subdir_name}) + if (NOT EXISTS "${tbb_save_to}/${subdir_name}") + message(STATUS "${tbb_save_to}/${subdir_name} can not be created") + set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE) + return() + endif() + + message(STATUS "Unpacking ${local_file} to ${tbb_save_to}/${subdir_name}") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${local_file} + WORKING_DIRECTORY ${tbb_save_to}/${subdir_name} + RESULT_VARIABLE unpacking_result) + + if (NOT unpacking_result EQUAL 0) + message(STATUS "Unsuccessful unpacking: ${unpacking_result}") + set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE) + return() + endif() + + file(GLOB_RECURSE tbb_h ${tbb_save_to}/${subdir_name}/*/include/tbb/tbb.h) + list(GET tbb_h 0 tbb_h) + + if (NOT EXISTS "${tbb_h}") + message(STATUS "tbb/tbb.h has not been found in the downloaded package") + set(${tbb_get_TBB_ROOT} ${tbb_get_TBB_ROOT}-NOTFOUND PARENT_SCOPE) + return() + endif() + + get_filename_component(tbb_root "${tbb_h}" PATH) + get_filename_component(tbb_root "${tbb_root}" PATH) + get_filename_component(tbb_root "${tbb_root}" PATH) + + if (NOT tbb_get_SOURCE_CODE) + set(tbb_config_dir ${tbb_root}/cmake) + + if (NOT EXISTS "${tbb_config_dir}") + tbb_make_config(TBB_ROOT ${tbb_root} CONFIG_DIR tbb_config_dir) + endif() + + set(${tbb_get_CONFIG_DIR} ${tbb_config_dir} PARENT_SCOPE) + endif() + + set(${tbb_get_TBB_ROOT} ${tbb_root} PARENT_SCOPE) +endfunction() diff --git a/cmake/TBBMakeConfig.cmake b/cmake/TBBMakeConfig.cmake new file mode 100644 index 0000000..6d25db0 --- /dev/null +++ b/cmake/TBBMakeConfig.cmake @@ -0,0 +1,162 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# +# Usage: +# include(TBBMakeConfig.cmake) +# tbb_make_config(TBB_ROOT SYSTEM_NAME CONFIG_DIR [CONFIG_FOR_SOURCE TBB_RELEASE_DIR TBB_DEBUG_DIR ]) +# + +include(CMakeParseArguments) + +# Save the location of Intel TBB CMake modules here, as it will not be possible to do inside functions, +# see for details: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html +set(_tbb_cmake_module_path ${CMAKE_CURRENT_LIST_DIR}) + +function(tbb_make_config) + set(oneValueArgs TBB_ROOT SYSTEM_NAME CONFIG_DIR TBB_RELEASE_DIR TBB_DEBUG_DIR) + set(options CONFIG_FOR_SOURCE) + cmake_parse_arguments(tbb_MK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(tbb_system_name ${CMAKE_SYSTEM_NAME}) + if (tbb_MK_SYSTEM_NAME) + set(tbb_system_name ${tbb_MK_SYSTEM_NAME}) + endif() + + file(MAKE_DIRECTORY ${tbb_MK_TBB_ROOT}/cmake) + + set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc tbbmalloc_proxy) + + if (tbb_MK_CONFIG_FOR_SOURCE) + set(TBB_RELEASE_DIR ${tbb_MK_TBB_RELEASE_DIR}) + set(TBB_DEBUG_DIR ${tbb_MK_TBB_DEBUG_DIR}) + endif() + + if (tbb_system_name STREQUAL "Linux") + set(TBB_SHARED_LIB_DIR "lib") + set(TBB_X32_SUBDIR "ia32") + set(TBB_X64_SUBDIR "intel64") + set(TBB_LIB_PREFIX "lib") + set(TBB_LIB_EXT "so.2") + + # Note: multiline variable + set(TBB_CHOOSE_COMPILER_SUBDIR "if (CMAKE_CXX_COMPILER_LOADED) + set(_tbb_compiler_id \${CMAKE_CXX_COMPILER_ID}) + set(_tbb_compiler_ver \${CMAKE_CXX_COMPILER_VERSION}) +elseif (CMAKE_C_COMPILER_LOADED) + set(_tbb_compiler_id \${CMAKE_C_COMPILER_ID}) + set(_tbb_compiler_ver \${CMAKE_C_COMPILER_VERSION}) +endif() + +# For non-GCC compilers try to find version of system GCC to choose right compiler subdirectory. +if (NOT _tbb_compiler_id STREQUAL \"GNU\") + execute_process(COMMAND gcc --version OUTPUT_VARIABLE _tbb_gcc_ver_output ERROR_QUIET) + string(REGEX REPLACE \".*gcc.*([0-9]+\\\\.[0-9]+)\\\\.[0-9]+.*\" \"\\\\1\" _tbb_compiler_ver \"\${_tbb_gcc_ver_output}\") + if (NOT _tbb_compiler_ver) + message(FATAL_ERROR \"This Intel TBB package is intended to be used only environment with available 'gcc'\") + endif() + unset(_tbb_gcc_ver_output) +endif() + +set(_tbb_compiler_subdir gcc4.1) +foreach (_tbb_gcc_version 4.1 4.4 4.7) + if (NOT _tbb_compiler_ver VERSION_LESS \${_tbb_gcc_version}) + set(_tbb_compiler_subdir gcc\${_tbb_gcc_version}) + endif() +endforeach() + +unset(_tbb_compiler_id) +unset(_tbb_compiler_ver)") + + elseif (tbb_system_name STREQUAL "Windows") + set(TBB_SHARED_LIB_DIR "bin") + set(TBB_X32_SUBDIR "ia32") + set(TBB_X64_SUBDIR "intel64") + set(TBB_LIB_PREFIX "") + set(TBB_LIB_EXT "dll") + + # Note: multiline variable + set(TBB_CHOOSE_COMPILER_SUBDIR "if (NOT MSVC) + message(FATAL_ERROR \"This Intel TBB package is intended to be used only in the project with MSVC\") +endif() + +# Detect the most relevant MSVC subdirectory +set(_tbb_msvc_1700_subdir vc11) +set(_tbb_msvc_1800_subdir vc12) +set(_tbb_msvc_1900_subdir vc14) +set(_tbb_msvc_ver \${MSVC_VERSION}) +if (MSVC_VERSION VERSION_LESS 1700) + message(FATAL_ERROR \"This Intel TBB package is intended to be used only in the project with MSVC version 1700 (vc11) or higher\") +elseif (MSVC_VERSION VERSION_GREATER 1900) + set(_tbb_msvc_ver 1900) +endif() +set(_tbb_compiler_subdir \${_tbb_msvc_\${_tbb_msvc_ver}_subdir}) +unset(_tbb_msvc_1700_subdir) +unset(_tbb_msvc_1800_subdir) +unset(_tbb_msvc_1900_subdir) + +if (WINDOWS_STORE) + set(_tbb_compiler_subdir \${_tbb_compiler_subdir}_ui) +endif()") + + if (tbb_MK_CONFIG_FOR_SOURCE) + set(TBB_IMPLIB_RELEASE "\nIMPORTED_IMPLIB_RELEASE \"${tbb_MK_TBB_RELEASE_DIR}/\${_tbb_component}.lib\"") + set(TBB_IMPLIB_DEBUG "\nIMPORTED_IMPLIB_DEBUG \"${tbb_MK_TBB_DEBUG_DIR}/\${_tbb_component}_debug.lib\"") + else() + # Note: multiline variable + set(TBB_IMPLIB " + IMPORTED_IMPLIB_RELEASE \"\${_tbb_root}/lib/\${_tbb_arch_subdir}/\${_tbb_compiler_subdir}/\${_tbb_component}.lib\" + IMPORTED_IMPLIB_DEBUG \"\${_tbb_root}/lib/\${_tbb_arch_subdir}/\${_tbb_compiler_subdir}/\${_tbb_component}_debug.lib\"") + endif() + + # Note: multiline variable + # tbb/internal/_tbb_windef.h (included via tbb/tbb_stddef.h) does implicit linkage of some .lib files, use a special define to avoid it + set(TBB_COMPILE_DEFINITIONS " + INTERFACE_COMPILE_DEFINITIONS \"__TBB_NO_IMPLICIT_LINKAGE=1\"") + elseif (tbb_system_name STREQUAL "Darwin") + set(TBB_SHARED_LIB_DIR "lib") + set(TBB_X32_SUBDIR ".") + set(TBB_X64_SUBDIR ".") + set(TBB_LIB_PREFIX "lib") + set(TBB_LIB_EXT "dylib") + set(TBB_CHOOSE_COMPILER_SUBDIR "set(_tbb_compiler_subdir .)") + elseif (tbb_system_name STREQUAL "Android") + set(TBB_SHARED_LIB_DIR "lib") + set(TBB_X32_SUBDIR ".") + set(TBB_X64_SUBDIR "x86_64") + set(TBB_LIB_PREFIX "lib") + set(TBB_LIB_EXT "so") + set(TBB_CHOOSE_COMPILER_SUBDIR "set(_tbb_compiler_subdir .)") + endif() + + file(READ "${tbb_MK_TBB_ROOT}/include/tbb/tbb_stddef.h" _tbb_stddef) + string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _tbb_ver_major "${_tbb_stddef}") + string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _tbb_ver_minor "${_tbb_stddef}") + string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" TBB_INTERFACE_VERSION "${_tbb_stddef}") + set(TBB_VERSION "${_tbb_ver_major}.${_tbb_ver_minor}") + + if (tbb_MK_CONFIG_FOR_SOURCE) + set(_tbb_config_template TBBConfigForSource.cmake.in) + else() + set(_tbb_config_template TBBConfig.cmake.in) + endif() + configure_file(${_tbb_cmake_module_path}/templates/${_tbb_config_template} ${tbb_MK_TBB_ROOT}/cmake/TBBConfig.cmake @ONLY) + configure_file(${_tbb_cmake_module_path}/templates/TBBConfigVersion.cmake.in ${tbb_MK_TBB_ROOT}/cmake/TBBConfigVersion.cmake @ONLY) + + set(${tbb_MK_CONFIG_DIR} ${tbb_MK_TBB_ROOT}/cmake PARENT_SCOPE) +endfunction() diff --git a/cmake/templates/TBBConfig.cmake.in b/cmake/templates/TBBConfig.cmake.in new file mode 100644 index 0000000..19bc1fc --- /dev/null +++ b/cmake/templates/TBBConfig.cmake.in @@ -0,0 +1,89 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# TBB_FOUND should not be set explicitly. It is defined automatically by CMake. +# Handling of TBB_VERSION is in TBBConfigVersion.cmake. + +if (NOT TBB_FIND_COMPONENTS) + set(TBB_FIND_COMPONENTS "@TBB_DEFAULT_COMPONENTS@") + foreach (_tbb_component ${TBB_FIND_COMPONENTS}) + set(TBB_FIND_REQUIRED_${_tbb_component} 1) + endforeach() +endif() + +# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc +list(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix) +if (NOT _tbbmalloc_proxy_ix EQUAL -1) + list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix) + if (_tbbmalloc_ix EQUAL -1) + list(APPEND TBB_FIND_COMPONENTS tbbmalloc) + set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy}) + endif() +endif() + +set(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@) + +get_filename_component(_tbb_root "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_tbb_root "${_tbb_root}" PATH) + +set(_tbb_x32_subdir @TBB_X32_SUBDIR@) +set(_tbb_x64_subdir @TBB_X64_SUBDIR@) + +if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_tbb_arch_subdir ${_tbb_x64_subdir}) +else() + set(_tbb_arch_subdir ${_tbb_x32_subdir}) +endif() + +@TBB_CHOOSE_COMPILER_SUBDIR@ + +get_filename_component(_tbb_lib_path "${_tbb_root}/@TBB_SHARED_LIB_DIR@/${_tbb_arch_subdir}/${_tbb_compiler_subdir}" ABSOLUTE) + +foreach (_tbb_component ${TBB_FIND_COMPONENTS}) + set(_tbb_release_lib "${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@") + set(_tbb_debug_lib "${_tbb_lib_path}/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@") + + if (EXISTS "${_tbb_release_lib}" AND EXISTS "${_tbb_debug_lib}") + add_library(TBB::${_tbb_component} SHARED IMPORTED) + set_target_properties(TBB::${_tbb_component} PROPERTIES + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + IMPORTED_LOCATION_RELEASE "${_tbb_release_lib}" + IMPORTED_LOCATION_DEBUG "${_tbb_debug_lib}" + INTERFACE_INCLUDE_DIRECTORIES "${_tbb_root}/include"@TBB_IMPLIB@@TBB_COMPILE_DEFINITIONS@) + + # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc + if (_tbb_component STREQUAL tbbmalloc_proxy) + set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc) + endif() + + list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component}) + set(TBB_${_tbb_component}_FOUND 1) + elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component}) + message(FATAL_ERROR "Missed required Intel TBB component: ${_tbb_component}") + endif() +endforeach() + +unset(_tbb_x32_subdir) +unset(_tbb_x64_subdir) +unset(_tbb_arch_subdir) +unset(_tbb_compiler_subdir) +unset(_tbbmalloc_proxy_ix) +unset(_tbbmalloc_ix) +unset(_tbb_lib_path) +unset(_tbb_release_lib) +unset(_tbb_debug_lib) diff --git a/cmake/templates/TBBConfigForSource.cmake.in b/cmake/templates/TBBConfigForSource.cmake.in new file mode 100644 index 0000000..e708a9b --- /dev/null +++ b/cmake/templates/TBBConfigForSource.cmake.in @@ -0,0 +1,82 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# TBB_FOUND should not be set explicitly. It is defined automatically by CMake. +# Handling of TBB_VERSION is in TBBConfigVersion.cmake. + +if (NOT TBB_FIND_COMPONENTS) + set(TBB_FIND_COMPONENTS "@TBB_DEFAULT_COMPONENTS@") + foreach (_tbb_component ${TBB_FIND_COMPONENTS}) + set(TBB_FIND_REQUIRED_${_tbb_component} 1) + endforeach() +endif() + +# Add components with internal dependencies: tbbmalloc_proxy -> tbbmalloc +list(FIND TBB_FIND_COMPONENTS tbbmalloc_proxy _tbbmalloc_proxy_ix) +if (NOT _tbbmalloc_proxy_ix EQUAL -1) + list(FIND TBB_FIND_COMPONENTS tbbmalloc _tbbmalloc_ix) + if (_tbbmalloc_ix EQUAL -1) + list(APPEND TBB_FIND_COMPONENTS tbbmalloc) + set(TBB_FIND_REQUIRED_tbbmalloc ${TBB_FIND_REQUIRED_tbbmalloc_proxy}) + endif() +endif() + +set(TBB_INTERFACE_VERSION @TBB_INTERFACE_VERSION@) + +get_filename_component(_tbb_root "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_tbb_root "${_tbb_root}" PATH) + +foreach (_tbb_component ${TBB_FIND_COMPONENTS}) + set(_tbb_release_lib "@TBB_RELEASE_DIR@/@TBB_LIB_PREFIX@${_tbb_component}.@TBB_LIB_EXT@") + set(_tbb_debug_lib "@TBB_DEBUG_DIR@/@TBB_LIB_PREFIX@${_tbb_component}_debug.@TBB_LIB_EXT@") + + if (EXISTS "${_tbb_release_lib}" OR EXISTS "${_tbb_debug_lib}") + add_library(TBB::${_tbb_component} SHARED IMPORTED) + set_target_properties(TBB::${_tbb_component} PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_tbb_root}/include"@TBB_COMPILE_DEFINITIONS@) + + + if (EXISTS "${_tbb_release_lib}") + set_target_properties(TBB::${_tbb_component} PROPERTIES + IMPORTED_LOCATION_RELEASE "${_tbb_release_lib}"@TBB_IMPLIB_RELEASE@) + set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) + endif() + + if (EXISTS "${_tbb_debug_lib}") + set_target_properties(TBB::${_tbb_component} PROPERTIES + IMPORTED_LOCATION_DEBUG "${_tbb_debug_lib}"@TBB_IMPLIB_DEBUG@) + set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) + endif() + + # Add internal dependencies for imported targets: TBB::tbbmalloc_proxy -> TBB::tbbmalloc + if (_tbb_component STREQUAL tbbmalloc_proxy) + set_target_properties(TBB::tbbmalloc_proxy PROPERTIES INTERFACE_LINK_LIBRARIES TBB::tbbmalloc) + endif() + + list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component}) + set(TBB_${_tbb_component}_FOUND 1) + elseif (TBB_FIND_REQUIRED AND TBB_FIND_REQUIRED_${_tbb_component}) + message(FATAL_ERROR "Missed required Intel TBB component: ${_tbb_component}") + endif() +endforeach() + +unset(_tbbmalloc_proxy_ix) +unset(_tbbmalloc_ix) +unset(_tbb_lib_path) +unset(_tbb_release_lib) +unset(_tbb_debug_lib) diff --git a/cmake/templates/TBBConfigVersion.cmake.in b/cmake/templates/TBBConfigVersion.cmake.in new file mode 100644 index 0000000..69d16cf --- /dev/null +++ b/cmake/templates/TBBConfigVersion.cmake.in @@ -0,0 +1,28 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +set(PACKAGE_VERSION @TBB_VERSION@) + +if ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() diff --git a/doc/Release_Notes.txt b/doc/Release_Notes.txt new file mode 100644 index 0000000..2c352eb --- /dev/null +++ b/doc/Release_Notes.txt @@ -0,0 +1,137 @@ +------------------------------------------------------------------------ +Intel(R) Threading Building Blocks - Release Notes + Version 2018 +------------------------------------------------------------------------ + + +System Requirements +------------------- + +Intel(R) Threading Building Blocks (Intel(R) TBB) is available +commercially (see http://software.intel.com/en-us/intel-tbb) as a +binary distribution, and in open source, in both source and binary +forms (see http://threadingbuildingblocks.org). + +When built from source, Intel(R) TBB is intended to be highly portable +and so supports a wide variety of operating systems and platforms (see +http://threadingbuildingblocks.org for more details). + +Binary distributions, including commercial distributions, are validated +and officially supported for the hardware, software, operating systems +and compilers listed here. + +Hardware - Recommended + + Microsoft* Windows* Systems + Intel(R) Core(TM) processor family + Intel(R) Xeon(R) processor family + Intel(R) Xeon Phi(TM) processor family + Linux* Systems + Intel(R) Core(TM) processor family + Intel(R) Xeon(R) processor family + Intel(R) Xeon Phi(TM) processor family + macOS* Systems + Intel(R) Core(TM) processor family + Android* Systems + Intel(R) Atom(TM) processor family + +Hardware - Supported + + Intel(R) Pentium(R) 4 processor family + Intel(R) Xeon Phi(TM) coprocessor + Intel(R) Atom(TM) processor family + Non Intel(R) processors compatible with the above processors + +Software - Minimum Requirements + + Supported operating system (see below) + Supported compiler (see below) + +Software - Recommended + + Intel(R) Parallel Studio XE 2017, 2018 + Intel(R) System Studio 2017, 2018 + +Software - Supported Operating Systems + + Systems with Microsoft* Windows* operating systems + Microsoft* Windows* 10 + Microsoft* Windows* 8.1 + Microsoft* Windows* 7 SP1 + Microsoft* Windows* Server 2016 + Microsoft* Windows* Server 2012 R2 + Microsoft* Windows* Server 2008 R2 SP1 + Windows* Embedded 10 + Windows* Embedded 8.1 + Systems with Linux* operating systems + CentOS 7.1 + Debian* 8, 9 + Fedora* 24, 25 + Intel(R) Cluster Ready + Red Hat* Enterprise Linux* 6, 7 + SuSE* Linux* Enterprise Server 11, 12 + Ubuntu* 14.04 LTS, 16.04 LTS, 17.04 + WindRiver* Linux 8, 9 + Yocto 2.2, 2.3 + Systems with OS X* or macOS* operating systems + OS X* 10.10, 10.11 + macOS* 10.12 + Systems with Android* operating systems + Android* 5.x, 6.x, 7.x + +Software - Supported Compilers + + Intel(R) C++ Compiler 16, 17 and 18 version + Microsoft* Visual C++ 12.0 (Microsoft* Visual Studio* 2013, + Windows* OS only) + Microsoft* Visual C++ 14.0 (Microsoft* Visual Studio* 2015, + Windows* OS only) + Microsoft* Visual C++ 14.1 (Microsoft* Visual Studio* 2017, + Windows* OS only) + Microsoft* Windows* Software Development Kit for Windows* 8.1 + Microsoft* Windows* Software Development Kit for Windows* 10 + For each supported Linux* operating system, the standard gcc + version provided with that operating system is supported + GNU Compilers (gcc) 4.1 - 7.1 + GNU C Library (glibc) version 2.4 - 2.19 + Xcode* 6.3 - 8.3 + Android* NDK r10e - r15b + +Software - Supported Performance Analysis Tools + + Intel(R) VTune(TM) Amplifier XE 2017, 2018. + Intel(R) Inspector XE 2017, 2018. + Intel(R) Advisor XE 2017, 2018. + +Known Issues +------------ + +Below is the list of known issues in this release of +Intel(R) Threading Building Blocks (Intel(R) TBB). +See the "Known Issues" appendix in the Intel(R) TBB Developer +Reference for notes applicable to multiple releases of Intel(R) TBB. + +Library Issues + + - If you build Intel(R) TBB from sources with GCC 6, specify + the -flifetime-dse=1 option to prevent crashes at runtime, + or use Intel(R) TBB makefiles that automatically set this option. + + - The current implementation of gfx_factory does not allow memory + buffer objects to be used concurrently. As a result, several + streaming nodes customized with gfx_factory cannot be connected + with each other directly. + +------------------------------------------------------------------------ +(C) 2017 Intel Corporation + +Intel, the Intel logo, Intel Core, Intel Atom, Xeon, Intel Xeon Phi and +Pentium are trademarks of Intel Corporation in the U.S. and/or other +countries. + +* Other names and brands may be claimed as the property of others. + +Third Party and Open Source Licenses + +Content of some examples or binaries may be covered by various open-source +licenses. See the index.html file in each respective folder for details. diff --git a/doc/html/a00001.html b/doc/html/a00001.html new file mode 100644 index 0000000..60cbf03 --- /dev/null +++ b/doc/html/a00001.html @@ -0,0 +1,59 @@ + + + + + + +Requirements on range concept + + + + + + + +
+
+
Requirements on range concept
+
+
+

Class R implementing the concept of range must define:

+
    +
  • R::R( const R& );
    +
    Copy constructor
  • +
  • R::~R();
    +
    Destructor
  • +
  • bool R::is_divisible() const;
    +
    True if range can be partitioned into two subranges
  • +
  • bool R::empty() const;
    +
    True if range is empty
  • +
  • R::R( R& r, split );
    +
    Split range r into two subranges.
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00002.html b/doc/html/a00002.html new file mode 100644 index 0000000..cd8a19b --- /dev/null +++ b/doc/html/a00002.html @@ -0,0 +1,55 @@ + + + + + + +Requirements on parallel_for body + + + + + + + +
+
+
Requirements on parallel_for body
+
+
+

Class Body implementing the concept of parallel_for body must define:

+
    +
  • Body::Body( const Body& );
    +
    Copy constructor
  • +
  • Body::~Body();
    +
    Destructor
  • +
  • void Body::operator()( Range& r ) const;
    +
    Function call operator applying the body to range r.
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00003.html b/doc/html/a00003.html new file mode 100644 index 0000000..ad1e622 --- /dev/null +++ b/doc/html/a00003.html @@ -0,0 +1,57 @@ + + + + + + +Requirements on parallel_reduce body + + + + + + + +
+
+
Requirements on parallel_reduce body
+
+
+

Class Body implementing the concept of parallel_reduce body must define:

+
    +
  • Body::Body( Body&, split );
    +
    Splitting constructor. Must be able to run concurrently with operator() and method join
  • +
  • Body::~Body();
    +
    Destructor
  • +
  • void Body::operator()( Range& r );
    +
    Function call operator applying body to range r and accumulating the result
  • +
  • void Body::join( Body& b );
    +
    Join results. The result in b should be merged into the result of this
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00004.html b/doc/html/a00004.html new file mode 100644 index 0000000..fb82d54 --- /dev/null +++ b/doc/html/a00004.html @@ -0,0 +1,43 @@ + + + + + + +Requirements on parallel_reduce anonymous function objects (lambda functions) + + + + + + + +
+
+
Requirements on parallel_reduce anonymous function objects (lambda functions)
+
+
+

TO BE DOCUMENTED

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00005.html b/doc/html/a00005.html new file mode 100644 index 0000000..ba7f204 --- /dev/null +++ b/doc/html/a00005.html @@ -0,0 +1,59 @@ + + + + + + +Requirements on parallel_scan body + + + + + + + +
+
+
Requirements on parallel_scan body
+
+
+

Class Body implementing the concept of parallel_scan body must define:

+
    +
  • Body::Body( Body&, split );
    +
    Splitting constructor. Split b so that this and b can accumulate separately
  • +
  • Body::~Body();
    +
    Destructor
  • +
  • void Body::operator()( const Range& r, pre_scan_tag );
    +
    Preprocess iterations for range r
  • +
  • void Body::operator()( const Range& r, final_scan_tag );
    +
    Do final processing for iterations of range r
  • +
  • void Body::reverse_join( Body& a );
    +
    Merge preprocessing state of a into this, where a was created earlier from b by b's splitting constructor
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00006.html b/doc/html/a00006.html new file mode 100644 index 0000000..f2e603c --- /dev/null +++ b/doc/html/a00006.html @@ -0,0 +1,53 @@ + + + + + + +Requirements on iterators for parallel_sort + + + + + + + +
+
+
Requirements on iterators for parallel_sort
+
+
+

Requirements on the iterator type It and its value type T for parallel_sort:

+
    +
  • void iter_swap( It a, It b )
    +
    Swaps the values of the elements the given iterators a and b are pointing to. It should be a random access iterator.
  • +
  • bool Compare::operator()( const T& x, const T& y )
    +
    True if x comes before y;
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00007.html b/doc/html/a00007.html new file mode 100644 index 0000000..0c5a8d1 --- /dev/null +++ b/doc/html/a00007.html @@ -0,0 +1,57 @@ + + + + + + +TBB concepts + + + + + + + +
+
+
TBB concepts
+
+
+

A concept is a set of requirements to a type, which are necessary and sufficient for the type to model a particular behavior or a set of behaviors. Some concepts are specific to a particular algorithm (e.g. algorithm body), while other ones are common to several algorithms (e.g. range concept).

+

All TBB algorithms make use of different classes implementing various concepts. Implementation classes are supplied by the user as type arguments of template parameters and/or as objects passed as function call arguments. The library provides predefined implementations of some concepts (e.g. several kinds of ranges), while other ones must always be implemented by the user.

+

TBB defines a set of minimal requirements each concept must conform to. Here is the list of different concepts hyperlinked to the corresponding requirements specifications:

+ +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00008.html b/doc/html/a00008.html new file mode 100644 index 0000000..1654a2c --- /dev/null +++ b/doc/html/a00008.html @@ -0,0 +1,54 @@ + + + + + + +__TBB_malloc_proxy_caller Struct Reference + + + + + + + +
+ +
+
__TBB_malloc_proxy_caller Struct Reference
+
+
+
The documentation for this struct was generated from the following file:
    +
  • tbbmalloc_proxy.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00009.html b/doc/html/a00009.html new file mode 100644 index 0000000..b64e416 --- /dev/null +++ b/doc/html/a00009.html @@ -0,0 +1,144 @@ + + + + + + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference
+
+
+ +

Allows write access to elements and combines data access, locking, and garbage collection. + More...

+ +

#include <concurrent_hash_map.h>

+
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor:
+
+
+ + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor + +
+ + + + + + + + + +

+Public Types

+typedef
+concurrent_hash_map::value_type 
value_type
 Type of value.
 
- Public Types inherited from tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor
+typedef const
+concurrent_hash_map::value_type 
value_type
 Type of value.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+reference operator* () const
 Return reference to associated value in hash table.
 
+pointer operator-> () const
 Return pointer to associated value in hash table.
 
- Public Member Functions inherited from tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor
+bool empty () const
 True if result is empty.
 
+void release ()
 Set to null.
 
+const_reference operator* () const
 Return reference to associated value in hash table.
 
+const_pointer operator-> () const
 Return pointer to associated value in hash table.
 
const_accessor ()
 Create empty result.
 
~const_accessor ()
 Destroy result after releasing the underlying reference.
 
+ + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor
+bool is_writer ()
 
- Protected Attributes inherited from tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor
+nodemy_node
 
+hashcode_t my_hash
 
+

Detailed Description

+

template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor

+ +

Allows write access to elements and combines data access, locking, and garbage collection.

+

The documentation for this class was generated from the following file:
    +
  • concurrent_hash_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00009.png b/doc/html/a00009.png new file mode 100644 index 0000000000000000000000000000000000000000..4a5d25e3fed684c0fe94ec84f7257c74b5454384 GIT binary patch literal 1881 zcmcIkX;4#F6n;nrY71&DvSst^Q(gek9L|7SATc>_Hy&wK$S)1{6*Q) zro8dKZ0pK^Hxj+}SZC$=HaLI8W{=6z7?Cw%4)70}T@f0*3SkSu@IFex>il_fxh0#E zznQI^J{$ujkU7WYWcbo8L1r?Wu;C13Yy5-S4&^umYku0=-VpUtW2L`%<8}n-Qlumy zp3Bnc{?Kl|j8iazE{pH7Qg!5Oe=U0iH?AKz%wQoF<#%CCRa-P$37o_X!MKh3hj75( z$OZD-QmFSqVxr{yIjMDZ`O|DK`_jbe(V7VI!B@$K5$BK9bFi2?&it0Ac&s3-8Q>26?~ak zAp}8Cmw|RrCHgGQ4@{0z4}!^Vs_-Yx7**Qt1Rd%~q$p`Yr{y%=>BKdOb~e~G%gLL9 zmda)IHI?aA^x(F=C#%f-6wTF=2ZT zYAQ30$xdaCs_!0I7%o-`tp|@uV?t}D7lv|(+nBR8%1idKPVV&Ze#5{Vf>VPiHhJa4 z-xy0misnHTb2jLQ`BGYUj(6QuvM;-_Hs#_8=cf+`n~z_>P4QI9Vwb~Xfx@h+eQ6z< z6U|H(y=FSV5{mn>YimGmtOpNAj&P#do|3(+c$ju?5*H#O@@zvsk!MMkSu{wLayXoY zcRz=z9v=BVH>ylbSCmO^QN%Xfy%(f3;Z(%uG4!5be_ldvV`q1lVx48!$L4`F~*&!}{Zs(OZ=fiFE`1471#(#-I^%+5%e9hP`A16M)yg zFmlk_0YqvF6n0S~&NZ(sh|N9Z`^E1Zg zkExI{8h(dSSG|k3FL$J58rdk#F@)sSt4#mtf?6s63PV|xp{|$I&Kn25Xw8(B4$1^s zZ6VL-L>Jzq6T}hVF{(E1POKmk)v!2Q0T1^ycr#H=mAgsVNiFlDwOjf+uE2u1K@BKV4p;q2 zfZ8k7jBmVX+rxN?WA-l^Mk5qQ$MOhc^4l-M`e|!5)pvAJ54aInx9C65%PSpED#<(V bVa@lF6X1K<6z*EE6wrsKJB3)eEBwUo+vk+s literal 0 HcmV?d00001 diff --git a/doc/html/a00010.html b/doc/html/a00010.html new file mode 100644 index 0000000..afc448b --- /dev/null +++ b/doc/html/a00010.html @@ -0,0 +1,66 @@ + + + + + + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Struct Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Struct Reference
+
+
+ + + + +

+Public Member Functions

+void release ()
 
+
The documentation for this struct was generated from the following file:
    +
  • concurrent_hash_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00011.html b/doc/html/a00011.html new file mode 100644 index 0000000..e04bbc6 --- /dev/null +++ b/doc/html/a00011.html @@ -0,0 +1,125 @@ + + + + + + +tbb::interface6::aggregator Class Reference + + + + + + + +
+ +
+
tbb::interface6::aggregator Class Reference
+
+
+ +

Basic aggregator interface. + More...

+ +

#include <aggregator.h>

+
+Inheritance diagram for tbb::interface6::aggregator:
+
+
+ + +tbb::interface6::aggregator_ext< internal::basic_handler > + +
+ + + + + + +

+Public Member Functions

template<typename Body >
void execute (const Body &b)
 BASIC INTERFACE: Enter a function for exclusive execution by the aggregator. More...
 
+ + + + + + + + + +

+Additional Inherited Members

- Private Member Functions inherited from tbb::interface6::aggregator_ext< internal::basic_handler >
aggregator_ext (const internal::basic_handler &h)
 
void process (aggregator_operation *op)
 EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox. More...
 
void execute_impl (aggregator_operation &op)
 
+

Detailed Description

+

Basic aggregator interface.

+

Member Function Documentation

+ +
+
+
+template<typename Body >
+ + + + + +
+ + + + + + + + +
void tbb::interface6::aggregator::execute (const Body & b)
+
+inline
+
+ +

BASIC INTERFACE: Enter a function for exclusive execution by the aggregator.

+

The calling thread stores the function object in a basic_operation and places the operation in the aggregator's mailbox

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • aggregator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00011.png b/doc/html/a00011.png new file mode 100644 index 0000000000000000000000000000000000000000..d78b2dbf91246dc53b9ed87c228602423f00682e GIT binary patch literal 1067 zcmeAS@N?(olHy`uVBq!ia0y~yVDtyF12~w0o>otKTk}rU)l7P|RjPWk+4-{VtCT#0`opXCeN>us zE8FN#=!N^Qe?GhAY^!?Gz~Q{+O1b}=C48G~%V!)rza}~;zskrz_SoCARx!St&z*j| zbM5Aw+8e%I+}r>A)x3`0vEa?)Plw(G{M?$mHa=*RG+^^Se zUTa^i;A`~N+<%hIyD8t~^8G%RU0Nr-{>A$*I>+~%nQ{DRsqDySH!G!D+7^ zt-jd((5%>n#vyd z{jSWjm4*MC=>{g}UO#rJ+b&JC%r<}%bj zI5g$w{4aNEuiwp3I~?!)SI&0%lBz%FlT0|jO{tW!-<;>U_vJ~OQpxS+($BJHmB!_r z&z+n4n)!jrx)bLu-B0K4z2!J@>A!pTy4D=Kl5=m}`e}Xq4V!no*khi*rS?w7j&mDI z7fpPg@cixe6`%k7V@NOHwmogAZ~UzA;^MwpRTu4yqi)@N{bK&5%UkE9HF_Fv{-a=D zExgauKl*&!{O@yr-Mo7F3NUhSfBEwFZn@&+>erR#Yj17)d1?Feqs#V}Th)KO|AWDz zd-GQo3(;s%E3t;xKQe5qmo5m-WnA}Y^Jh>*u|5d0`?rVrP6sgLWspOp;>FA$FGnxU b-Us&juFgeep8N8FIh(=L)z4*}Q$iB}`&t + + + + + +tbb::interface6::aggregator_ext< handler_type > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::aggregator_ext< handler_type > Class Template Reference
+
+
+ +

Aggregator base class and expert interface. + More...

+ +

#include <aggregator.h>

+
+Inheritance diagram for tbb::interface6::aggregator_ext< handler_type >:
+
+
+ + + +
+ + + + + + + +

+Public Member Functions

aggregator_ext (const handler_type &h)
 
void process (aggregator_operation *op)
 EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox. More...
 
+ + + +

+Protected Member Functions

void execute_impl (aggregator_operation &op)
 
+

Detailed Description

+

template<typename handler_type>
+class tbb::interface6::aggregator_ext< handler_type >

+ +

Aggregator base class and expert interface.

+

An aggregator for collecting operations coming from multiple sources and executing them serially on a single thread.

+

Member Function Documentation

+ +
+
+
+template<typename handler_type>
+ + + + + +
+ + + + + + + + +
void tbb::interface6::aggregator_ext< handler_type >::execute_impl (aggregator_operationop)
+
+inlineprotected
+
+

Place operation in mailbox, then either handle mailbox or wait for the operation to be completed by a different thread.

+ +
+
+ +
+
+
+template<typename handler_type>
+ + + + + +
+ + + + + + + + +
void tbb::interface6::aggregator_ext< handler_type >::process (aggregator_operationop)
+
+inline
+
+ +

EXPERT INTERFACE: Enter a user-made operation into the aggregator's mailbox.

+

Details of user-made operations must be handled by user-provided handler

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • aggregator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00012.png b/doc/html/a00012.png new file mode 100644 index 0000000000000000000000000000000000000000..75772ae7619b8e5c46a3ac515adf29fb24ed2f9d GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y*112~w0q}02Qra(#}z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opD>zcftRoda2#nGjeyK>j>y%rLz^3pfv*-YWoKBmZ- z#i{EoIqlXEA)&y)<8bH{Lr8>V1D7^)Kw>I`mRV}v*?%kL?d!72r5q0ajbQ)5Dy+{J z?05ghcjhnWbBfka`5Ef9|Jy@#t<87t_s3V~?qYrSw_P~Q`p*8yW$XU#JE@)T+?|yD znZvqA=K2Z8TSCr%OmA*0lizZ_pnF@+mfJUGo}8RMEo1G?dHXJ#?Wngi^Ic$ah4uaY z`|e$)o4CJ!%q#KF^Y|LM>Rx@yDijHz4#Gxe?%_AazD_m&IQ zzHZqY_HWT*GyC9WqJgtFeu-|`JDuyH%S@Z<*P+!nv&z?eef0Np&*i>f^645Ew|-7O zzocZ<@cf7*HeDE;@z_96dw0d26@TZFeg)e;Va=^@{bw3iH(9 zB?EarJR{I}^l_USvz56#*w|Lh%(&bFESdaVRw zh4k}pdzZ{&_@};x$Dws9 + + + + + +tbb::interface6::aggregator_operation Class Reference + + + + + + + +
+ +
+
tbb::interface6::aggregator_operation Class Reference
+
+
+
+Inheritance diagram for tbb::interface6::aggregator_operation:
+
+
+ + +tbb::interface6::internal::basic_operation_base +tbb::interface6::internal::basic_operation< Body > + +
+ + + + +

+Public Types

enum  aggregator_operation_status { agg_waiting =0, +agg_finished + }
 
+ + + + + + + + + + + +

+Public Member Functions

+void start ()
 Call start before handling this operation.
 
void finish ()
 Call finish when done handling this operation. More...
 
+aggregator_operationnext ()
 
+void set_next (aggregator_operation *n)
 
+ + + + +

+Friends

+template<typename handler_type >
class aggregator_ext
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void tbb::interface6::aggregator_operation::finish ()
+
+inline
+
+ +

Call finish when done handling this operation.

+

The operation will be released to its originating thread, and possibly deleted.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • aggregator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00013.png b/doc/html/a00013.png new file mode 100644 index 0000000000000000000000000000000000000000..70eef835442369646d75f1c3cb3240c851527234 GIT binary patch literal 1567 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOMJ2;quR;s?>SC{J)?3 zb=P|}h2B}cC+*lgx%KAJm-oilzv*zlnwD3;=B}CPUkP9J%DB>I-u+yS{B?Jdw4aMkn{-n_*m>L6Kr8bQ-$O06EeoF+tYh-g zno*$M?#8S4G{Cs?zH!R=*3YqKmhEkAXDm%tSpvOrL|-!N{icVUGuBU>^yFF8rtqkJ z@!JxLr}O6Rw5c;ab}}}s{c8D5eo3Yufp6kut}s;mIT2)c^g<1D#r_{vYSW|t?>D>h z=CC900nY#16&w0hco-{M6dC%VVL7i28p4JQ@<*8!7-k5xG04dE2e25Z^DtW2u(m2S zXeM$TQ2)b#tP2_g9L@}KKuKj(BT1C3nYVCC&@UA^&81&FC#YynSfZHdG0Eo81eMAb zMbA$h&Xb;8l#aS~{@>X>@AkcY`ptEv1nb$T+ouAx&4VUcor+R9S+H~S>9%FH{_Rzv zJX-h7RXo2JR8`);@VdSJU;gRMo*SlKKXc>qG(3t!$ny)e!FXJO5&Lv|%!_trlt-TCm@)dd^HX8LbV+`aAVk{tE4 z^S*2^inDi}zSXeJ+XvO=lM*^%HR3i1} zIE!yT`9Nlu;62G-hb&9ZUJyUG@SC3Wyo#TjQQw)3QYt@fE2wt=V5*Pad#*7mfU2n@rI_7anp%va{|oa8Ps zNu}RF#ZwLx%=6lUyfi&Dmk#3CFO&eq{@OoNn=1cmZP)iYs*!Q+R#;!u&WV$*1YT3} zv^_7mZS(x?_Qob}lW#p;ofPnMpQ7ik;zinCd z&blp{7CiQBnMrS6+sMzJu6klyEc@xhQxrDOITj$9=0BlPW3qGf=06s8rHSu%{JLlV zY1f^C&si5Dy3Z`Xxgqv;RnWG{$>lQ3HZ5FLY3!l8^=|6hl3R(qf8UuHTXE|brcK|v zes^%{kHaRyQdh#eK8wv*zuRPg`iXCQ_G)-*EzN#dJ+GffcK45_g{!V#irp=<+q<1R z@AysUyyp`lkH2WyFM3bv#WI5#KUJ=Md-eQ6#lhPzpFW##ck=aZCtobzAqPnnNiV+0 ztm5T8kC`&^C)Z4#lDw~^=DFVL^-q53y + + + + + +tbb::aligned_space< T, N > Class Template Reference + + + + + + + +
+ +
+
tbb::aligned_space< T, N > Class Template Reference
+
+
+ +

Block of space aligned sufficiently to construct an array T with N elements. + More...

+ +

#include <aligned_space.h>

+ + + + + + + + +

+Public Member Functions

+T * begin () const
 Pointer to beginning of array.
 
+T * end () const
 Pointer to one past last element in array.
 
+

Detailed Description

+

template<typename T, size_t N = 1>
+class tbb::aligned_space< T, N >

+ +

Block of space aligned sufficiently to construct an array T with N elements.

+

The elements are not constructed or destroyed by this class.

+

The documentation for this class was generated from the following file:
    +
  • aligned_space.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00015.html b/doc/html/a00015.html new file mode 100644 index 0000000..fb5bc5d --- /dev/null +++ b/doc/html/a00015.html @@ -0,0 +1,95 @@ + + + + + + +tbb::flow::interface10::internal::async_helpers< T, typename > Struct Template Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::internal::async_helpers< T, typename > Struct Template Reference
+
+
+ + + + + + +

+Public Types

+typedef async_msg< T > async_type
 
+typedef T filtered_type
 
+ + + + + + + + + + + +

+Static Public Member Functions

+static const void * to_void_ptr (const T &t)
 
+static void * to_void_ptr (T &t)
 
+static const T & from_void_ptr (const void *p)
 
+static T & from_void_ptr (void *p)
 
+static task * try_put_task_wrapper_impl (receiver< T > *const this_recv, const void *p, bool is_async)
 
+ + + +

+Static Public Attributes

+static const bool is_async_type = false
 
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00016.html b/doc/html/a00016.html new file mode 100644 index 0000000..507884a --- /dev/null +++ b/doc/html/a00016.html @@ -0,0 +1,95 @@ + + + + + + +tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type > Struct Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type > Struct Template Reference
+
+
+ + + + + + +

+Public Types

+typedef T async_type
 
+typedef T::async_msg_data_type filtered_type
 
+ + + + + + + + + + + +

+Static Public Member Functions

+static const void * to_void_ptr (const T &t)
 
+static void * to_void_ptr (T &t)
 
+static const T & from_void_ptr (const void *p)
 
+static T & from_void_ptr (void *p)
 
+static task * try_put_task_wrapper_impl (receiver< T > *const this_recv, const void *p, bool is_async)
 
+ + + +

+Static Public Attributes

+static const bool is_async_type = true
 
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00017.html b/doc/html/a00017.html new file mode 100644 index 0000000..30a3065 --- /dev/null +++ b/doc/html/a00017.html @@ -0,0 +1,65 @@ + + + + + + +tbb::flow::interface10::async_msg< T > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::async_msg< T > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::async_msg< T >:
+
+
+ + +tbb::flow::interface10::opencl_async_msg< T, Factory > + +
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00017.png b/doc/html/a00017.png new file mode 100644 index 0000000000000000000000000000000000000000..62809e09c025aa7bc92c24495a3529710b869ae5 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0y~yU~~hr12~w0WY9;Q4?s#Hz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op_!kQx-0%1uk9NLCVEnlsU z-QH8XD)wRE^(^LlPt3Rz7Ue#;$HRDU_2RQkEnmudzPGDSD^YtcV6HwtM)bj=dz)XK zmU#c~uHEeVx9qWZe2=OZr{s!{pS3$O=q`Ctag>QJeQD^UAk_jpYYRu z!*%L+{3>IzTCRD2-rQS#`f=~vn+Lv1{1v;~9J~4I^t#tk)>hY!Nj*?)oqTJ4ZNtS$ z^)fTsSL^b9Ub3!DxhDUKudaUaf1?xok5oJc82I=6oGY6)p07Wi^`f6) z`q%S@dGj}Cm^d1}k5)eR?Sc1k&0`C@YC=qA6`3D?ari}GkbR)^U$Nkxy4_4~e^+k3 zSe|v?qUZnRX$ijHp4q>>@;lh~;@twC@arpmgX&Y3v;E+REqWkd`TMVg`t$hPmuD4);)ZC>ekMHiko&I_K zU$xb@U!ShJth;w#6#J|FZ_jQ!_b*59c1(An`Tgy4?Ro88%Ehvy&zG^d&HdoLByxH6 z@>%KWj0uYhZ~xeFg=6jXvM*-ubo#&Ar{i>HA zRbEci^R+VEx8q}Ya*TEVYk|v_#m>_|zF+p^?!}7KQ!Hy$Vy~W5n%^8aX + + + + + +tbb::flow::interface10::internal::async_storage< T > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::async_storage< T > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00019.html b/doc/html/a00019.html new file mode 100644 index 0000000..21c8333 --- /dev/null +++ b/doc/html/a00019.html @@ -0,0 +1,91 @@ + + + + + + +tbb::atomic< T > Struct Template Reference + + + + + + + +
+ +
+
tbb::atomic< T > Struct Template Reference
+
+
+ +

Primary template for atomic. + More...

+ +

#include <atomic.h>

+
+Inheritance diagram for tbb::atomic< T >:
+
+
+ + + +
+ + + + + + + + +

+Public Member Functions

+constexpr atomic (T arg)
 
+T operator= (T rhs)
 
+atomic< T > & operator= (const atomic< T > &rhs)
 
+

Detailed Description

+

template<typename T>
+struct tbb::atomic< T >

+ +

Primary template for atomic.

+

See the Reference for details.

+

The documentation for this struct was generated from the following file:
    +
  • atomic.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00019.png b/doc/html/a00019.png new file mode 100644 index 0000000000000000000000000000000000000000..257e92316a0f929b71f361a432c540790e3aa7f3 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^bAUL2gBeKP_Ia}bNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~KJs*N45?szJ2!ChD+L}m|F}Q@{@cfi zNBL^(zP6)k=FXWfH;QP?X*-gB=1dstmY$~qiY85Ys8(M7=W3bE93Q(9+c}%B zE>mGun^+y{H%YEAFIe7kcb(Jkp0~@t=IpJW&i%pQXLXu%-Vci}OTQmXoO!vZwsAxI z`>C2S&a2-_-~aBN-~65P??Z*>*3M7(iu!)fk(e~|+k~J=J71T5-t1Ie|HCow^mzyS zLlchbpWyvzA9kYo#M|{h@=LpA`a_M%_Zk*W()qL{=FHCDGxy9W-WQe3*w*s?{JN<2 zgYrt#SB821V(@?a&2Q&T`Ts^mlT0>knWHjy*%K8_=aZg6ZL8@36AjA-9#!@U3!g9;O_6bEo5Xw~pol@zi%-G%Bx4Gaz{wVc?J^m z%F=wzfStb>Z`MBS41)X<3w`s)u(69h&|;tlZz6N U`E{-mm;x9)UHx3vIVCg!07tnQJOBUy literal 0 HcmV?d00001 diff --git a/doc/html/a00020.html b/doc/html/a00020.html new file mode 100644 index 0000000..2df9f5d --- /dev/null +++ b/doc/html/a00020.html @@ -0,0 +1,90 @@ + + + + + + +tbb::atomic< void * > Struct Template Reference + + + + + + + +
+ +
+
tbb::atomic< void * > Struct Template Reference
+
+
+ +

Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. + More...

+ +

#include <atomic.h>

+
+Inheritance diagram for tbb::atomic< void * >:
+
+
+ + + +
+ + + + + + + + +

+Public Member Functions

+constexpr atomic (void *arg)
 
+void * operator= (void *rhs)
 
+atomic< void * > & operator= (const atomic< void * > &rhs)
 
+

Detailed Description

+

template<>
+struct tbb::atomic< void * >

+ +

Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->.

+

The documentation for this struct was generated from the following file:
    +
  • atomic.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00020.png b/doc/html/a00020.png new file mode 100644 index 0000000000000000000000000000000000000000..c5aaf08d4cf2f1620041e8af25c242a2ccda892d GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^JApWWgBeH`S*WN0DTx4|5ZC|z{{xvX-h3_XKQsZz z0^pi_;$?-04Zl`3) zK0~P|e}aoWtB%i1%!l=bnIFG{>8PcdE#~F&-h&w#rQ{uj;>dhxIqqmQ|l#_}TTGd-dskQ!d_9^0dAA z{=$3Px6_}Ue*fpg(({RWp6<^~r!RRQ@NCi)@0s2~dgaB&n-s&W3BEI#p9DQ)*g3`0K`)hWf;T?yh2%6dRfz*FP_?HeKUW_y&JeNQ zQLZL=w)FM zpUvExbKf~fmz#V0tT+Sy!!ghEF0GYZ@Yrc9%lr$XsWp|A-4lOyTiHMU*ZK1k*T3sF zQd`pZ8nNH`c<(Rs=Y3HJ?p&0dWBxzwob%lIChtG(+j6Y5?&|L)KMV6C&u;6>-Cc02 w`T2Tp$+x-;(^qV_NAZ}=J(aXH;ZN+RXJ>t1))ue;n7kM~UHx3vIVCg!01z!vasU7T literal 0 HcmV?d00001 diff --git a/doc/html/a00021.html b/doc/html/a00021.html new file mode 100644 index 0000000..4498392 --- /dev/null +++ b/doc/html/a00021.html @@ -0,0 +1,63 @@ + + + + + + +tbb::interface7::task_arena::attach Struct Reference + + + + + + + +
+
+
tbb::interface7::task_arena::attach Struct Reference
+
+
+ +

Tag class used to indicate the "attaching" constructor. + More...

+ +

#include <task_arena.h>

+

Detailed Description

+

Tag class used to indicate the "attaching" constructor.

+

The documentation for this struct was generated from the following file:
    +
  • task_arena.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00022.html b/doc/html/a00022.html new file mode 100644 index 0000000..4495b56 --- /dev/null +++ b/doc/html/a00022.html @@ -0,0 +1,81 @@ + + + + + + +tbb::bad_last_alloc Class Reference + + + + + + + +
+ +
+
tbb::bad_last_alloc Class Reference
+
+
+ +

Exception for concurrent containers. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::bad_last_alloc:
+
+
+ + + +
+ + + + +

+Public Member Functions

+const char * what () const __TBB_override throw ()
 
+

Detailed Description

+

Exception for concurrent containers.

+

The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00022.png b/doc/html/a00022.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb758af9ddd44d28dd181d94f81aba158247ead GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0vp^B|sd&!3-q-S1vRKQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;`x%6qO{EwA*f{#Y0i!%{LFJWUgb<^340?_u|^#jXG`jd;df){MHfS7oL^n zU}U#2`^ZC%zJ;2po^emt^prj?xRK0v-&BQyieqQeYUXV>TDVP)#3@$&N+N`7hG_4AG?NsO)A43kpKqsyZrlS-i-On ZaK_AaZJgZ3P+-I`c)I$ztaD0e0stVj;yM5T literal 0 HcmV?d00001 diff --git a/doc/html/a00023.html b/doc/html/a00023.html new file mode 100644 index 0000000..d0df5a5 --- /dev/null +++ b/doc/html/a00023.html @@ -0,0 +1,66 @@ + + + + + + +tbb::interface6::internal::basic_handler Class Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::interface6::internal::basic_handler Class Reference
+
+
+ + + + +

+Public Member Functions

+void operator() (aggregator_operation *op_list) const
 
+
The documentation for this class was generated from the following file:
    +
  • aggregator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00024.html b/doc/html/a00024.html new file mode 100644 index 0000000..c1123a2 --- /dev/null +++ b/doc/html/a00024.html @@ -0,0 +1,84 @@ + + + + + + +tbb::interface6::internal::basic_operation< Body > Class Template Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::interface6::internal::basic_operation< Body > Class Template Reference
+
+
+
+Inheritance diagram for tbb::interface6::internal::basic_operation< Body >:
+
+
+ + +tbb::interface6::internal::basic_operation_base +tbb::interface6::aggregator_operation + +
+ + + + +

+Public Member Functions

basic_operation (const Body &b)
 
+ + + + +

+Additional Inherited Members

- Public Types inherited from tbb::interface6::aggregator_operation
enum  aggregator_operation_status { agg_waiting =0, +agg_finished + }
 
+
The documentation for this class was generated from the following file:
    +
  • aggregator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00024.png b/doc/html/a00024.png new file mode 100644 index 0000000000000000000000000000000000000000..cadf33aedd5b7cd17f7b012f1bad70f6bc772756 GIT binary patch literal 2213 zcmb`JdstH07Qnrh(^zUl_A(tGXf%w8NtTV7k1Je7iHe7>6vl$g%zRfM#Z{+dYDxvv z@Li*rsNtB^Mbl`=F=Pyrq%sxF5Fde*G18bg$6Mcb?;rg+=ljk%>#V)@TIZ~_etVxE z_hW)AS8iHqVq#*63PxZ}Oia;$%=~g0a0N#rXuxgbel#ArxVQ+26R-6ddB5fZ(tl5p zNM!copabyuWjYpvGXad2j{a^u98h_p5CQnp|IiFgvr6x-@qdhDHxDmf%1hd~oLP|j z%2rnQs3|9-xJIMB_gjh`JH@W+i+s`3pFkiK;sFe5oz8+I5iKZg6`KPEU)$Tgyu2C> z0wrQ06E2hs%%g00z?LDn<(&F`9eASW8|HJbjP;NE4SE4M8?>>Rc z3!<`OVFVk#6K-gp@MjdS6T**$T7L*N(#TPR+Eo8_-}6UT6vPVx!^u&JU`jSab`ZYz zO|4gthToST@9};hhsZ4{4d#w0bfp~M=Fq>*A`osN?iFnW6(A6=n>lqHEDIa*d^3=) zU0}+$H5?e0$7DKVdDxIi@aL3=T;<7(ic0=ePi-7E#>4BiuxuF|+( zVZTqSuT=WfyGdikaBJR#3*R?i_w$g?b!{f;c+?Sl{F(A0v#^_t^XNbu?KE-jc0>8M zq(!ChWJM4M+s)`cOQs=eC-tKorMLXr3 zbRPOn`H8+k_rmxy&ZQ4qjOC0SbT{ddRr-fvdmMQ9~dzSe(O zf-5~ZEn{WE8~0of(yHW6;4nK$%RP}hDlJX5KSWQzf)?xjE8ia~h$)(URq+*nB+b>G zUo5yhDqEX&Fj?y(dt>)*>h|FDp-O3F?W8tGeF+afu_2NJtinh$A42Qom}sSnMb;UQ2zBtS+Aq8lFqjagdOf~wIqoW9R0I|)2sX(Zcq zrBt3ni?>-wwpoaMbqAsyvjm1^=AOaas*418DUMTRjGZDSZzJk`}P|pLn?E4*Es%IA4%*` zWF?+5Boy>tX{8P9`&u&|kfEGEB!|ydO-(nDONyz+qTz*g{>`>r`z_w>L|L=$Zce9K zlYkvbK25kKe_llkvq_Vm64udJ;lH0j?U1xgbVQN8aDk?Kr#$a;2=$hP^ke1b$Ga-uH%QGP9Jgfl&ul%nF(+2JDQ8W7^$9A zkZLjPHqz<#M`^*pW_Z_z%Xd{Gcm$3i)eu$Gv;HJZ=yAJ3zYDHmjMk^x76R+?5vPxc zWculhqqbay{S)W8x0C-~*9LD~h%oDk;@zU=i#!A_J2vM$O~`=eaj<5U2dM|z=@}M` z@ta+nF*2VndY7O;P){7c(b*tRU+ot5op95=fj3h3>q|QXDKmn>7=v1ujn3IA_Ei1u zG$lx)Gkyhj0LjC29}@7IpD&|CoV}Ck+l#Va-y)gK!T=q>irskr3mx^tYF)*aV9C2b SK)^qR2?~ip-1z7B*?$3cL@}8F literal 0 HcmV?d00001 diff --git a/doc/html/a00025.html b/doc/html/a00025.html new file mode 100644 index 0000000..271b0aa --- /dev/null +++ b/doc/html/a00025.html @@ -0,0 +1,98 @@ + + + + + + +tbb::interface6::internal::basic_operation_base Class Reference + + + + + + + +
+ +
+
tbb::interface6::internal::basic_operation_base Class Referenceabstract
+
+
+
+Inheritance diagram for tbb::interface6::internal::basic_operation_base:
+
+
+ + +tbb::interface6::aggregator_operation +tbb::interface6::internal::basic_operation< Body > + +
+ + + + +

+Friends

+class basic_handler
 
+ + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from tbb::interface6::aggregator_operation
enum  aggregator_operation_status { agg_waiting =0, +agg_finished + }
 
- Public Member Functions inherited from tbb::interface6::aggregator_operation
+void start ()
 Call start before handling this operation.
 
void finish ()
 Call finish when done handling this operation. More...
 
+aggregator_operationnext ()
 
+void set_next (aggregator_operation *n)
 
+
The documentation for this class was generated from the following file:
    +
  • aggregator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00025.png b/doc/html/a00025.png new file mode 100644 index 0000000000000000000000000000000000000000..0f94299e82ac6d9c147a19a509648b78560c3d88 GIT binary patch literal 1561 zcmc&!Yf#cz9Q|w7qKlR_rQ)Ml(R2(WTQ$paTvWtN2sKk9*WD;zyD2{MMVh*llPODx zsjF#weigbMHNO?wQ|*bAG>*i}ge4 z>p}DY0MJK!d*A>-3#!3aKpQmY&DuLW&1H=B4e(T})fzZGt4u8Dp=i+O-PP5#F?V#Q z<_Su``S}AH(x)Zq4{!j0jlZKk+yj!e=E|n>>k(VLHs54)s4W#b2-RIM1>S#p&>nT4 zaLT|w18vLL#h_VJV78QMXt+1kwTA*r$$_GmKuGF~IDxq3$osw5j>JWG9;G>?&=|qcIO<5jtH0-f<$dvOe4>7V);VrDY2O1a@osjid>Vu zYK5G`JGpATb;Rx9aOksz^!XzA(@{cpsQpTqGLBdz30LA(NHXjdsyQtV`wiN{`AsaE z+goc~avqq!$~;HpDAm!(!6Rlg?;%|^8;V}@{QqLyFNMZBdf*{d}M9c^?N!LJ7;8$W?TGsdD2tl_c zaYRIPw)(^O+*9{qF8go4RgLwEb-PDGedplp{yjHprA>HwDwbu~I%RFX939OS$}(Aw z$j(F03^@~4qS+QF-l0J9&KeW(nS-qc{6Xy4DNZk4beR6QeSx$)4{Xj`&8n=E42>2; zhr7#x{45!;kX&saLi<_$0cD@l!qj`tS&IgY~;}}Q?=J68e z{9r}y#)Vu*o$*CCW9?O!F9n^9j0mP%oum^?{zt=oY#Es6zv6su>Y%CGXvkJgA6kOZ zRFp9lR)Bz^EiP9QNUE@xOqj3APJWh_bzI!Qf}2T*mR7f`20W>$<(4rhH)h7!2w892 z!@s-T%U7g!3O>s@a(|3hl znA>x~KWiWXf@GAEE`dFY9oqth%*or^(gYIC#815>mo~T);0~D9a2{7#5o6i+=728& z8K|te?i0lm$|l<6kTrRvSHh0d&j;+ITY3J3)$kH6{eHU#DPIpv;p-Ip&xDRS^wWH1 zLRR@A6geNC-i?(+MK+e@%NYV)_WCT8Jwhq&o6hOnJ_ea4BaGj{p0H+^m5Vv-VIdxw zggO1px(X9_xMTnFFY(j&#jjifOd;i;6Jc?w{rC=LT=sI1EI65eZ0Q&-|J~3+8Lxp) zea&m&-CF8xyC8kh?*>K>DSkMx6P;S>c0OW#nXr$ + + + + + +tbb::blocked_range< Value > Class Template Reference + + + + + + + +
+ +
+
tbb::blocked_range< Value > Class Template Reference
+
+
+ +

A range over which to iterate. + More...

+ +

#include <blocked_range.h>

+ + + + + + + + +

+Public Types

typedef Value const_iterator
 Type of a value. More...
 
+typedef std::size_t size_type
 Type for size of a range.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 blocked_range ()
 Construct range with default-constructed values for begin, end, and grainsize. More...
 
blocked_range (Value begin_, Value end_, size_type grainsize_=1)
 Construct range over half-open interval [begin,end), with the given grainsize.
 
+const_iterator begin () const
 Beginning of range.
 
+const_iterator end () const
 One past last value in range.
 
size_type size () const
 Size of the range. More...
 
+size_type grainsize () const
 The grain size for this range.
 
+bool empty () const
 True if range is empty.
 
bool is_divisible () const
 True if range is divisible. More...
 
 blocked_range (blocked_range &r, split)
 Split range. More...
 
 blocked_range (blocked_range &r, proportional_split &proportion)
 Split range. More...
 
+ + + + +

+Static Public Attributes

+static const bool is_splittable_in_proportion = true
 Static field to support proportional split.
 
+ + + + + + + +

+Friends

+template<typename RowValue , typename ColValue >
class blocked_range2d
 
+template<typename RowValue , typename ColValue , typename PageValue >
class blocked_range3d
 
+

Detailed Description

+

template<typename Value>
+class tbb::blocked_range< Value >

+ +

A range over which to iterate.

+

Member Typedef Documentation

+ +
+
+
+template<typename Value>
+ + + + +
typedef Value tbb::blocked_range< Value >::const_iterator
+
+ +

Type of a value.

+

Called a const_iterator for sake of algorithms that need to treat a blocked_range as an STL container.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename Value>
+ + + + + +
+ + + + + + + +
tbb::blocked_range< Value >::blocked_range ()
+
+inline
+
+ +

Construct range with default-constructed values for begin, end, and grainsize.

+

Requires that Value have a default constructor.

+ +
+
+ +
+
+
+template<typename Value>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
tbb::blocked_range< Value >::blocked_range (blocked_range< Value > & r,
split  
)
+
+inline
+
+ +

Split range.

+

The new Range *this has the second part, the old range r has the first part. Unspecified if end()<begin() or !is_divisible().

+ +
+
+ +
+
+
+template<typename Value>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
tbb::blocked_range< Value >::blocked_range (blocked_range< Value > & r,
proportional_split & proportion 
)
+
+inline
+
+ +

Split range.

+

The new Range *this has the second part split according to specified proportion, the old range r has the first part. Unspecified if end()<begin() or !is_divisible().

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename Value>
+ + + + + +
+ + + + + + + +
bool tbb::blocked_range< Value >::is_divisible () const
+
+inline
+
+
+ +
+
+
+template<typename Value>
+ + + + + +
+ + + + + + + +
size_type tbb::blocked_range< Value >::size () const
+
+inline
+
+ +

Size of the range.

+

Unspecified if end()<begin().

+ +

Referenced by tbb::blocked_range< I >::is_divisible().

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • blocked_range.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00027.html b/doc/html/a00027.html new file mode 100644 index 0000000..3896e2a --- /dev/null +++ b/doc/html/a00027.html @@ -0,0 +1,120 @@ + + + + + + +tbb::blocked_range2d< RowValue, ColValue > Class Template Reference + + + + + + + +
+ +
+
tbb::blocked_range2d< RowValue, ColValue > Class Template Reference
+
+
+ +

A 2-dimensional range that models the Range concept. + More...

+ +

#include <blocked_range2d.h>

+ + + + + + + +

+Public Types

+typedef blocked_range< RowValue > row_range_type
 Type for size of an iteration range.
 
+typedef blocked_range< ColValue > col_range_type
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

blocked_range2d (RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize)
 
blocked_range2d (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)
 
+bool empty () const
 True if range is empty.
 
+bool is_divisible () const
 True if range is divisible into two pieces.
 
blocked_range2d (blocked_range2d &r, split)
 
blocked_range2d (blocked_range2d &r, proportional_split &proportion)
 
+const row_range_typerows () const
 The rows of the iteration space.
 
+const col_range_typecols () const
 The columns of the iteration space.
 
+ + + + +

+Static Public Attributes

+static const bool is_splittable_in_proportion = true
 Static field to support proportional split.
 
+

Detailed Description

+

template<typename RowValue, typename ColValue = RowValue>
+class tbb::blocked_range2d< RowValue, ColValue >

+ +

A 2-dimensional range that models the Range concept.

+

The documentation for this class was generated from the following file:
    +
  • blocked_range2d.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00028.html b/doc/html/a00028.html new file mode 100644 index 0000000..78ee806 --- /dev/null +++ b/doc/html/a00028.html @@ -0,0 +1,127 @@ + + + + + + +tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference + + + + + + + +
+ +
+
tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference
+
+
+ +

A 3-dimensional range that models the Range concept. + More...

+ +

#include <blocked_range3d.h>

+ + + + + + + + + +

+Public Types

+typedef blocked_range< PageValue > page_range_type
 Type for size of an iteration range.
 
+typedef blocked_range< RowValue > row_range_type
 
+typedef blocked_range< ColValue > col_range_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

blocked_range3d (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)
 
blocked_range3d (PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize)
 
+bool empty () const
 True if range is empty.
 
+bool is_divisible () const
 True if range is divisible into two pieces.
 
blocked_range3d (blocked_range3d &r, split)
 
blocked_range3d (blocked_range3d &r, proportional_split &proportion)
 
+const page_range_typepages () const
 The pages of the iteration space.
 
+const row_range_typerows () const
 The rows of the iteration space.
 
+const col_range_typecols () const
 The columns of the iteration space.
 
+ + + + +

+Static Public Attributes

+static const bool is_splittable_in_proportion = true
 Static field to support proportional split.
 
+

Detailed Description

+

template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue>
+class tbb::blocked_range3d< PageValue, RowValue, ColValue >

+ +

A 3-dimensional range that models the Range concept.

+

The documentation for this class was generated from the following file:
    +
  • blocked_range3d.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00029.html b/doc/html/a00029.html new file mode 100644 index 0000000..9cb48eb --- /dev/null +++ b/doc/html/a00029.html @@ -0,0 +1,56 @@ + + + + + + +tbb::flow::interface10::internal::broadcast_cache< T, M > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::broadcast_cache< T, M > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00030.html b/doc/html/a00030.html new file mode 100644 index 0000000..a705016 --- /dev/null +++ b/doc/html/a00030.html @@ -0,0 +1,96 @@ + + + + + + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Class Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Class Reference
+
+
+ +

bucket accessor is to find, rehash, acquire a lock, and access a bucket + More...

+ +

#include <concurrent_hash_map.h>

+
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor:
+
+
+ + + +
+ + + + + + + + + + + + + +

+Public Member Functions

bucket_accessor (concurrent_hash_map *base, const hashcode_t h, bool writer=false)
 
+void acquire (concurrent_hash_map *base, const hashcode_t h, bool writer=false)
 find a bucket by masked hashcode, optionally rehash, and acquire the lock
 
+bool is_writer ()
 check whether bucket is locked for write
 
+bucket * operator() ()
 get bucket pointer
 
+

Detailed Description

+

template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor

+ +

bucket accessor is to find, rehash, acquire a lock, and access a bucket

+

The documentation for this class was generated from the following file:
    +
  • concurrent_hash_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00030.png b/doc/html/a00030.png new file mode 100644 index 0000000000000000000000000000000000000000..9dea0c02f2dcf13c98fe30ad2f8962ebabdc2d05 GIT binary patch literal 1110 zcmeAS@N?(olHy`uVBq!ia0y~yV0;f`2XHV0N%lRwuYr_AfKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1M^c)7srqa#Uahsm^YyW@g z_Y)j+emYz#+qGY8@Gh`ljv~zO2SONG|Btv?WWX6E#H95SA_FW+_d z=l%WVzdt7}yz!0wgYPxl^{*JF-La3TE0y0O|Lt+vjLr4(54_jxn{!P+hoPo5eBboi zwa)Ax_+=|L#=-P+JZ~iw~c}Lx{cJ*ADhnv3zRX^Srw_EMc z%FAjpR`oBdudR;mbpLwqua)0tm(Be78F$5Fmn5I>PFj^S?fh@SZ);hO6)&(CdgNbt zW#Q7FpJtlMY-x4mG3M-C)%s2M{y&HJ)v`6;8JX53mu@%`W7Ro{|GdE?iT5AEdV=@A zx&Qg@w|B?ig-e7GSqez%70;)~B$m%gaAli&TGnfb%@%5=ZW2kMQb)Z_n8 zGWef%|F)V{neu@XuX@d&eG%T}Z}&euuufLE!8G#w_w#3deLwzb);>nAhI#18cy_+= g=0j(6nEx}rTx0ZndR^#RU?ITZ>FVdQ&MBb@06g76xBvhE literal 0 HcmV?d00001 diff --git a/doc/html/a00031.html b/doc/html/a00031.html new file mode 100644 index 0000000..8b72f5e --- /dev/null +++ b/doc/html/a00031.html @@ -0,0 +1,147 @@ + + + + + + +tbb::cache_aligned_allocator< T > Class Template Reference + + + + + + + +
+ +
+
tbb::cache_aligned_allocator< T > Class Template Reference
+
+
+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. + More...

+ +

#include <cache_aligned_allocator.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + + + + + + + + + +

+Public Types

+typedef
+internal::allocator_type< T >
+::value_type 
value_type
 
+typedef value_type * pointer
 
+typedef const value_type * const_pointer
 
+typedef value_type & reference
 
+typedef const value_type & const_reference
 
+typedef size_t size_type
 
+typedef ptrdiff_t difference_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

cache_aligned_allocator (const cache_aligned_allocator &) throw ()
 
+template<typename U >
 cache_aligned_allocator (const cache_aligned_allocator< U > &) throw ()
 
+pointer address (reference x) const
 
+const_pointer address (const_reference x) const
 
+pointer allocate (size_type n, const void *hint=0)
 Allocate space for n objects, starting on a cache/sector line.
 
+void deallocate (pointer p, size_type)
 Free block of memory that starts on a cache line.
 
+size_type max_size () const throw ()
 Largest value for which method allocate might succeed.
 
+template<typename U , typename... Args>
void construct (U *p, Args &&...args)
 Copy-construct value at location pointed to by p.
 
+void construct (pointer p, value_type &&value)
 
+void construct (pointer p, const value_type &value)
 
+void destroy (pointer p)
 Destroy value at location pointed to by p.
 
+

Detailed Description

+

template<typename T>
+class tbb::cache_aligned_allocator< T >

+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.

+

The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.

+

The documentation for this class was generated from the following file:
    +
  • cache_aligned_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00032.html b/doc/html/a00032.html new file mode 100644 index 0000000..979dd1b --- /dev/null +++ b/doc/html/a00032.html @@ -0,0 +1,88 @@ + + + + + + +tbb::cache_aligned_allocator< void > Class Template Reference + + + + + + + +
+ +
+
tbb::cache_aligned_allocator< void > Class Template Reference
+
+
+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. + More...

+ +

#include <cache_aligned_allocator.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + +

+Public Types

+typedef void * pointer
 
+typedef const void * const_pointer
 
+typedef void value_type
 
+

Detailed Description

+

template<>
+class tbb::cache_aligned_allocator< void >

+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.

+

The documentation for this class was generated from the following file:
    +
  • cache_aligned_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00033.html b/doc/html/a00033.html new file mode 100644 index 0000000..2b2f6a9 --- /dev/null +++ b/doc/html/a00033.html @@ -0,0 +1,76 @@ + + + + + + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Struct Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Struct Reference
+
+
+ + + + + + +

+Public Member Functions

call_clear_on_leave (concurrent_hash_map *a_ch_map)
 
+void dismiss ()
 
+ + + +

+Public Attributes

+concurrent_hash_mapmy_ch_map
 
+
The documentation for this struct was generated from the following file:
    +
  • concurrent_hash_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00034.html b/doc/html/a00034.html new file mode 100644 index 0000000..ac132aa --- /dev/null +++ b/doc/html/a00034.html @@ -0,0 +1,78 @@ + + + + + + +tbb::flow::interface10::callback< Callback, T > Class Template Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::callback< Callback, T > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::callback< Callback, T >:
+
+
+ + +tbb::flow::interface10::callback_base + +
+ + + + + + +

+Public Member Functions

callback (Callback c, const T &t)
 
+void call () __TBB_override
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00034.png b/doc/html/a00034.png new file mode 100644 index 0000000000000000000000000000000000000000..b53d86fc248525c13319a7204778bfa65f932a7a GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yVB`a`J2;quq~gb~&w!LffKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+151pji(^Oy7-g}5GNdwAvoymyL^ zL2|+NP0S8#FV?>ZO-zW-n47bGW^2pgGfv?J zOI%-vM$Vhnw9Bu2>vbbzX$yOgcE+9ZhnI&we8_#~%(=h%1vYtldv;c(!$G#3!Ydy-`>5zWrju`omVKuR>l1`|q-| zK4r+q7PcjjuT-Q^TjsXR&EtFgH++4@E>m4IH7it_S?2c{9k5ROBNOZ0Zw7uX-eV{K z$YQ?3>!OPfJErxCB^YnMwLi+bEkF0#fz2n265m>Q9(bJk)HU0E_vVtw+cm#-SwB4| zG&yyy%iVK9`J%2aI+s!-Tc!)l?%01f^2`~#BmdQ9P8U^ba-KQU7FISR(!=76jtW}H z8TVz*QmeFOc=sTmA<}{&s=mIvy?}wo=CT0)Lk5W`gN6wO42lmKoDMOzv@mmUvI_|D zDX7Recvz4jaUr%~$&^WZWK|d{&+de3O4dq;hE(-R+-I9PWZThcV;#t&m4K1 zYXuGWK+(7OP^x*wzE9iw8K%}9`nY4~1bg2ThCO#$Cx^{Hym9-tny1Yxe#Cs%|8BfN z_ijAb_wGeYmu6IM`2Td$opV+3bCVd3DxB)bb!k5J*Wuxm0ESar;i;TSD4Zc`t!w4}+(xpUXO@geCwT;3ta! literal 0 HcmV?d00001 diff --git a/doc/html/a00035.html b/doc/html/a00035.html new file mode 100644 index 0000000..360be99 --- /dev/null +++ b/doc/html/a00035.html @@ -0,0 +1,75 @@ + + + + + + +tbb::flow::interface10::callback_base Class Reference + + + + + + + +
+ +
+
tbb::flow::interface10::callback_base Class Referenceabstract
+
+
+
+Inheritance diagram for tbb::flow::interface10::callback_base:
+
+
+ + +tbb::flow::interface10::callback< Callback, T > + +
+ + + + +

+Public Member Functions

+virtual void call ()=0
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00035.png b/doc/html/a00035.png new file mode 100644 index 0000000000000000000000000000000000000000..2b42d5a912300cb905a526dd075e5b1f5e5f9615 GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0y~yVB`a`J2;quq~gb~&w!LffKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+153Q8i(^Oy^EO^{w7Qo2-uAzqM=SWn$m{P>~V$n`ZuI>h;G3<^K=VRx5LtdG{`V6OyGueC7OSErPr}e{eg9@iknFkAI{n!@zvr4dZ%nocX*1lnwz*wbiO^Wb+RcoLv_w3o}RT zK|}X7j-_uRW&7B3Pu$^7c<|>z;628w=aoG3!+PsKGXH1oJ3gH|KhLQzF@;Bc@jYgD zyWZ(1*KMEi@6wKXjb)ombosy4?^NyIT(>@NXMXSEt{VkBR^c;tb$nj(d-9uz<&zeK z++lLJ$yeS!ZC5&jMj=n!Mc(MUU8yC4PrVuX{vJuoWS2cxdSkiIT&>zyzSq;;cOE-< zsLSwFXpd4}Yw~U7-?P5+Zmavrcw8=iX_VXO5bD_8$E6PRkCkSUP{gVeEIriP5)^(bY82y z@|*T+g@)21kLkIBaZWi(b>CAMe+c}aU!e2!Q;-k?4={+GAOXb5E+E9Gpd#atacp9c z*C+isml*ax&1ZUgM7DTv6Zd{vjVP|}%^)chQ{)IXZUuT?LgDo<* z{n4%K*XmqfBDc`yj?U9FufIoZy0E~1rd8;#E3?;~@4I+UpQ+1m+b-jOt@@>M>Bs+l z5HHNBPKp1#@8GsurG3f$>x0%xEshP_8mU)ew|Z@Ti}HWjRQH`%st#Z4mVan*-yu8H z>Qvw9x${rd3- zdu6Up=~jJ64Bwl}{#$O(jh_qNl~|lPV|T!rL%#blyOjKN*|aouF+O8%&i0wDEr-uI q9ZF171P1ekp5$4}Jmc2?XSf)0GyljM^~J#Ahr!d;&t;ucLK6UaTQHIU literal 0 HcmV?d00001 diff --git a/doc/html/a00036.html b/doc/html/a00036.html new file mode 100644 index 0000000..5499c62 --- /dev/null +++ b/doc/html/a00036.html @@ -0,0 +1,214 @@ + + + + + + +tbb::captured_exception Class Reference + + + + + + + +
+ +
+
tbb::captured_exception Class Reference
+
+
+ +

This class is used by TBB to propagate information about unhandled exceptions into the root thread. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::captured_exception:
+
+
+ + +tbb::tbb_exception + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

captured_exception (const captured_exception &src)
 
captured_exception (const char *name_, const char *info)
 
+captured_exceptionoperator= (const captured_exception &src)
 
captured_exception
+*__TBB_EXPORTED_METHOD 
move () __TBB_override throw ()
 Creates and returns pointer to the deep copy of this exception object. More...
 
void __TBB_EXPORTED_METHOD destroy () __TBB_override throw ()
 Destroys objects created by the move() method. More...
 
void throw_self () __TBB_override
 Throws this exception object. More...
 
+const char *__TBB_EXPORTED_METHOD name () const __TBB_override throw ()
 Returns RTTI name of the originally intercepted exception.
 
+const char *__TBB_EXPORTED_METHOD what () const __TBB_override throw ()
 Returns the result of originally intercepted exception's what() method.
 
+void __TBB_EXPORTED_METHOD set (const char *name, const char *info) throw ()
 
+void __TBB_EXPORTED_METHOD clear () throw ()
 
- Public Member Functions inherited from tbb::tbb_exception
void operator delete (void *p)
 
+

Detailed Description

+

This class is used by TBB to propagate information about unhandled exceptions into the root thread.

+

Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers.

+
See Also
tbb::tbb_exception
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
void __TBB_EXPORTED_METHOD tbb::captured_exception::destroy ()
throw (
)
+
+virtual
+
+ +

Destroys objects created by the move() method.

+

Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method.

+ +

Implements tbb::tbb_exception.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
captured_exception* __TBB_EXPORTED_METHOD tbb::captured_exception::move ()
throw (
)
+
+virtual
+
+ +

Creates and returns pointer to the deep copy of this exception object.

+

Move semantics is allowed.

+ +

Implements tbb::tbb_exception.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void tbb::captured_exception::throw_self ()
+
+inlinevirtual
+
+ +

Throws this exception object.

+

Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown.

+ +

Implements tbb::tbb_exception.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00036.png b/doc/html/a00036.png new file mode 100644 index 0000000000000000000000000000000000000000..131abf604d940965927a6b649f954dbc6663df1c GIT binary patch literal 835 zcmeAS@N?(olHy`uVBq!ia0vp^lYqE`gBeI#zi@H{QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;Dc%M#ly{>*TGmAp@`UewZf^W~VZQ;*jy(gh&&2`@kXTM~ha!1y@W~%i&cA(++J_q=NEv*0Z zcGk?=)&L{p&l$m*OQ+0YdLS9ckb807rPo*I1Xp|Q4b1lA)jHb8{DD)Ip+A7>0|x=h ze(jag*y~~?ldcFYRPmGpVfm?-B9>{J>w5BKdwW_vaG$Dj^7&+--`_9!FZE06aA4K0 z$?dX9`=&atn-P7@((_iag?HryOP!@$M`fl=JvCv;rZ>{wT3z2CT`QOoSLa*2;bO?8 zsBgWhqE8K%KHMC7YG-_~R{nMA2Z2k?yPs9)`kwxMBx={vEq9~3PwbVQ9=&d-wAZ9B zJmLHs)@${8|M)EV8OVQfVZkJoSj8zSCzXMCarmoU>$15T(kmFZxK?|u4=?t6tNGP! zt)=M-5o^8!>QfkOoH!3C6QKTW3G&k1%F4Mw6{=Wlsok1z2KJhDg-?H86Kq`cXPwZ2 zzDP}Z_P^I>Xl3!6Pn(c`*8TVt%~w+n_ne$#|1Q-!!_<3czom|GcuQ{GxidFIS9-{O z3wnNU?~bG`Z{J*NW?s20E8KFrchc?C`#wf4{kY)&l90PP|Cev`%CFkF_RG7UTCYxP z?YwOfK4sO`FV|ELMt#%I+dggC)7m86y}`HM?bvy5SNJulo%ff{j<(Kwxv*->>E+*z z)%RXL{n+cVkRHET!>svXOa&DooDXh8V_Twc?UbOb&id4sr83%Uf~0{dp25@A&t;uc GLK6U^wt%|; literal 0 HcmV?d00001 diff --git a/doc/html/a00037.html b/doc/html/a00037.html new file mode 100644 index 0000000..22baf88 --- /dev/null +++ b/doc/html/a00037.html @@ -0,0 +1,110 @@ + + + + + + +tbb::combinable< T > Class Template Reference + + + + + + + +
+ +
+
tbb::combinable< T > Class Template Reference
+
+
+ +

Thread-local storage with optional reduction. + More...

+ +

#include <combinable.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename finit >
 combinable (finit _finit)
 
~combinable ()
 destructor
 
combinable (const combinable &other)
 
combinable (combinable &&other)
 
+combinableoperator= (const combinable &other)
 
+combinableoperator= (combinable &&other)
 
+void clear ()
 
+T & local ()
 
+T & local (bool &exists)
 
+template<typename combine_func_t >
combine (combine_func_t f_combine)
 
+template<typename combine_func_t >
void combine_each (combine_func_t f_combine)
 
+

Detailed Description

+

template<typename T>
+class tbb::combinable< T >

+ +

Thread-local storage with optional reduction.

+

The documentation for this class was generated from the following file:
    +
  • combinable.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00038.html b/doc/html/a00038.html new file mode 100644 index 0000000..f3d48e9 --- /dev/null +++ b/doc/html/a00038.html @@ -0,0 +1,56 @@ + + + + + + +tbb::interface6::internal::concrete_filter< T, U, Body > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::interface6::internal::concrete_filter< T, U, Body > Class Template Reference
+
+
+
The documentation for this class was generated from the following file:
    +
  • pipeline.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00039.html b/doc/html/a00039.html new file mode 100644 index 0000000..62b419f --- /dev/null +++ b/doc/html/a00039.html @@ -0,0 +1,411 @@ + + + + + + +tbb::concurrent_bounded_queue< T, A > Class Template Reference + + + + + + + +
+ +
+
tbb::concurrent_bounded_queue< T, A > Class Template Reference
+
+
+ +

A high-performance thread-safe blocking concurrent bounded queue. + More...

+ +

#include <concurrent_queue.h>

+
+Inheritance diagram for tbb::concurrent_bounded_queue< T, A >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef T value_type
 Element type in the queue.
 
+typedef A allocator_type
 Allocator type.
 
+typedef T & reference
 Reference type.
 
+typedef const T & const_reference
 Const reference type.
 
typedef std::ptrdiff_t size_type
 Integral type for representing size of the queue. More...
 
+typedef std::ptrdiff_t difference_type
 Difference type for iterator.
 
+typedef
+internal::concurrent_queue_iterator
+< concurrent_bounded_queue, T > 
iterator
 
+typedef
+internal::concurrent_queue_iterator
+< concurrent_bounded_queue,
+const T > 
const_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_bounded_queue (const allocator_type &a=allocator_type())
 Construct empty queue.
 
concurrent_bounded_queue (const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())
 Copy constructor.
 
concurrent_bounded_queue (concurrent_bounded_queue &&src)
 Move constructors.
 
concurrent_bounded_queue (concurrent_bounded_queue &&src, const allocator_type &a)
 
+template<typename InputIterator >
 concurrent_bounded_queue (InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
 [begin,end) constructor
 
~concurrent_bounded_queue ()
 Destroy queue.
 
+void push (const T &source)
 Enqueue an item at tail of queue.
 
+void push (T &&source)
 Move an item at tail of queue.
 
+template<typename... Arguments>
void emplace (Arguments &&...args)
 
void pop (T &destination)
 Dequeue item from head of queue. More...
 
+void abort ()
 Abort all pending queue operations.
 
bool try_push (const T &source)
 Enqueue an item at tail of queue if queue is not already full. More...
 
bool try_push (T &&source)
 Move an item at tail of queue if queue is not already full. More...
 
+template<typename... Arguments>
bool try_emplace (Arguments &&...args)
 
bool try_pop (T &destination)
 Attempt to dequeue an item from head of queue. More...
 
size_type size () const
 Return number of pushes minus number of pops. More...
 
+bool empty () const
 Equivalent to size()<=0.
 
+size_type capacity () const
 Maximum number of allowed elements.
 
void set_capacity (size_type new_capacity)
 Set the capacity. More...
 
+allocator_type get_allocator () const
 return allocator object
 
+void clear ()
 clear the queue. not thread-safe.
 
+iterator unsafe_begin ()
 
+iterator unsafe_end ()
 
+const_iterator unsafe_begin () const
 
+const_iterator unsafe_end () const
 
+ + + + +

+Friends

+template<typename Container , typename Value >
class internal::concurrent_queue_iterator
 
+

Detailed Description

+

template<typename T, class A = cache_aligned_allocator<T>>
+class tbb::concurrent_bounded_queue< T, A >

+ +

A high-performance thread-safe blocking concurrent bounded queue.

+

This is the pre-PPL TBB concurrent queue which supports boundedness and blocking semantics. Note that method names agree with the PPL-style concurrent queue. Multiple threads may each push and pop concurrently. Assignment construction is not allowed.

+

Member Typedef Documentation

+ +
+
+
+template<typename T , class A = cache_aligned_allocator<T>>
+ + + + +
typedef std::ptrdiff_t tbb::concurrent_bounded_queue< T, A >::size_type
+
+ +

Integral type for representing size of the queue.

+

Note that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T , class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
void tbb::concurrent_bounded_queue< T, A >::pop (T & destination)
+
+inline
+
+ +

Dequeue item from head of queue.

+

Block until an item becomes available, and then dequeue it.

+ +
+
+ +
+
+
+template<typename T , class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
void tbb::concurrent_bounded_queue< T, A >::set_capacity (size_type new_capacity)
+
+inline
+
+ +

Set the capacity.

+

Setting the capacity to 0 causes subsequent try_push operations to always fail, and subsequent push operations to block forever.

+ +
+
+ +
+
+
+template<typename T , class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + +
size_type tbb::concurrent_bounded_queue< T, A >::size () const
+
+inline
+
+ +

Return number of pushes minus number of pops.

+

Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed capacity() if there are push operations in flight.

+ +
+
+ +
+
+
+template<typename T , class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
bool tbb::concurrent_bounded_queue< T, A >::try_pop (T & destination)
+
+inline
+
+ +

Attempt to dequeue an item from head of queue.

+

Does not wait for item to become available. Returns true if successful; false otherwise.

+ +
+
+ +
+
+
+template<typename T , class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
bool tbb::concurrent_bounded_queue< T, A >::try_push (const T & source)
+
+inline
+
+ +

Enqueue an item at tail of queue if queue is not already full.

+

Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full.

+ +
+
+ +
+
+
+template<typename T , class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
bool tbb::concurrent_bounded_queue< T, A >::try_push (T && source)
+
+inline
+
+ +

Move an item at tail of queue if queue is not already full.

+

Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • concurrent_queue.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00039.png b/doc/html/a00039.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc03c333709697a42cb92d8e57a8cb283aa9e6c GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0vp^pMf}lgBeKvUa;90NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~^?JHEhEy=VoqPAvY6Tuwar66i|IO{f zLOK+({Qs+6cqw*KWdp~NXeW+^#)2vyp=gI$Llm$E~M4w0ryWpH`nAm!Hb%OL#Kh(&+1;9O`r_U#+aFhM+pX|A*6#dMF7Hb#|ETZI6%l=cCU;DI z*>>K2J_eCDb+_KdPnK`*ytz^R`>)WF((`BE z+%tQ4$=7nh$<1#gR=@f@`PdIrUf*reXJ)?4o|!CI*>!VA*v#AyJFn|Sy81>}>7UaOU>%=d5qR_gf|{I-$5wf)@Y)OGWo*WQg|4%gnQ zyE8f`dItZiZ>J{urR>hTuG{yz%F*cJVgA$h&j0^ykO~__uIbj uY(8wmZ1VN<83z4puwW7{=1}~ywEpkH{#!B&T4w+gD}$%2pUXO@geCw7e1)R` literal 0 HcmV?d00001 diff --git a/doc/html/a00040.html b/doc/html/a00040.html new file mode 100644 index 0000000..ca71f92 --- /dev/null +++ b/doc/html/a00040.html @@ -0,0 +1,1089 @@ + + + + + + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference
+
+
+ +

Unordered map from Key to T. + More...

+ +

#include <concurrent_hash_map.h>

+
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + +

+Classes

class  accessor
 Allows write access to elements and combines data access, locking, and garbage collection. More...
 
struct  accessor_not_used
 
class  bucket_accessor
 bucket accessor is to find, rehash, acquire a lock, and access a bucket More...
 
struct  call_clear_on_leave
 
class  const_accessor
 Combines data access, locking, and garbage collection. More...
 
struct  node
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Key key_type
 
+typedef T mapped_type
 
+typedef std::pair< const Key, T > value_type
 
+typedef hash_map_base::size_type size_type
 
+typedef ptrdiff_t difference_type
 
+typedef value_type * pointer
 
+typedef const value_type * const_pointer
 
+typedef value_type & reference
 
+typedef const value_type & const_reference
 
+typedef
+internal::hash_map_iterator
+< concurrent_hash_map,
+value_type > 
iterator
 
+typedef
+internal::hash_map_iterator
+< concurrent_hash_map, const
+value_type > 
const_iterator
 
+typedef
+internal::hash_map_range
+< iterator > 
range_type
 
+typedef
+internal::hash_map_range
+< const_iterator > 
const_range_type
 
+typedef Allocator allocator_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_hash_map (const allocator_type &a=allocator_type())
 Construct empty table.
 
concurrent_hash_map (size_type n, const allocator_type &a=allocator_type())
 Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.
 
concurrent_hash_map (const concurrent_hash_map &table, const allocator_type &a=allocator_type())
 Copy constructor.
 
concurrent_hash_map (concurrent_hash_map &&table)
 Move constructor.
 
concurrent_hash_map (concurrent_hash_map &&table, const allocator_type &a)
 Move constructor.
 
+template<typename I >
 concurrent_hash_map (I first, I last, const allocator_type &a=allocator_type())
 Construction with copying iteration range and given allocator instance.
 
concurrent_hash_map (std::initializer_list< value_type > il, const allocator_type &a=allocator_type())
 Construct empty table with n preallocated buckets. This number serves also as initial concurrency level.
 
+concurrent_hash_mapoperator= (const concurrent_hash_map &table)
 Assignment.
 
+concurrent_hash_mapoperator= (concurrent_hash_map &&table)
 Move Assignment.
 
+concurrent_hash_mapoperator= (std::initializer_list< value_type > il)
 Assignment.
 
void rehash (size_type n=0)
 Rehashes and optionally resizes the whole table. More...
 
+void clear ()
 Clear table.
 
~concurrent_hash_map ()
 Clear table and destroy it.
 
+range_type range (size_type grainsize=1)
 
+const_range_type range (size_type grainsize=1) const
 
+iterator begin ()
 
+iterator end ()
 
+const_iterator begin () const
 
+const_iterator end () const
 
+std::pair< iterator, iterator > equal_range (const Key &key)
 
+std::pair< const_iterator,
+const_iterator > 
equal_range (const Key &key) const
 
+size_type size () const
 Number of items in table.
 
+bool empty () const
 True if size()==0.
 
+size_type max_size () const
 Upper bound on size.
 
+size_type bucket_count () const
 Returns the current number of buckets.
 
+allocator_type get_allocator () const
 return allocator object
 
+void swap (concurrent_hash_map &table)
 swap two instances. Iterators are invalidated
 
+size_type count (const Key &key) const
 Return count of items (0 or 1)
 
bool find (const_accessor &result, const Key &key) const
 Find item and acquire a read lock on the item. More...
 
bool find (accessor &result, const Key &key)
 Find item and acquire a write lock on the item. More...
 
bool insert (const_accessor &result, const Key &key)
 Insert item (if not already present) and acquire a read lock on the item. More...
 
bool insert (accessor &result, const Key &key)
 Insert item (if not already present) and acquire a write lock on the item. More...
 
bool insert (const_accessor &result, const value_type &value)
 Insert item by copying if there is no such key present already and acquire a read lock on the item. More...
 
bool insert (accessor &result, const value_type &value)
 Insert item by copying if there is no such key present already and acquire a write lock on the item. More...
 
bool insert (const value_type &value)
 Insert item by copying if there is no such key present already. More...
 
bool insert (const_accessor &result, value_type &&value)
 Insert item by copying if there is no such key present already and acquire a read lock on the item. More...
 
bool insert (accessor &result, value_type &&value)
 Insert item by copying if there is no such key present already and acquire a write lock on the item. More...
 
bool insert (value_type &&value)
 Insert item by copying if there is no such key present already. More...
 
template<typename... Args>
bool emplace (const_accessor &result, Args &&...args)
 Insert item by copying if there is no such key present already and acquire a read lock on the item. More...
 
template<typename... Args>
bool emplace (accessor &result, Args &&...args)
 Insert item by copying if there is no such key present already and acquire a write lock on the item. More...
 
template<typename... Args>
bool emplace (Args &&...args)
 Insert item by copying if there is no such key present already. More...
 
+template<typename I >
void insert (I first, I last)
 Insert range [first, last)
 
+void insert (std::initializer_list< value_type > il)
 Insert initializer list.
 
bool erase (const Key &key)
 Erase item. More...
 
bool erase (const_accessor &item_accessor)
 Erase item by const_accessor. More...
 
bool erase (accessor &item_accessor)
 Erase item by accessor. More...
 
+ + + +

+Protected Types

+typedef Allocator::template
+rebind< node >::other 
node_allocator_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+void delete_node (node_base *n)
 
+nodesearch_bucket (const key_type &key, bucket *b) const
 
+void rehash_bucket (bucket *b_new, const hashcode_t h)
 
+bool lookup (bool op_insert, const Key &key, const T *t, const_accessor *result, bool write, node *(*allocate_node)(node_allocator_type &, const Key &, const T *), node *tmp_n=0)
 Insert or find item and optionally acquire a lock on the item.
 
+template<typename Accessor >
bool generic_move_insert (Accessor &&result, value_type &&value)
 
+template<typename Accessor , typename... Args>
bool generic_emplace (Accessor &&result, Args &&...args)
 
+bool exclude (const_accessor &item_accessor)
 delete item by accessor
 
+template<typename I >
std::pair< I, I > internal_equal_range (const Key &key, I end) const
 Returns an iterator for an item defined by the key, or for the next item after it (if upper==true)
 
+void internal_copy (const concurrent_hash_map &source)
 Copy "source" to *this, where *this must start out empty.
 
+template<typename I >
void internal_copy (I first, I last)
 
const_pointer internal_fast_find (const Key &key) const
 Fast find when no concurrent erasure is used. For internal use inside TBB only! More...
 
+ + + + + + + + + + + + +

+Static Protected Member Functions

+static nodeallocate_node_copy_construct (node_allocator_type &allocator, const Key &key, const T *t)
 
+static nodeallocate_node_move_construct (node_allocator_type &allocator, const Key &key, const T *t)
 
+template<typename... Args>
static nodeallocate_node_emplace_construct (node_allocator_type &allocator, Args &&...args)
 
+static nodeallocate_node_default_construct (node_allocator_type &allocator, const Key &key, const T *)
 
+static nodedo_not_allocate_node (node_allocator_type &, const Key &, const T *)
 
+ + + + + +

+Protected Attributes

+node_allocator_type my_allocator
 
+HashCompare my_hash_compare
 
+ + + + + + + + + + + + + + + + + + + +

+Friends

+template<typename Container , typename Value >
class internal::hash_map_iterator
 
+template<typename I >
class internal::hash_map_range
 
+class const_accessor
 
+const_accessoraccessor_location (accessor_not_used const &)
 
+const_accessoraccessor_location (const_accessor &a)
 
+bool is_write_access_needed (accessor const &)
 
+bool is_write_access_needed (const_accessor const &)
 
+bool is_write_access_needed (accessor_not_used const &)
 
+

Detailed Description

+

template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >

+ +

Unordered map from Key to T.

+
concurrent_hash_map is associative container with concurrent access.
+
Compatibility
The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).
+
Exception Safety
    +
  • Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.
  • +
  • If exception happens during insert() operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).
  • +
  • If exception happens during operator=() operation, the container can have a part of source items, and methods size() and empty() can return wrong results.
  • +
+
+
Changes since TBB 2.1
    +
  • Replaced internal algorithm and data structure. Patent is pending.
  • +
  • Added buckets number argument for constructor
  • +
+
+
Changes since TBB 2.0
    +
  • Fixed exception-safety
  • +
  • Added template argument for allocator
  • +
  • Added allocator argument in constructors
  • +
  • Added constructor from a range of iterators
  • +
  • Added several new overloaded insert() methods
  • +
  • Added get_allocator()
  • +
  • Added swap()
  • +
  • Added count()
  • +
  • Added overloaded erase(accessor &) and erase(const_accessor&)
  • +
  • Added equal_range() [const]
  • +
  • Added [const_]pointer, [const_]reference, and allocator_type types
  • +
  • Added global functions: operator==(), operator!=(), and swap()
  • +
+
+

Member Function Documentation

+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::emplace (const_accessorresult,
Args &&... args 
)
+
+inline
+
+ +

Insert item by copying if there is no such key present already and acquire a read lock on the item.

+

Returns true if item is new.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::emplace (accessorresult,
Args &&... args 
)
+
+inline
+
+ +

Insert item by copying if there is no such key present already and acquire a write lock on the item.

+

Returns true if item is new.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::emplace (Args &&... args)
+
+inline
+
+ +

Insert item by copying if there is no such key present already.

+

Returns true if item is inserted.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare , typename A >
+ + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::erase (const Key & key)
+
+ +

Erase item.

+

Return true if item was erased by particularly this call.

+ +

References tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor::is_writer().

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::erase (const_accessoritem_accessor)
+
+inline
+
+ +

Erase item by const_accessor.

+

Return true if item was erased by particularly this call.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::erase (accessoritem_accessor)
+
+inline
+
+ +

Erase item by accessor.

+

Return true if item was erased by particularly this call.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::find (const_accessorresult,
const Key & key 
) const
+
+inline
+
+ +

Find item and acquire a read lock on the item.

+

Return true if item is found, false otherwise.

+ +

References tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release().

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::find (accessorresult,
const Key & key 
)
+
+inline
+
+ +

Find item and acquire a write lock on the item.

+

Return true if item is found, false otherwise.

+ +

References tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release().

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (const_accessorresult,
const Key & key 
)
+
+inline
+
+ +

Insert item (if not already present) and acquire a read lock on the item.

+

Returns true if item is new.

+ +

References tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release().

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (accessorresult,
const Key & key 
)
+
+inline
+
+ +

Insert item (if not already present) and acquire a write lock on the item.

+

Returns true if item is new.

+ +

References tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release().

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (const_accessorresult,
const value_type & value 
)
+
+inline
+
+ +

Insert item by copying if there is no such key present already and acquire a read lock on the item.

+

Returns true if item is new.

+ +

References tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release().

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (accessorresult,
const value_type & value 
)
+
+inline
+
+ +

Insert item by copying if there is no such key present already and acquire a write lock on the item.

+

Returns true if item is new.

+ +

References tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor::release().

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (const value_type & value)
+
+inline
+
+ +

Insert item by copying if there is no such key present already.

+

Returns true if item is inserted.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (const_accessorresult,
value_type && value 
)
+
+inline
+
+ +

Insert item by copying if there is no such key present already and acquire a read lock on the item.

+

Returns true if item is new.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (accessorresult,
value_type && value 
)
+
+inline
+
+ +

Insert item by copying if there is no such key present already and acquire a write lock on the item.

+

Returns true if item is new.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + +
bool tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::insert (value_type && value)
+
+inline
+
+ +

Insert item by copying if there is no such key present already.

+

Returns true if item is inserted.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+ + + + + +
+ + + + + + + + +
const_pointer tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::internal_fast_find (const Key & key) const
+
+inlineprotected
+
+ +

Fast find when no concurrent erasure is used. For internal use inside TBB only!

+

Return pointer to item with given key, or NULL if no such item exists. Must not be called concurrently with erasure operations.

+ +
+
+ +
+
+
+template<typename Key , typename T , typename HashCompare , typename A >
+ + + + + + + + +
void tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::rehash (size_type n = 0)
+
+ +

Rehashes and optionally resizes the whole table.

+

Useful to optimize performance before or after concurrent operations. Also enables using of find() and count() concurrent methods in serial context.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • concurrent_hash_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00040.png b/doc/html/a00040.png new file mode 100644 index 0000000000000000000000000000000000000000..3f0a8f2647a021e7aaf7f2cdc797f78fc7a65808 GIT binary patch literal 1052 zcmeAS@N?(olHy`uVBq!ia0y~yVC)3412~w0~xgx&n4otD-)^XA!vNmD#7tzE+D+2t^6!V(TRFesr zwYRvug(rzLo>0q?nzhzEeB0ItCcEvKS+oDWZdP$s-q2}zrnuvJHt*kCk80oMzPh!o z{=r@$Yir%)+e$HRMg8yYEn8vxQs1+%BmdFVfM>TGJ9qltcez+!Iblggi}}X(?c%Sk zn769U`Zq~r;_?|Up8h=MGEaEYm-B@;Q+YoJmQ~$d&V1+UIsbkCzbJSzc4j+GvU_~f zxN=eF%R6s%-aWODxZ)L*QsnOu#PV+vr)QO3rqd*)32G{uOmK$2FxZ=W8Eoe1H?TZN zyTszauy0=w>w&*ZI2#!DxGdpnxa}#-VCccmAm|~?!0Es=f#Hb4W?=^wph_THg~9N| z8y0~^6Gjl5(}Bmxn$bnU7tCf7Xg=eIU)%n~LuYghjdx4(C@}7rYQhLI2!YQYdA;rb zr>}3G$OxM1QHCH&f!9yg%0i`48M` zeAZK^9#`wz$|Pgp;hg>P_Q%)vZQ`C+3w^1ZCw6d?&^^`S%TI6KUnMy;wDj=OlE3G- z7Im+Cb4~KeudZj#sRG|;emm0RQ?l>Xq0M6X!J2Nn{9oFdl{U+r5 z+T%eN(zaS1oErKrZ2wCAZQma$EjX$$Yo>^BY+bzRL;k*Bt9v`G92!D z_21LDV_3Qt)*nCeZ`Zm`T~)amAJ%JJYVwXhyUhBu-`8+|-yarN+pCv9sIFf0csEb| z-M^b{FV4)fUYF*3ec_9@ooV{<#utCTn%ViVPD4cgZKofX-5I~X#f!`gvo_YeDk@vG zyf$S~x!;w*Ung9o8{$%H{YrACsO@@w|7Ya<{h_g*#c2mHD>Hby`njxgN@xNAg1Pio literal 0 HcmV?d00001 diff --git a/doc/html/a00041.html b/doc/html/a00041.html new file mode 100644 index 0000000..ed5c6c2 --- /dev/null +++ b/doc/html/a00041.html @@ -0,0 +1,92 @@ + + + + + + +tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Class Template Reference
+
+
+
+Inheritance diagram for tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type >:
+
+
+ + + +
+ + + + +

+Public Types

+typedef handle_object handle
 
+ + + + + +

+Public Member Functions

concurrent_lru_cache (value_function_type f, std::size_t number_of_lru_history_items)
 
+handle_object operator[] (key_type k)
 
+ + + +

+Friends

+class tbb::internal::aggregating_functor< self_type, aggregated_operation_type >
 
+
The documentation for this class was generated from the following file:
    +
  • concurrent_lru_cache.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00041.png b/doc/html/a00041.png new file mode 100644 index 0000000000000000000000000000000000000000..856b3afbc688a7b01023a31c6da442bf2c88844f GIT binary patch literal 1068 zcmeAS@N?(olHy`uVBq!ia0y~yV0-~&2XHV0$)^colYo>&fKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1M_ZA7srqa#Vd*}=@b`cH z9?zPWK5y>wY?xMcOf-6vi&xIXI#s1ZE-pR1ik@zh+>SYUUt)>K@SMfKt?MbAuuwIV zN#~2o@9h^RnJ_-)lI^;FEoo=&-stE5em^q&F+{^q#x?5E4PAzw84~Y|tn)L33 z+U=m#lP~RkSvBR|^XArROE@KLc_wrG^?34pzKW@Y)zrBcT^*+{Y1{~M15kt70TefW z5U>KdpNIEA$sY!ZhK(C9Fg*VJIe95#+i@r6p7YM>+PnrA2F?u^7=S^@2y`&B z&jGzJkIQV9zJI-Z>s@Qbi?z%Jv-YJo@cmtw-xCv)SAL)2`Afd{t?TdBUVE*+aJSg+ z*L#4{U6HMI(h&`FRy)~W{_t`CiYaqePXBlQo3{V;l-h4P&ezMTPTPvFKh>E1{@dgp zuUCi6R&2OeHm~#xZV&)2F|?lz-bl zOI!PA`~Ec>t}L1|?bh>UayN8de3g=7^t@Xlnzi@bt>-QO+<{uI2L5=m)#62Z>piV+ zdgtRZuDK=uVqIv=oZfow`Ucr;;hv`#?a|+%Bk@)9-nYnQ&SpEMzS|mKZ>@V=nj3TO zh1-+K3gP$nua=CBWL>l%eb>C`sq0?V$WMO7JC(~c`)Lhwk;z;baqldrjYdhpTSL1f~svT=rpC}KS(tq@- z)Rj|bx1W)*K3g8l@!_QQgt*8T3~CDl!(QLp&vAD88HShzPenb}|Brle{9?^N#+O&$ zvFJpS1Nvo?dLtDnm{r-UW|As6>Z literal 0 HcmV?d00001 diff --git a/doc/html/a00042.html b/doc/html/a00042.html new file mode 100644 index 0000000..ac0b4ac --- /dev/null +++ b/doc/html/a00042.html @@ -0,0 +1,606 @@ + + + + + + +tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_priority_queue< T, Compare, A > Class Template Reference
+
+
+ +

Concurrent priority queue. + More...

+ +

#include <concurrent_priority_queue.h>

+ + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef T value_type
 Element type in the queue.
 
+typedef T & reference
 Reference type.
 
+typedef const T & const_reference
 Const reference type.
 
+typedef size_t size_type
 Integral type for representing size of the queue.
 
+typedef ptrdiff_t difference_type
 Difference type for iterator.
 
+typedef A allocator_type
 Allocator type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_priority_queue (const allocator_type &a=allocator_type())
 Constructs a new concurrent_priority_queue with default capacity.
 
concurrent_priority_queue (size_type init_capacity, const allocator_type &a=allocator_type())
 Constructs a new concurrent_priority_queue with init_sz capacity.
 
+template<typename InputIterator >
 concurrent_priority_queue (InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
 [begin,end) constructor
 
concurrent_priority_queue (std::initializer_list< T > init_list, const allocator_type &a=allocator_type())
 Constructor from std::initializer_list.
 
 concurrent_priority_queue (const concurrent_priority_queue &src)
 Copy constructor. More...
 
 concurrent_priority_queue (const concurrent_priority_queue &src, const allocator_type &a)
 Copy constructor with specific allocator. More...
 
concurrent_priority_queueoperator= (const concurrent_priority_queue &src)
 Assignment operator. More...
 
 concurrent_priority_queue (concurrent_priority_queue &&src)
 Move constructor. More...
 
 concurrent_priority_queue (concurrent_priority_queue &&src, const allocator_type &a)
 Move constructor with specific allocator. More...
 
concurrent_priority_queueoperator= (concurrent_priority_queue &&src)
 Move assignment operator. More...
 
+template<typename InputIterator >
void assign (InputIterator begin, InputIterator end)
 Assign the queue from [begin,end) range, not thread-safe.
 
+void assign (std::initializer_list< T > il)
 Assign the queue from std::initializer_list, not thread-safe.
 
+concurrent_priority_queueoperator= (std::initializer_list< T > il)
 Assign from std::initializer_list, not thread-safe.
 
bool empty () const
 Returns true if empty, false otherwise. More...
 
size_type size () const
 Returns the current number of elements contained in the queue. More...
 
void push (const_reference elem)
 Pushes elem onto the queue, increasing capacity of queue if necessary. More...
 
void push (value_type &&elem)
 Pushes elem onto the queue, increasing capacity of queue if necessary. More...
 
template<typename... Args>
void emplace (Args &&...args)
 Constructs a new element using args as the arguments for its construction and pushes it onto the queue */. More...
 
bool try_pop (reference elem)
 Gets a reference to and removes highest priority element. More...
 
void clear ()
 Clear the queue; not thread-safe. More...
 
void swap (concurrent_priority_queue &q)
 Swap this queue with another; not thread-safe. More...
 
+allocator_type get_allocator () const
 Return allocator object.
 
+

Detailed Description

+

template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+class tbb::interface5::concurrent_priority_queue< T, Compare, A >

+ +

Concurrent priority queue.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
tbb::interface5::concurrent_priority_queue< T, Compare, A >::concurrent_priority_queue (const concurrent_priority_queue< T, Compare, A > & src)
+
+inlineexplicit
+
+ +

Copy constructor.

+

This operation is unsafe if there are pending concurrent operations on the src queue.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
tbb::interface5::concurrent_priority_queue< T, Compare, A >::concurrent_priority_queue (const concurrent_priority_queue< T, Compare, A > & src,
const allocator_typea 
)
+
+inline
+
+ +

Copy constructor with specific allocator.

+

This operation is unsafe if there are pending concurrent operations on the src queue.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
tbb::interface5::concurrent_priority_queue< T, Compare, A >::concurrent_priority_queue (concurrent_priority_queue< T, Compare, A > && src)
+
+inline
+
+ +

Move constructor.

+

This operation is unsafe if there are pending concurrent operations on the src queue.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
tbb::interface5::concurrent_priority_queue< T, Compare, A >::concurrent_priority_queue (concurrent_priority_queue< T, Compare, A > && src,
const allocator_typea 
)
+
+inline
+
+ +

Move constructor with specific allocator.

+

This operation is unsafe if there are pending concurrent operations on the src queue.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + +
void tbb::interface5::concurrent_priority_queue< T, Compare, A >::clear ()
+
+inline
+
+ +

Clear the queue; not thread-safe.

+

This operation is unsafe if there are pending concurrent operations on the queue. Resets size, effectively emptying queue; does not free space. May not clear elements added in pending operations.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + +
void tbb::interface5::concurrent_priority_queue< T, Compare, A >::emplace (Args &&... args)
+
+inline
+
+ +

Constructs a new element using args as the arguments for its construction and pushes it onto the queue */.

+

This operation can be safely used concurrently with other push, try_pop or emplace operations.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + +
bool tbb::interface5::concurrent_priority_queue< T, Compare, A >::empty () const
+
+inline
+
+ +

Returns true if empty, false otherwise.

+

Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
concurrent_priority_queue& tbb::interface5::concurrent_priority_queue< T, Compare, A >::operator= (const concurrent_priority_queue< T, Compare, A > & src)
+
+inline
+
+ +

Assignment operator.

+

This operation is unsafe if there are pending concurrent operations on the src queue.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
concurrent_priority_queue& tbb::interface5::concurrent_priority_queue< T, Compare, A >::operator= (concurrent_priority_queue< T, Compare, A > && src)
+
+inline
+
+ +

Move assignment operator.

+

This operation is unsafe if there are pending concurrent operations on the src queue.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
void tbb::interface5::concurrent_priority_queue< T, Compare, A >::push (const_reference elem)
+
+inline
+
+ +

Pushes elem onto the queue, increasing capacity of queue if necessary.

+

This operation can be safely used concurrently with other push, try_pop or emplace operations.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
void tbb::interface5::concurrent_priority_queue< T, Compare, A >::push (value_type && elem)
+
+inline
+
+ +

Pushes elem onto the queue, increasing capacity of queue if necessary.

+

This operation can be safely used concurrently with other push, try_pop or emplace operations.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + +
size_type tbb::interface5::concurrent_priority_queue< T, Compare, A >::size () const
+
+inline
+
+ +

Returns the current number of elements contained in the queue.

+

Returned value may not reflect results of pending operations. This operation reads shared data and will trigger a race condition.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
void tbb::interface5::concurrent_priority_queue< T, Compare, A >::swap (concurrent_priority_queue< T, Compare, A > & q)
+
+inline
+
+ +

Swap this queue with another; not thread-safe.

+

This operation is unsafe if there are pending concurrent operations on the queue.

+ +
+
+ +
+
+
+template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
bool tbb::interface5::concurrent_priority_queue< T, Compare, A >::try_pop (reference elem)
+
+inline
+
+ +

Gets a reference to and removes highest priority element.

+

If a highest priority element was found, sets elem and returns true, otherwise returns false. This operation can be safely used concurrently with other push, try_pop or emplace operations.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • concurrent_priority_queue.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00043.html b/doc/html/a00043.html new file mode 100644 index 0000000..f357cdb --- /dev/null +++ b/doc/html/a00043.html @@ -0,0 +1,224 @@ + + + + + + +tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference + + + + + + + +
+ +
+
tbb::strict_ppl::concurrent_queue< T, A > Class Template Reference
+
+
+ +

A high-performance thread-safe non-blocking concurrent queue. + More...

+ +

#include <concurrent_queue.h>

+
+Inheritance diagram for tbb::strict_ppl::concurrent_queue< T, A >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef T value_type
 Element type in the queue.
 
+typedef T & reference
 Reference type.
 
+typedef const T & const_reference
 Const reference type.
 
+typedef size_t size_type
 Integral type for representing size of the queue.
 
+typedef ptrdiff_t difference_type
 Difference type for iterator.
 
+typedef A allocator_type
 Allocator type.
 
+typedef
+internal::concurrent_queue_iterator
+< concurrent_queue, T > 
iterator
 
+typedef
+internal::concurrent_queue_iterator
+< concurrent_queue, const T > 
const_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_queue (const allocator_type &a=allocator_type())
 Construct empty queue.
 
+template<typename InputIterator >
 concurrent_queue (InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
 [begin,end) constructor
 
concurrent_queue (const concurrent_queue &src, const allocator_type &a=allocator_type())
 Copy constructor.
 
concurrent_queue (concurrent_queue &&src)
 Move constructors.
 
concurrent_queue (concurrent_queue &&src, const allocator_type &a)
 
~concurrent_queue ()
 Destroy queue.
 
+void push (const T &source)
 Enqueue an item at tail of queue.
 
+void push (T &&source)
 
+template<typename... Arguments>
void emplace (Arguments &&...args)
 
bool try_pop (T &result)
 Attempt to dequeue an item from head of queue. More...
 
+size_type unsafe_size () const
 Return the number of items in the queue; thread unsafe.
 
+bool empty () const
 Equivalent to size()==0.
 
+void clear ()
 Clear the queue. not thread-safe.
 
+allocator_type get_allocator () const
 Return allocator object.
 
+iterator unsafe_begin ()
 
+iterator unsafe_end ()
 
+const_iterator unsafe_begin () const
 
+const_iterator unsafe_end () const
 
+ + + + +

+Friends

+template<typename Container , typename Value >
class internal::concurrent_queue_iterator
 
+

Detailed Description

+

template<typename T, typename A = cache_aligned_allocator<T>>
+class tbb::strict_ppl::concurrent_queue< T, A >

+ +

A high-performance thread-safe non-blocking concurrent queue.

+

Multiple threads may each push and pop concurrently. Assignment construction is not allowed.

+

Member Function Documentation

+ +
+
+
+template<typename T , typename A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
bool tbb::strict_ppl::concurrent_queue< T, A >::try_pop (T & result)
+
+inline
+
+ +

Attempt to dequeue an item from head of queue.

+

Does not wait for item to become available. Returns true if successful; false otherwise.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • concurrent_queue.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00043.png b/doc/html/a00043.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a9a4dd8a1bdf76bed3cf3af03fbd8ef90a637b GIT binary patch literal 872 zcmV-u1DE`XP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0008_NklI2mjz=aUw|;#NzKYtoDghTxFuPm6RJW2|ffmcQ%#CcoI`$@}*Y4e|r>b)WglZ?~gLa+kgJ2Dc67smjW}v~uNrlnC`U zQJql}mE+#{>E^s4Z-QA?n)v$d*2~O;x3YzCN#5DSnT194IWH3f^4t@u>U&OpEIuLk zMy@USP3*-~ABgH`45~d(j&pvIua|S~jR!gJ8MUwJS=fH@ot#TbUOnsaEHE zE=fPAPrd&$NwGA^B`KCBxg^EXLY`7e5e4uueF212 zSn{v0sOVwI7x19yami%&rS4t^`6bT@pCOJSXO>%%(GUUsj{J#^7edw4PMeH4seCT6u z+P7T2N`CF~gXEo+lq@v6*bQ-RJ(aEBkd;HgDUm zc5}bDO7Bzh?e*>k$y{dG)Q1^QP+j)c8_colTG>riuDp-zrAzKo;RDrHyYqQCKhzwF zc0<;nJ8M%{`>x54ocGBc&>6Wmy(T|u_@9z*t?7c?8?8_04Xx>T?u=fM`vCvLoHwuN z<-9dI$@x*QmpOMQ)?%MlWPQ#@$nJKu!;5O)&bhA$^K^F3J^A>Y*S*~|HutLBVaL6_ zEbMjjebDFJTh+b2nES=U-dgtn y{?D8PTqr=%E}=C0000 + + + + + +tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Class Template Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Class Template Reference
+
+
+
+Inheritance diagram for tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Key key_type
 
+typedef base_type::value_type value_type
 
+typedef T mapped_type
 
+typedef Hasher hasher
 
+typedef Key_equality key_equal
 
+typedef hash_compare key_compare
 
+typedef base_type::allocator_type allocator_type
 
+typedef base_type::pointer pointer
 
+typedef base_type::const_pointer const_pointer
 
+typedef base_type::reference reference
 
+typedef base_type::const_reference const_reference
 
+typedef base_type::size_type size_type
 
+typedef base_type::difference_type difference_type
 
+typedef base_type::iterator iterator
 
+typedef base_type::const_iterator const_iterator
 
+typedef base_type::iterator local_iterator
 
+typedef base_type::const_iterator const_local_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_unordered_map (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_map (const Allocator &a)
 
+template<typename Iterator >
 concurrent_unordered_map (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_map (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 Constructor from initializer_list.
 
concurrent_unordered_map (const concurrent_unordered_map &table)
 
+concurrent_unordered_mapoperator= (const concurrent_unordered_map &table)
 
concurrent_unordered_map (concurrent_unordered_map &&table)
 
+concurrent_unordered_mapoperator= (concurrent_unordered_map &&table)
 
concurrent_unordered_map (concurrent_unordered_map &&table, const Allocator &a)
 
concurrent_unordered_map (const concurrent_unordered_map &table, const Allocator &a)
 
+mapped_type & operator[] (const key_type &key)
 
+mapped_type & at (const key_type &key)
 
+const mapped_type & at (const key_type &key) const
 
+
The documentation for this class was generated from the following file:
    +
  • concurrent_unordered_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00044.png b/doc/html/a00044.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3c40436b0749b06f4880bfe7bb6a5d63b2a463 GIT binary patch literal 2163 zcmc(fc{JPU8pnUBHq+Kx>%FQfe=yYHRemw1Q?5hACIo zUaHZSQmTonl4xx$VhhI7SZmZ8N+xx0&$)lyGymP^ocDb{?{nVoInVo^_xq#}Y|JGO zD;)*^KoVzRY6k#fG!YXHiizer0th5p6bKiHSfNlT!kLA&NNV#hBH9~GO-%<uq15tloP7RF!HWt-OM3|EfLE_9r*wISKM4S+z zZ#C+(%*S$5mI=!#IF0Wv;Yeq`i!wvud~%{;)Y*3ac(?Dx-4K2N`EJKnt46*#i|Id> zFA%oeN0eyH?!^5L?YTUMLwayL-=BD7fot>2ft#aXi6{GJ+SEU{j095RRGA|ghy(4K zf*1bQp;#QI>=O;v2^-ty%66g~BpqCCzg{ekjM%R5bS^LNGt%X}BlFwBLdCk6xl40wdk(KPJY2VdbHfZ6q*+B684+~Xw zDOSl{s^3EtuX$WLbtq^peE(@o4t)+!m>OjVqS_u%n#*=MU~W)p^@Jk6F*)g#g?@43 z%sTv;cMfzhe1Bp2(5`ad&nNqyyewtACUqo#FkEQm8kI!XEAH%~S76c`ki>$+)+0M% zoGR9Hdp?X=eFjB=v^F*_ZP3^W}p7Fc?Xt z+`+p(T@&ibN7p?rN|T}w=GDTHSI%rvxm4B&xu4i2nfxlm@1-TiS_(4gP$R8@+#2A9 zU7Du2Rm)Z@g|x@|eQ}OkN#ow!e1J4FWGYi;(Nge1I2O3VCc_e-UZQFc5bq#FtfR~); z_yKy+TnnS`N0AV3c(Gzb%_PG4N%MNcdCSIJ{|4LVM@kCs44@}eAw^Yn0+YgEt6bz+ zqqz^Kjug*-Et)?7Y$<%vv*-KRCL(eMqgEk$k)CUZKl+Pwo>*4t|{FO5` z3v<^;$#b~W#4D|nmFf>-Om1;`rV15f3wjf~A$l)u(zrccw`)5`S3K>r0(4@Lh`#*E z%*v{{rCmYD&y#QJgNp2S*Z9$oc8inc|n-H;Vxnp z%M3B5GnO|B-SLy$1)+}d4OxC5RCq@@gV3gVBU71oLe*bsjJ6H4XJzjbtj{cYDxA9j z`~{EtU@hr1kzK0=1kyK~ds`weK>_eMxf2G6c>xklrj-_7;qNPas_LPy3Ab+v6$>lb zCO{#f+?fV|n}Bz1G5fUuu$QhQA_1fYR6l`(BoaWsr9<{qLH}0y`e64d0AgClP%mO(V+jzeUAe2QhCRq8Pf%crr`b zPT?7`71RQV;0`73R05U!_DOlptLh;t-|v?5aElM=Zo^sbxeiWx)lka(%(_EI1?K&K zwYAla#opGRo*qMjH|pWi^qNddqSEkZOxj^ZWmmIf_{s67dytX}fZtb

%&D`n!k)nmRBRw>7L!JTTtgbUH4Ud1^Y1<(emkCvDEoqcbB3* z#(ZgcNZZ3aW)XUfNaI}Oq`G$K*Vv~guV-1-J~i7MCjmZ zXE*hJ_Y*~!dUzcRKUAn6G-5~6+zffc{wiN`$4aHHGh*WK*t6?3Kak`s$&~B>C}ya$ zYqv%iB%b?3Um=$CF9-2}<@c2g>wgw(Sr@TSPei5)1RkD!V>>I$HGJhkuLd|~pw1cV zz8Ekp2#Zn$XAnbEeR_b=3_T*Esp@yjHQB+&2*xcG_@s^DlnUreOr=EvtD|jtcT?;- zjg};?D@<3;0NOM)EE0~RWXFYX`F-2-YcGc}KVlP9{)*djrLkFd6l96K{oXJCxC|Rv Wl{ldK-4|&<6gaGnDdW7?KmG)aA@ZgG literal 0 HcmV?d00001 diff --git a/doc/html/a00045.html b/doc/html/a00045.html new file mode 100644 index 0000000..bfdb1b1 --- /dev/null +++ b/doc/html/a00045.html @@ -0,0 +1,101 @@ + + + + + + +tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Class Template Reference + + + + + + +

+
+ +
+
tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Class Template Reference
+
+
+ + + + + + + + + + + + +

+Protected Types

enum  { allow_multimapping = Allow_multimapping + }
 
+typedef std::pair< const Key, T > value_type
 
+typedef Key key_type
 
+typedef Hash_compare hash_compare
 
+typedef Allocator::template
+rebind< value_type >::other 
allocator_type
 
+ + + +

+Protected Member Functions

concurrent_unordered_map_traits (const hash_compare &hc)
 
+ + + + +

+Static Protected Member Functions

+template<class Type1 , class Type2 >
static const Key & get_key (const std::pair< Type1, Type2 > &value)
 
+ + + +

+Protected Attributes

+hash_compare my_hash_compare
 
+
The documentation for this class was generated from the following file:
    +
  • concurrent_unordered_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00046.html b/doc/html/a00046.html new file mode 100644 index 0000000..29c7bfc --- /dev/null +++ b/doc/html/a00046.html @@ -0,0 +1,158 @@ + + + + + + +tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Class Template Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Class Template Reference
+
+
+
+Inheritance diagram for tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Key key_type
 
+typedef base_type::value_type value_type
 
+typedef T mapped_type
 
+typedef Hasher hasher
 
+typedef Key_equality key_equal
 
+typedef hash_compare key_compare
 
+typedef base_type::allocator_type allocator_type
 
+typedef base_type::pointer pointer
 
+typedef base_type::const_pointer const_pointer
 
+typedef base_type::reference reference
 
+typedef base_type::const_reference const_reference
 
+typedef base_type::size_type size_type
 
+typedef base_type::difference_type difference_type
 
+typedef base_type::iterator iterator
 
+typedef base_type::const_iterator const_iterator
 
+typedef base_type::iterator local_iterator
 
+typedef base_type::const_iterator const_local_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_unordered_multimap (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_multimap (const Allocator &a)
 
+template<typename Iterator >
 concurrent_unordered_multimap (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_multimap (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 Constructor from initializer_list.
 
concurrent_unordered_multimap (const concurrent_unordered_multimap &table)
 
+concurrent_unordered_multimapoperator= (const concurrent_unordered_multimap &table)
 
concurrent_unordered_multimap (concurrent_unordered_multimap &&table)
 
+concurrent_unordered_multimapoperator= (concurrent_unordered_multimap &&table)
 
concurrent_unordered_multimap (concurrent_unordered_multimap &&table, const Allocator &a)
 
concurrent_unordered_multimap (const concurrent_unordered_multimap &table, const Allocator &a)
 
+
The documentation for this class was generated from the following file:
    +
  • concurrent_unordered_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00046.png b/doc/html/a00046.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa3b58c9af6e07c385a119cbebb0f48e002ea6d GIT binary patch literal 2174 zcmc&#X;hNi8vc|@D~AXxG|K_UN)ffRNX=3Vk2Yv%T1p{BYC={dDrz^&B*=j*OzU*W zL@Sj@PdVfmXk~dS$Hbu`XK_fuDdm28&i#AW{deEB_TJBa*M9b}*84o0ap-`X`YN4O z005|C_q%uj0E7kNL#hz4KLxDz0|)pak0Y)Mg#v{A!!l}eO$vyXT2)omaz=+9I90vq zb-)_{7cEBfyCc?MN*(Lse1xVXy)V8Z*`l_L$&o4)5*sYtSzi~8E+n4cm6?%;+OPch z)7I=Xg1fmW&FhAFcG}KEMsN4CQ;iT^g(Ul_8`ubcL+?h}&I zKIOLX0G{?Jt!~^AU+ij|5k)=DKF@AAgK}@LY!ur2M{cB>yHOCekPCdq`0eTQ2iaO? zne7TLe6)*fH#qMfFw%0&DESjLm+h=eHnqqadJy76r66IFL8?d+2KPU`995ew+t+B- zg=m*;(frr2!Hxwzo-wXF-;yw$wWTmKF+;*QGW!3xDeXdr`F=v7RZO` znbPxm&1#=b47%K^dT|l+l5K047(Uc7Hyd@t_1iH8F}~iJS4fC74SZd5!lwhOXgn{-e6Ho1Czy*P>IQyz50wYVp%CsdP3<#6;)4N=>vBF*7vYpr)` z2#a<1@BVnsDRAp(%(&=h0c0hneG_s*&gis|ZT?gcq!RrF-{P5v^X=i5G$adYmV!=3 zAT%gK)%PL)YV#aF%ZX$~8fa!B1gbaSQc7X$gMdiQD9^_D8l2%est^O^^WZV%AM6+}K7^Rai{53H3xNX0 zcnHCbgW1sgQFN^zHs9m6*_Wl3uhW@TSFdq)sIkZpb3L^Vu#{#u?JW28~ARg_;!gGXD1Qz*oYQ52b zuG0poS7IDV@gR5{dygOaOWVSPn-uVhxxQ1|I9R7UTu!-F$x)t>_w&2gjUoW%VKxgC zU`C>7@idl^r;v~aDi*^wA)wrs#0wMrN4#`~AkE9eJUiXX9hIGCy&QmyJ)MD^0Msrk zrN@g@K~S}O;g>*1X)%%TPokpe%ywls0I^!lgjNCY%a4!V09I519zw!0D`3S5!}W;E zN>%`P$Pz2@Zx(0|0Jt%Dhb1cXZz|{>|6l5~Y{}WQyxq-tXBY_0^V2s*QYo- zv+(GnJD~FCPDRJI#XE4sDqoR17d>w5Lk0daWTY^`d$cTnYHpemaTI_gZ32Gih7p(q z;?#w*Iu&MkdPR7oG9BWC#9Z#{Fxh+{35kbEwqCyz{bcoL!m{a@4)PQ~F1aR`JR9vu z`DQ<&v#6lkYIXWu@Q8cc@tu?)AkFKDWk|ND=R^Zp@0c ztaV7)Ex({KC_T$>Wr!V1^+Ql5ej(3Sj+xWlNpvI1{Fe&ZYj!8E==DL|md>ZdbB|jt z`e+5|xFj0G`TVpp_;)e&0R6Ce7M2W?d807CF~b3}M;bMkN+*(h$^tWc|JcO8Gz)$B zOABSvoRY)O5Y+Q@)IBY5VWH-&@-x(ZN;;)%^6J7p^Eab!?yWGXt;-3Eiut2Y_i8n* z2AL>uNUBhW{30*d5jx7c47qa?{(4+hJXAs+c?cgWzLGjY$m49k8QL8xE==AfA%qA2 zS|UrEqOY#4lwPx18#Ko5Py;IOD!fT&Picvod#BEmhVy=xvPx1L31@FcbZs^56BhHa z%TWD6sG}b90h9`=-^B`{&*l zIZ{$U8%tE(rY*_y|4kG5VX)l={-oQM(BUane90%frEugwpDc)-Mh}X=8KDpQx~Pb| zo=T61^W`WtgZk=H`_r(m`=*znl+$e@J+vmgu$sPVfx5Ie`;?~@CsE3DG~RAX3K=ux zSlmmWr4*&RI9@tw;m-o}YA1Ft(0KeE9#7ZgR{Ss8OGTpYEPm(z6g_WDuk!H9>sbza QXaE>k*8?sEdrw^XH_eaiEdT%j literal 0 HcmV?d00001 diff --git a/doc/html/a00047.html b/doc/html/a00047.html new file mode 100644 index 0000000..dbe3225 --- /dev/null +++ b/doc/html/a00047.html @@ -0,0 +1,158 @@ + + + + + + +tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Class Template Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Class Template Reference
+
+
+
+Inheritance diagram for tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Key key_type
 
+typedef base_type::value_type value_type
 
+typedef Key mapped_type
 
+typedef Hasher hasher
 
+typedef Key_equality key_equal
 
+typedef hash_compare key_compare
 
+typedef base_type::allocator_type allocator_type
 
+typedef base_type::pointer pointer
 
+typedef base_type::const_pointer const_pointer
 
+typedef base_type::reference reference
 
+typedef base_type::const_reference const_reference
 
+typedef base_type::size_type size_type
 
+typedef base_type::difference_type difference_type
 
+typedef base_type::iterator iterator
 
+typedef base_type::const_iterator const_iterator
 
+typedef base_type::iterator local_iterator
 
+typedef base_type::const_iterator const_local_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_unordered_multiset (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_multiset (const Allocator &a)
 
+template<typename Iterator >
 concurrent_unordered_multiset (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_multiset (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 Constructor from initializer_list.
 
concurrent_unordered_multiset (const concurrent_unordered_multiset &table)
 
+concurrent_unordered_multisetoperator= (const concurrent_unordered_multiset &table)
 
concurrent_unordered_multiset (concurrent_unordered_multiset &&table)
 
+concurrent_unordered_multisetoperator= (concurrent_unordered_multiset &&table)
 
concurrent_unordered_multiset (concurrent_unordered_multiset &&table, const Allocator &a)
 
concurrent_unordered_multiset (const concurrent_unordered_multiset &table, const Allocator &a)
 
+
The documentation for this class was generated from the following file:
    +
  • concurrent_unordered_set.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00047.png b/doc/html/a00047.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef6d1904236c3649eed742e1ffccb737f059db0 GIT binary patch literal 2109 zcmc&!Ydq9z9{*cKxpb3g9Z@DyaxVu_rzDe1GBd7WB33Rlg}-s9%eb6cY9w}Xjz}@X zIFlqZF2iDCXpR^fj7u&tV=&C*&i*;OFZRuT_TBzIpXYhLzvuh>ZZE!1sw3ixqTHY5 z002;g+u1k)fHVkU$6eCUp6XV*MW{MnLtWn7+=Srdv;<6VdXn*exPQO)u|^x48r6%$C$PhCW1`rp)B-wg!|up9=WXAZN|O=WOxT?7$#- z`gNBMZ#=Tqs5CmVm|sB@hs1yOfUlYiH1+-k-&QH=|A}i6Qy6cUyEn>XQKKw@nGXZ2 z2@4xd9fh60R|tvSZ;%40(5i_ySg4!Tl3Wv|#!=6XL4fR~UT-+@0JSx`fKMSekKTwndLRkgW7~?5er9!IGO-*WRLEil3KzjUM5=Yemv9X(g5WqzGz*^Qpdyot-3S6NE5^83CL5tyaBpvj@NMAjkO zw75BaHdnjmBUYkr7A2_lA&_1td4!OF!H@ma5xsT}o$qAj%;PHkK)~*+)Q-92^z|MN zm#{90X%>CK1O`X+kSLuzN3d4DB6NE0V+>8L7`xkUPXKKfdt79_eEUdN8ca))mUVBH zF<}ucjkDj3CiPpi8KYUGY;TQ?DW%|xcw4Xodp+9Ht6sce^iX%8BS}CmEu{OjexF{b z9zgQqbDo5oQ9wL)ql+^-Ogyiz9H-?e50?H?4wj4FyWzv#UYK*$BUY^)dA>SdJ#Nu*bnm*mcj z$vvITpN^~UFcU=td_eOkwa*{k`I|2%&#HmKx6ra!+|V3jLOC_G7k|gd;lmuu_-`lD zP-Y52vrBDys)3Ypnnz~v=Mh?-kI3)i3u=jxOZvH!k6#b4>iGW0&SYBk6RIR3ufqu5 zhoWV1842_eN$Jn3-w1+sS6bW9f=+hMVvbIA&M4K|d}96S(BgN@`oWLB4=c&^`S~O@ zs+c$Bw-|UL`3#(#v6E3QYr77ws z5XG>eDouF0$QW0DXUVUCKH3|0s?IiC-Gymi^LX;605*l6XYZLQAtVg+FJv{Y-lqLq zRt!=GObb$&KZXM*K7*jiZ+uv*9r4+#!>%AC$yU413Uw%z{kM)CyJqt!H6`*iAT!)6 zl4Ss@fb^VCsRba70kr47rTfWZ00oAC$_Eq@rLq}WlX{k0lvf&hoA{yBe9MK(NI`*y z(&Rl*hD4|aAj1IK86;^#Kn5e@tez-k2tX}tC%OMesKOsb{(qrsh<^Evg)cb zRkY~8dhE4!1)1i%9T$)st@D`Q_@H3MQs41YWC2Ih?xrzs92m!7-hEo&r|R^!YUB;DjLvR&qDa@U93 zL3ot2XK(75y|LGzx{J}6SISr2<2UjG$FYU9;0o|9JcH6OhFAI$Tv_r957R4b{$zbI z?$-hu;;cBmT$L&)3~=xxonrSnc{deum8DRox}G}zy24O|F2|R{+u$4bM2oWG&pUa#7lrKv*8Df#xVs3BlZ&l~x+*Eum4GsVS~Z#0^3tE%80`(N zW+Nu{oH`K7yP~3c4l<&eE`XU@iYwu%oyhyP5$UQ;-&&vE0XsNGnZ)v1_{9R`8at46;Ecf x=)j>owCvpG+~}3q_dDFN7exP)zW!6+2~uHeYddU%TFwHH!7n3hC>Jpg{t2fK34#Cs literal 0 HcmV?d00001 diff --git a/doc/html/a00048.html b/doc/html/a00048.html new file mode 100644 index 0000000..90310c9 --- /dev/null +++ b/doc/html/a00048.html @@ -0,0 +1,158 @@ + + + + + + +tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Class Template Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Class Template Reference
+
+
+
+Inheritance diagram for tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Key key_type
 
+typedef base_type::value_type value_type
 
+typedef Key mapped_type
 
+typedef Hasher hasher
 
+typedef Key_equality key_equal
 
+typedef hash_compare key_compare
 
+typedef base_type::allocator_type allocator_type
 
+typedef base_type::pointer pointer
 
+typedef base_type::const_pointer const_pointer
 
+typedef base_type::reference reference
 
+typedef base_type::const_reference const_reference
 
+typedef base_type::size_type size_type
 
+typedef base_type::difference_type difference_type
 
+typedef base_type::iterator iterator
 
+typedef base_type::const_iterator const_iterator
 
+typedef base_type::iterator local_iterator
 
+typedef base_type::const_iterator const_local_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_unordered_set (size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_set (const Allocator &a)
 
+template<typename Iterator >
 concurrent_unordered_set (Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 
concurrent_unordered_set (std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
 Constructor from initializer_list.
 
concurrent_unordered_set (const concurrent_unordered_set &table)
 
+concurrent_unordered_setoperator= (const concurrent_unordered_set &table)
 
concurrent_unordered_set (concurrent_unordered_set &&table)
 
+concurrent_unordered_setoperator= (concurrent_unordered_set &&table)
 
concurrent_unordered_set (concurrent_unordered_set &&table, const Allocator &a)
 
concurrent_unordered_set (const concurrent_unordered_set &table, const Allocator &a)
 
+
The documentation for this class was generated from the following file:
    +
  • concurrent_unordered_set.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00048.png b/doc/html/a00048.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9a0992510e41f62a52fb5849b985065586c9cb GIT binary patch literal 2095 zcmc&!c{tnI8vYr*bTl5*Dzy~TQW`o}?blW{jS^B(OSnobv9=|ysfq|O(%MQ@tW(9b zmfDwxHnv3C(jbjiEFlEdmIk2|u|;llZvUNs?|GhczW03Ryytt*^PKmjIyu@(ODRbK z03Z#ugE#|#I97z64vULMj59x36cn6bt~NrUPy|0OZA4|hd>}&KI+aTON9v@SXnOdT zv!e?j+H}xH`d#$_K#~H5Si54xctsQb3uYilK5}zUs8;f8c%Cl!anIB8Ax5GKEid5T zDDttRey2~vAa_zz3dBx9FB8)>6rotlykb$%CmKpSz`tc4CY5V_TfFj$nXRENf)z~; zD^4?2@?DoIGuaAnW6yg)cl4(f>&iYDOm@>y(S31W=+JSW&7e4xnOfTOc>J7DmOva1 zgwD?&;ip`7N!FY-d`cWH9ojf&38e*7)-OAR6J%_@qROKEmrc2rvOd$<8fW}jn{HgW z4{+$p@|x!KSXW*|-e6c|Wxjk*7o*Jp%E-9@O z$R|mfIu@Q?c&1Bs&>B--4#${KhS64HtWw6PZCl;5L6ZWecMoUOMu?;zX}2O!Rrzl6 zmlm)Y$+(W3`AE>Sk(|6w)SVu$&_5aI;Ikd}B>%z^wd1_82*kX+cO1Fcer4gu`_3l4 zo-T+};8jcu-Deu#aHUuoMqmthni|e3+c!ktK>TjxGJsQwcJaa9Ktv*jaxrxUnLQ`& zwShDgs|=n$6U6!drYA@Up>JWC6Fxc8HKT|oN__%dYpiTJZT%q!nSOhzD}7&&0Ol}~ z7I$maDK7(KH@CgonL2wXf^nLZ|FCw;B)yi^wOE3fq0h=(&q~=%94q!pOU88gO0Rn` zp1p=UO{O_E=C|9HvqGy`PgHhwOYv`frJjvP91A2Z<{nMg{s_Z{TGy>Qc*C6o24w0v zH(lNkE;w)G-`apaPMSQj7M4@0OWMBlL`5mQJo;pScK63QFRVMfQHMN`?kK5Hwr9a^ z5@yfopD$o?PP*!l&vhDbrH9NOAPalzzw9utnZ>)v@-5|(Sm4<4iWif%YqhnHA}=Mg zI1nZ6=_U8+{cw|_Si!<)ElA<4IS3u){PADr^>kF6TfC3e3k#f=6?pPdCNKN9DfssM zVDT0_)xyLh8QZIiZoLY#dW4KZCq;UGWph}q5@&Ktys^Xp4KDv()kP@Q2yTWmX1`B+ zaZgqT#f386C=be!5g2j|{Z#<&0&Nj#{jP+zX7k3nE z2psoGgxLO7l5MOYXv;4*oC_spiF`KHxUSJ>N6ab<^*E^2XU8-Y*+pLjLzTXJG((1K z11U&3EPLQ&O~4n3R~G`H1hMmgLF4)XDCp_JkE$LdvcD&i*J>>RabIB0mn)_Kh@U@t zM1~3|B#5d25>x>8iYa~`knmN?`^FN9_;yTExuh=uqKXt8P%HfYqDnjbpQ&BB|GPU3 z(hWL%APq!aZ2CLN874VXw4_nX@;Vinjr*tviLC-LT$XKE`h3O@htl2(Rt?k{b7B%W z|DXP(NB$tV8+%;6179Jxr@}3AKX;K49T-%x?ufJ0A_o)S@m)s?%lY@29Z}Vpc!%-h z-iz^U(tNDWwcYWsfIr$VV8p0pOvC(1 zH=UGM5mtFLP~Ll911Xi?eY>TwoYjYoG6T^4g}2F{LP#Y7mkYJQK2lHj!BSN*BZ^)( z+RSwv8k8YvXA~QBA289Yx6SF=)t9lME=3*>XFn^!-WzSx5rr4nj8IGD(vr%VtqSJi zu)Q$io?^0H+Td_wyHedR8@U#q-bXLmT>G-^wi+%F+F|KFoOhnIOhp*M6a}|yh;D9S zsLq6K)iBM?*xCiVUlEp7kdmw^zvU&}bXuR$J#g?svMvR$DX7B+N}Y^7BJt82FSE z7O2QorJ_LYAmk$q#`sWz35_X^F;XLK@nmM8#Z6z7K1H2Y>}XsAc0?vZ_mR|=MuI{Z rVxYf$iQmnGv(r8O67rXe^?nxuRQP`4q8x|~h#J(!5mNuFZ{mLeEav7A literal 0 HcmV?d00001 diff --git a/doc/html/a00049.html b/doc/html/a00049.html new file mode 100644 index 0000000..d2a8f76 --- /dev/null +++ b/doc/html/a00049.html @@ -0,0 +1,100 @@ + + + + + + +tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Class Template Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Class Template Reference
+
+
+ + + + + + + + + + + + +

+Protected Types

enum  { allow_multimapping = Allow_multimapping + }
 
+typedef Key value_type
 
+typedef Key key_type
 
+typedef Hash_compare hash_compare
 
+typedef Allocator::template
+rebind< value_type >::other 
allocator_type
 
+ + + +

+Protected Member Functions

concurrent_unordered_set_traits (const hash_compare &hc)
 
+ + + +

+Static Protected Member Functions

+static const Key & get_key (const value_type &value)
 
+ + + +

+Protected Attributes

+hash_compare my_hash_compare
 
+
The documentation for this class was generated from the following file:
    +
  • concurrent_unordered_set.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00050.html b/doc/html/a00050.html new file mode 100644 index 0000000..39656f2 --- /dev/null +++ b/doc/html/a00050.html @@ -0,0 +1,810 @@ + + + + + + +tbb::concurrent_vector< T, A > Class Template Reference + + + + + + + +
+ +
+
tbb::concurrent_vector< T, A > Class Template Reference
+
+
+ +

Concurrent vector container. + More...

+ +

#include <concurrent_vector.h>

+
+Inheritance diagram for tbb::concurrent_vector< T, A >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef
+internal::concurrent_vector_base_v3::size_type 
size_type
 
+typedef
+internal::allocator_base< T, A >
+::allocator_type 
allocator_type
 
+typedef T value_type
 
+typedef ptrdiff_t difference_type
 
+typedef T & reference
 
+typedef const T & const_reference
 
+typedef T * pointer
 
+typedef const T * const_pointer
 
+typedef
+internal::vector_iterator
+< concurrent_vector, T > 
iterator
 
+typedef
+internal::vector_iterator
+< concurrent_vector, const T > 
const_iterator
 
+typedef std::reverse_iterator
+< iterator > 
reverse_iterator
 
+typedef std::reverse_iterator
+< const_iterator > 
const_reverse_iterator
 
+typedef std::reverse_iterator
+< iterator, T, T &, T * > 
reverse_iterator
 
+typedef std::reverse_iterator
+< const_iterator, T, const T
+&, const T * > 
const_reverse_iterator
 
+typedef generic_range_type
+< iterator > 
range_type
 
+typedef generic_range_type
+< const_iterator > 
const_range_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

concurrent_vector (const allocator_type &a=allocator_type())
 Construct empty vector.
 
concurrent_vector (std::initializer_list< T > init_list, const allocator_type &a=allocator_type())
 Constructor from initializer_list.
 
concurrent_vector (const concurrent_vector &vector, const allocator_type &a=allocator_type())
 Copying constructor.
 
concurrent_vector (concurrent_vector &&source)
 Move constructor.
 
concurrent_vector (concurrent_vector &&source, const allocator_type &a)
 
+template<class M >
 concurrent_vector (const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())
 Copying constructor for vector with different allocator type.
 
concurrent_vector (size_type n)
 Construction with initial size specified by argument n.
 
concurrent_vector (size_type n, const_reference t, const allocator_type &a=allocator_type())
 Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance.
 
+template<class I >
 concurrent_vector (I first, I last, const allocator_type &a=allocator_type())
 Construction with copying iteration range and given allocator instance.
 
+concurrent_vectoroperator= (const concurrent_vector &vector)
 Assignment.
 
+concurrent_vectoroperator= (concurrent_vector &&other)
 Move assignment.
 
+template<class M >
concurrent_vectoroperator= (const concurrent_vector< T, M > &vector)
 Assignment for vector with different allocator type.
 
+concurrent_vectoroperator= (std::initializer_list< T > init_list)
 Assignment for initializer_list.
 
iterator grow_by (size_type delta)
 Grow by "delta" elements. More...
 
iterator grow_by (size_type delta, const_reference t)
 Grow by "delta" elements using copying constructor. More...
 
template<typename I >
iterator grow_by (I first, I last)
 
iterator grow_by (std::initializer_list< T > init_list)
 
iterator grow_to_at_least (size_type n)
 Append minimal sequence of elements such that size()>=n. More...
 
iterator grow_to_at_least (size_type n, const_reference t)
 
iterator push_back (const_reference item)
 Push item. More...
 
iterator push_back (T &&item)
 Push item, move-aware. More...
 
template<typename... Args>
iterator emplace_back (Args &&...args)
 Push item, create item "in place" with provided arguments. More...
 
reference operator[] (size_type index)
 Get reference to element at given index. More...
 
+const_reference operator[] (size_type index) const
 Get const reference to element at given index.
 
+reference at (size_type index)
 Get reference to element at given index. Throws exceptions on errors.
 
+const_reference at (size_type index) const
 Get const reference to element at given index. Throws exceptions on errors.
 
+range_type range (size_t grainsize=1)
 Get range for iterating with parallel algorithms.
 
+const_range_type range (size_t grainsize=1) const
 Get const range for iterating with parallel algorithms.
 
+size_type size () const
 Return size of vector. It may include elements under construction.
 
+bool empty () const
 Return false if vector is not empty or has elements under construction at least.
 
+size_type capacity () const
 Maximum size to which array can grow without allocating more memory. Concurrent allocations are not included in the value.
 
void reserve (size_type n)
 Allocate enough space to grow to size n without having to allocate more memory later. More...
 
+void resize (size_type n)
 Resize the vector. Not thread-safe.
 
+void resize (size_type n, const_reference t)
 Resize the vector, copy t for new elements. Not thread-safe.
 
+void shrink_to_fit ()
 Optimize memory usage and fragmentation.
 
+size_type max_size () const
 Upper bound on argument to reserve.
 
+iterator begin ()
 start iterator
 
+iterator end ()
 end iterator
 
+const_iterator begin () const
 start const iterator
 
+const_iterator end () const
 end const iterator
 
+const_iterator cbegin () const
 start const iterator
 
+const_iterator cend () const
 end const iterator
 
+reverse_iterator rbegin ()
 reverse start iterator
 
+reverse_iterator rend ()
 reverse end iterator
 
+const_reverse_iterator rbegin () const
 reverse start const iterator
 
+const_reverse_iterator rend () const
 reverse end const iterator
 
+const_reverse_iterator crbegin () const
 reverse start const iterator
 
+const_reverse_iterator crend () const
 reverse end const iterator
 
+reference front ()
 the first item
 
+const_reference front () const
 the first item const
 
+reference back ()
 the last item
 
+const_reference back () const
 the last item const
 
+allocator_type get_allocator () const
 return allocator object
 
+void assign (size_type n, const_reference t)
 assign n items by copying t item
 
+template<class I >
void assign (I first, I last)
 assign range [first, last)
 
+void assign (std::initializer_list< T > init_list)
 assigns an initializer list
 
+void swap (concurrent_vector &vector)
 swap two instances
 
void clear ()
 Clear container while keeping memory allocated. More...
 
~concurrent_vector ()
 Clear and destroy vector.
 
+const
+internal::concurrent_vector_base_v3 & 
internal_vector_base () const
 
+template<typename I >
void copy_range (void *dst, const void *p_type_erased_iterator, size_type n)
 
+ + + + +

+Friends

+template<typename C , typename U >
class internal::vector_iterator
 
+

Detailed Description

+

template<typename T, class A = cache_aligned_allocator<T>>
+class tbb::concurrent_vector< T, A >

+ +

Concurrent vector container.

+
concurrent_vector is a container having the following main properties:
+- It provides random indexed access to its elements. The index of the first element is 0.
+- It ensures safe concurrent growing its size (different threads can safely append new elements).
+- Adding new elements does not invalidate existing iterators and does not change indices of existing items.
+
Compatibility
The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.
+
Exception Safety
Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:
    +
  • Throwing an exception is forbidden for destructor of T.
  • +
  • Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.
  • +
+Otherwise, the program's behavior is undefined.
+
If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:
    +
  • There are no guarantees that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.
  • +
  • An invalid vector instance cannot be repaired; it is unable to grow anymore.
  • +
  • Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.
  • +
  • Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exception, and in case of using at() method a C++ exception is thrown.
  • +
+If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.
+
Fragmentation
Unlike an STL vector, a concurrent_vector does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase element access time. Internal layout can be optimized by method compact() that merges several smaller arrays into one solid.
+
Changes since TBB 2.1
    +
  • Fixed guarantees of concurrent_vector::size() and grow_to_at_least() methods to assure elements are allocated.
  • +
  • Methods end()/rbegin()/back() are partly thread-safe since they use size() to get the end of vector
  • +
  • Added resize() methods (not thread-safe)
  • +
  • Added cbegin/cend/crbegin/crend methods
  • +
  • Changed return type of methods grow* and push_back to iterator
  • +
+
+
Changes since TBB 2.0
    +
  • Implemented exception-safety guarantees
  • +
  • Added template argument for allocator
  • +
  • Added allocator argument in constructors
  • +
  • Faster index calculation
  • +
  • First growth call specifies a number of segments to be merged in the first allocation.
  • +
  • Fixed memory blow up for swarm of vector's instances of small size
  • +
  • Added grow_by(size_type n, const_reference t) growth using copying constructor to init new items.
  • +
  • Added STL-like constructors.
  • +
  • Added operators ==, < and derivatives
  • +
  • Added at() method, approved for using after an exception was thrown inside the vector
  • +
  • Added get_allocator() method.
  • +
  • Added assign() methods
  • +
  • Added compact() method to defragment first segments
  • +
  • Added swap() method
  • +
  • range() defaults on grainsize = 1 supporting auto grainsize algorithms.
  • +
+
+

Member Function Documentation

+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + +
void tbb::concurrent_vector< T, A >::clear ()
+
+inline
+
+ +

Clear container while keeping memory allocated.

+

To free up the memory, use in conjunction with method compact(). Not thread safe

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + +
iterator tbb::concurrent_vector< T, A >::emplace_back (Args &&... args)
+
+inline
+
+ +

Push item, create item "in place" with provided arguments.

+

Returns iterator pointing to the new element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
iterator tbb::concurrent_vector< T, A >::grow_by (size_type delta)
+
+inline
+
+ +

Grow by "delta" elements.

+

Returns iterator pointing to the first new element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
iterator tbb::concurrent_vector< T, A >::grow_by (size_type delta,
const_reference t 
)
+
+inline
+
+ +

Grow by "delta" elements using copying constructor.

+

Returns iterator pointing to the first new element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+
+template<typename I >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
iterator tbb::concurrent_vector< T, A >::grow_by (first,
last 
)
+
+inline
+
+

Returns iterator pointing to the first new element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
iterator tbb::concurrent_vector< T, A >::grow_by (std::initializer_list< T > init_list)
+
+inline
+
+

Returns iterator pointing to the first new element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
iterator tbb::concurrent_vector< T, A >::grow_to_at_least (size_type n)
+
+inline
+
+ +

Append minimal sequence of elements such that size()>=n.

+

The new elements are default constructed. Blocks until all elements in range [0..n) are allocated. May return while other elements are being constructed by other threads. Returns iterator that points to beginning of appended sequence. If no elements were appended, returns iterator pointing to nth element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
iterator tbb::concurrent_vector< T, A >::grow_to_at_least (size_type n,
const_reference t 
)
+
+inline
+
+

Analogous to grow_to_at_least( size_type n ) with exception that the new elements are initialized by copying of t instead of default construction.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
reference tbb::concurrent_vector< T, A >::operator[] (size_type index)
+
+inline
+
+ +

Get reference to element at given index.

+

This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index < size().

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
iterator tbb::concurrent_vector< T, A >::push_back (const_reference item)
+
+inline
+
+ +

Push item.

+

Returns iterator pointing to the new element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
iterator tbb::concurrent_vector< T, A >::push_back (T && item)
+
+inline
+
+ +

Push item, move-aware.

+

Returns iterator pointing to the new element.

+ +
+
+ +
+
+
+template<typename T, class A = cache_aligned_allocator<T>>
+ + + + + +
+ + + + + + + + +
void tbb::concurrent_vector< T, A >::reserve (size_type n)
+
+inline
+
+ +

Allocate enough space to grow to size n without having to allocate more memory later.

+

Like most of the methods provided for STL compatibility, this method is not thread safe. The capacity afterwards may be bigger than the requested reservation.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • concurrent_vector.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00050.png b/doc/html/a00050.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffff4fb1059c9d9a8a0874b4a005bb96fa0379a GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yVC(|212~w0q(RZ4`#?$}z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op{Y$1?I#-bWt^A&&SgkuX-)d{HBQu({kwD2yLItur%H0UYaVM< zYdzbu?q=+)6XjDwV!Td;Z{F}W$MWUAI98z9hWt4)tqUX+TSO}W-=GWG6)s{H>2Qzl(mv^dGqnETn* zh&gLyMZX2EpZvN$qJF*iuGNd|j!nO%9`a=2wa=@oYE~ryP0hL-FREU=WV_?leyh1A z)ssSRgichyc7IKm(T*axTBLfiHj0Nr#s z$nbr@*Or;z1a7Zdng4O;40D;we)A&Lj)ka*hEM%-ZCPoo>rF@NC6@WET}G$Ma_8!s zz1kYMEyQDzvtM<2V5^Gd^YbA-?bkkTnXshm^AG!gkIn1;=S@jo!{uqE0*srT3P7dY zPRNW0VOqe*OX%sE5+o(j(Eo|IfO{Wn z&|Er^aR+B}ziJ2rNHH8g=+lyW`ss7*V(ZN1|1HkSE5z@85x`h*Y<;MS+_JbIyrDMf z4BH{?sWt7Oco6|?v3(wg@7b$yiR(a6F*XV>rkyOehoPv#s^bxFO@JO9^I zoV%mCIlF0kZ0b#=oPF14KV7AHY6pBX$|{an^LB{Ts5nA6U> literal 0 HcmV?d00001 diff --git a/doc/html/a00051.html b/doc/html/a00051.html new file mode 100644 index 0000000..4d75d3e --- /dev/null +++ b/doc/html/a00051.html @@ -0,0 +1,142 @@ + + + + + + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference
+
+
+ +

Combines data access, locking, and garbage collection. + More...

+ +

#include <concurrent_hash_map.h>

+
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor:
+
+
+ + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor + +
+ + + + + +

+Public Types

+typedef const
+concurrent_hash_map::value_type 
value_type
 Type of value.
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+bool empty () const
 True if result is empty.
 
+void release ()
 Set to null.
 
+const_reference operator* () const
 Return reference to associated value in hash table.
 
+const_pointer operator-> () const
 Return pointer to associated value in hash table.
 
const_accessor ()
 Create empty result.
 
~const_accessor ()
 Destroy result after releasing the underlying reference.
 
+ + + +

+Protected Member Functions

+bool is_writer ()
 
+ + + + + +

+Protected Attributes

+nodemy_node
 
+hashcode_t my_hash
 
+ + + + + +

+Friends

+class concurrent_hash_map< Key, T, HashCompare, Allocator >
 
+class accessor
 
+

Detailed Description

+

template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> >>
+class tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor

+ +

Combines data access, locking, and garbage collection.

+

The documentation for this class was generated from the following file:
    +
  • concurrent_hash_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00051.png b/doc/html/a00051.png new file mode 100644 index 0000000000000000000000000000000000000000..e861a116ac2abfa8cb7650d913490b2180287e83 GIT binary patch literal 1888 zcmcJQeN@tC8^?cWl4~<-a~fIZvSq&2@ohfoqn06N8KxpihAoqyHI;fMSowl(ol2RB zPNXR*)89jcC@#&HAk83_O|jWNzMH#O4MBCpT5Z8#i;2{srE#!xe%Bh!8^GDg3v zqoczte{hTOXikbmM*+s7ck5{v#sdK0)1k<{m~*hn3T1}!&RV2R73J=7`%E+8mzRpd zCnUqi+jTW5R58M&^>a2IdB6#8`@K+j=4`u%$AHQo_!}%?eAkNw4C&OAqhsCWgNqJN zuUrLfrlq^$LB_9*Wj)H^w{`(X)ufN1c(VinVJKzGZd>{z+?|_ zZF8_!F0c+r3R!Pq53K4?L?C}pr&~$?mvj({bigT}9x3=@o3R%m(Q6OzzA8~_J8{d~ z?B&#D|JKh&^{Zd+>vW+F0GDb_FG2D{BT7nE>Z5D(s~7StQTn5OF(}LajmhxWHVbAD z=R()jG-#v+{^ie(q1tIgc6(Jzj^*wKrC=$?Ac}u6X{U~}!?&mxp^s~`qR$Q_k%1)38d>;(2-kM_e`JkztSB9TGm5P*UM9Tfg#bN`H5te(Js!e=#2FDhr&*J24Z%jKfIH zOuN|yrF-xCLQ$g(Rq5noxHSXxV@ZbD=r=c##?;KA`xlQr*j`>@#U1U_xZ~Z$Xs)IyV!$Ylyc)9ja=o@q{wH1=i2wP%S2;upyzhlhNlMVtYBcRio4QZgetDB36~EGMh_8R0 zPMdb4@s-nWBR;^k)%X$XmUD3Ru8Cd8D-KOXd3~tc`StCEWXO*P&QA37LRNnMYjq5% z|L*T}eovTXO?UD%;`Dj(T#4b?qe>+vu<}59Jb9zfq(D@-HR2;b-_8E=?~WWQw)p{H z`qj);)I7F_|9t3sJkM7&keF&_bz^0irDfu^v0vaLL?wsb0( zRFXgBDQFpUfs%;7R^fuRhacT#1o-?p{}|NT7^j!ETp^YWlIl_Y&e`1>Y%USDd0gfr zK>MnBQV`4rQR?uv58B7o)RxbST*;@M{9P{e-fAN7tLsu+9Rw4lgj*@G6hAmOQ}>f| z_U(5TfQS9f0->A}yXR#1@KYex-F-kZ;SsiN!*JhxNO_sAtU#~04}$6!M^Wl~AT7|d zkr6@j!K_%Y9Pb(Gda0UY*7_~VQ=r_DYJ5*su@Oca`~|HDk!$x>1_8IT#{k^@kvcjI S literal 0 HcmV?d00001 diff --git a/doc/html/a00052.html b/doc/html/a00052.html new file mode 100644 index 0000000..3a089c8 --- /dev/null +++ b/doc/html/a00052.html @@ -0,0 +1,63 @@ + + + + + + +tbb::flow::interface10::continue_msg Class Reference + + + + + + + +
+
+
tbb::flow::interface10::continue_msg Class Reference
+
+
+ +

An empty class used for messages that mean "I'm done". + More...

+ +

#include <flow_graph.h>

+

Detailed Description

+

An empty class used for messages that mean "I'm done".

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00053.html b/doc/html/a00053.html new file mode 100644 index 0000000..bf4e169 --- /dev/null +++ b/doc/html/a00053.html @@ -0,0 +1,332 @@ + + + + + + +tbb::flow::interface10::continue_receiver Class Reference + + + + + + + +
+ +
+
tbb::flow::interface10::continue_receiver Class Referenceabstract
+
+
+ +

Base class for receivers of completion messages. + More...

+ +

#include <flow_graph.h>

+
+Inheritance diagram for tbb::flow::interface10::continue_receiver:
+
+
+ + +tbb::flow::interface10::receiver< continue_msg > +tbb::flow::interface10::internal::untyped_receiver + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef continue_msg input_type
 The input type.
 
+typedef receiver< input_type >
+::predecessor_type 
predecessor_type
 The predecessor type for this node.
 
+typedef
+internal::edge_container
+< predecessor_type
built_predecessors_type
 
+typedef
+built_predecessors_type::edge_list_type 
predecessor_list_type
 
- Public Types inherited from tbb::flow::interface10::receiver< continue_msg >
+typedef continue_msg input_type
 The input type of this receiver.
 
+typedef continue_msg input_type
 The input type of this receiver.
 
+typedef
+internal::async_helpers
+< continue_msg >
+::filtered_type 
filtered_type
 
+typedef sender< continue_msgpredecessor_type
 The predecessor type for this node.
 
+typedef
+internal::edge_container
+< predecessor_type
built_predecessors_type
 
+typedef
+built_predecessors_type::edge_list_type 
predecessor_list_type
 
- Public Types inherited from tbb::flow::interface10::internal::untyped_receiver
+typedef untyped_sender predecessor_type
 The predecessor type for this node.
 
+typedef
+internal::edge_container
+< predecessor_type
built_predecessors_type
 
+typedef
+built_predecessors_type::edge_list_type 
predecessor_list_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

continue_receiver (int number_of_predecessors=0)
 Constructor.
 
continue_receiver (const continue_receiver &src)
 Copy constructor.
 
+bool register_predecessor (predecessor_type &) __TBB_override
 Increments the trigger threshold.
 
bool remove_predecessor (predecessor_type &) __TBB_override
 Decrements the trigger threshold. More...
 
+built_predecessors_typebuilt_predecessors () __TBB_override
 
+void internal_add_built_predecessor (predecessor_type &s) __TBB_override
 
+void internal_delete_built_predecessor (predecessor_type &s) __TBB_override
 
+void copy_predecessors (predecessor_list_type &v) __TBB_override
 
+size_t predecessor_count () __TBB_override
 
- Public Member Functions inherited from tbb::flow::interface10::receiver< continue_msg >
+bool try_put (const typename internal::async_helpers< continue_msg >::filtered_type &t)
 Put an item to the receiver.
 
+bool try_put (const typename internal::async_helpers< continue_msg >::async_type &t)
 
+bool try_put (const continue_msg &t)
 Put an item to the receiver.
 
+virtual ~receiver ()
 Destructor.
 
- Public Member Functions inherited from tbb::flow::interface10::internal::untyped_receiver
+virtual ~untyped_receiver ()
 Destructor.
 
+template<typename X >
bool try_put (const X &t)
 Put an item to the receiver.
 
+ + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+task * try_put_task (const input_type &) __TBB_override
 Put item to successor; return task to run the successor if possible.
 
+void reset_receiver (reset_flags f) __TBB_override
 put receiver back in initial state
 
virtual task * execute ()=0
 Does whatever should happen when the threshold is reached. More...
 
+bool is_continue_receiver () __TBB_override
 
- Protected Member Functions inherited from tbb::flow::interface10::receiver< continue_msg >
+virtual task * try_put_task_wrapper (const void *p, bool is_async) __TBB_override
 
+virtual graphgraph_reference ()=0
 
- Protected Member Functions inherited from tbb::flow::interface10::internal::untyped_receiver
+template<typename X >
task * try_put_task (const X &t)
 
+ + + + + + + + + + + +

+Protected Attributes

+built_predecessors_type my_built_predecessors
 
+spin_mutex my_mutex
 
+int my_predecessor_count
 
+int my_current_count
 
+int my_initial_predecessor_count
 
+ + + + + + + + + + + + + + + + +

+Friends

+template<typename R , typename B >
class run_and_put_task
 
+template<typename X , typename Y >
class internal::broadcast_cache
 
+template<typename X , typename Y >
class internal::round_robin_cache
 
+template<typename U >
class limiter_node
 
+template<typename TT , typename M >
class internal::successor_cache
 
+

Detailed Description

+

Base class for receivers of completion messages.

+

These receivers automatically reset, but cannot be explicitly waited on

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual task* tbb::flow::interface10::continue_receiver::execute ()
+
+protectedpure virtual
+
+ +

Does whatever should happen when the threshold is reached.

+

This should be very fast or else spawn a task. This is called while the sender is blocked in the try_put().

+ +

Referenced by try_put_task().

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool tbb::flow::interface10::continue_receiver::remove_predecessor (predecessor_type)
+
+inlinevirtual
+
+ +

Decrements the trigger threshold.

+

Does not check to see if the removal of the predecessor now makes the current count exceed the new threshold. So removing a predecessor while the graph is active can cause unexpected results.

+ +

Reimplemented from tbb::flow::interface10::receiver< continue_msg >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00053.png b/doc/html/a00053.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec9a78900caae92233fc66abd4d9d28504110d1 GIT binary patch literal 1579 zcmb`HYf#c@6o>!hrP9>N@{(xonA)g$sRsYLnzkhxu8M(TxnxZ=SfU`Pn7OF4DQmfC zitA?9(x#>4rCcHvHN4xTgl>5U#4Nmvmnd(= z$4mzR06oMB9~1yUplZ(CrlG#2RKCBum<9)gz*Q=h8YgEJ2{|n{)bu$`O-)+YM3(C3 zws=$!8c;WFp1v0$hX6o}hw%9({d_grI!-W%di}*GqB`G< zalDY7$zs{hMIW=E=yY4c;d*9!nJNQ{2#@6@8LTZ1T_t)?e{dQR%zO(@PzlMg$`SeO zxcNZqCAmlKX$D1$vcn{$sz0)}H*m0i$O-GCByiai4MQV$N}r96&0eoKlH(}!zzOli ziOW&>rY)BnpY<|^ohi^>^EZ8tRqRi&j+)?;9sw*bHoeVkKxRe46hE0q9uNQZe9TR& zLqv>1rb~QzKYn{{{}`Fv6=?eIxgw0X7Df^jLrqTBSn=52@9?UMl*I+zx-F^uNZs;{ z*Mi5xr9O9@CeSn9>AWh?>4wXASKq=ti3r+WTlml~Y|>bPH|jOdC-3^mJ_W_8>h$T# z)xl#TFWBr(q@Vl5{0mjJMgr|+VlofuNPQ`Lz`7E@52330Np6i8ZGIH{Dzc0LlBG%Z3a1pUtR%4ldeExz2@JPc1i4mQ%>Mdp#Fo@QIYT5X741 zC~Rp;c4V?M(txKd8>x>5A32NPj#SPyD@c4!P8`;tv{62Z?+O^;v6jrRsKoRSk>+6+ z$Z07Z1=1AqjwDW^8`8WoHWqcQ-&2T`yG6>cY2{YjR{b6wxXMtO zSs98&lTA&cRk2sH+^ajdmzME2BdI3Z^DV65@-hnoI9?v`=9ySfmp|-qdpjBHnJ^xn zI5ezn`EZ2>PHYqxk;PgbmI<6xOwz93n~YZWC*hDWHZ>AfcTp|#3?gnniJmcy=d$Zg zp}}d!S@c*2T|X?M@{e%%oT-EGe4v;Ol3CY{Tsz!+d*tYtKmoL871vI?$VDWD+IL#BQTo6@uBIh@7=YwyV0}x-B1`a(no* z24|%I(BNXPc7rczS%2thjSKUAZp1-IMJ*FtzdONZz0F*^&iQLK;2vz_)Eg^#TxR!? zhze;D!JaO~&sheIbzg&33EW8?#=<9BAg;8`vqST-G*vFc`u~zfu-I#ImKvAcn-I&4 zM@ZV$KSiQhR;VPM^~z|)S;iQ(m7yH~(0={L8Ag_yac?AH+PCraiQjs%tCu`aqnpQE zgkj<~nmuOFZOD|yM{;2>xwYT!ak`;vA+D*qfJcj}-s1|=0s!5JI><`-h8g%BjaF@^ p@qJqNzfG&BC?DmI^0&)P1 + + + + + +tbb::internal::critical_section_v4 Class Reference + + + + + + + +
+ +
+
tbb::internal::critical_section_v4 Class Reference
+
+
+
+Inheritance diagram for tbb::internal::critical_section_v4:
+
+
+ + + +
+ + + + +

+Classes

class  scoped_lock
 
+ + + + + + + + + +

+Public Member Functions

+void __TBB_EXPORTED_METHOD internal_construct ()
 
+void lock ()
 
+bool try_lock ()
 
+void unlock ()
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = false
 
+static const bool is_recursive_mutex = false
 
+static const bool is_fair_mutex = true
 
+
The documentation for this class was generated from the following file:
    +
  • critical_section.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00054.png b/doc/html/a00054.png new file mode 100644 index 0000000000000000000000000000000000000000..835e586da28f510461f35f10ee6b875f87115368 GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0vp^dx1EBgBeIxUv7y5QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;`0rLn;{G&VAeWT7k!KXax{RL!$l>xJq`cSn6sJFY6vPl4uDlWoIi%_@*P z+w6Tx%d;x@?~CQ7mrh)mw)^WPuZc_khq=G!fAKv&spMDOepB{eJO8P!Y_{{?zxucQ zvi%o}e~F$8|NS?6x%~3^d*=ODd78ZU{r1Jp-(}7JsO?qx8hXKdQh!t2q#BcpvuE~d zHSoV;G+5KNtlq}$nEb4|CV7eaoT`S2qUV@@XzXGC5Lm(gVDSgJ1MUxP8~P7bGsw4o zXRzaX&sZaJ4^6@RZ}-mRL?ki*y#kc|!eCc*(SQ2e;D0s$ITr+dPK+x0{^HKMYdj53 z*~dixp7rgQ+xBSs7l!4ttWrJaS3Ni06SGO*^!|Cym+`Z{gKnoEtWWXBWP7Z*-G!#8-uoewf*(z5{GoaYNcD(SWmlc zUNb#;{p)WGOPPLJ|NZ + + + + + +tbb::flow::interface10::opencl_info::default_device_filter Struct Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::opencl_info::default_device_filter Struct Reference
+
+
+ + + + +

+Public Member Functions

+opencl_device_list operator() (const opencl_device_list &devices)
 
+
The documentation for this struct was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00056.html b/doc/html/a00056.html new file mode 100644 index 0000000..7ed83d2 --- /dev/null +++ b/doc/html/a00056.html @@ -0,0 +1,66 @@ + + + + + + +tbb::flow::interface10::opencl_info::default_device_selector< Factory > Struct Template Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::opencl_info::default_device_selector< Factory > Struct Template Reference
+
+
+ + + + +

+Public Member Functions

+opencl_device operator() (Factory &f)
 
+
The documentation for this struct was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00057.html b/doc/html/a00057.html new file mode 100644 index 0000000..17a180e --- /dev/null +++ b/doc/html/a00057.html @@ -0,0 +1,118 @@ + + + + + + +tbb::flow::interface10::opencl_info::default_opencl_factory Class Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::opencl_info::default_opencl_factory Class Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_info::default_opencl_factory:
+
+
+ + +tbb::flow::interface10::opencl_factory< default_device_filter > + +
+ + + + + + + + + + + + + + +

+Public Types

+template<typename T >
using async_msg_type = opencl_async_msg< T, default_opencl_factory >
 
- Public Types inherited from tbb::flow::interface10::opencl_factory< default_device_filter >
+using async_msg_type = opencl_async_msg< T, opencl_factory< default_device_filter >>
 
+typedef opencl_device device_type
 
+typedef kernel kernel_type
 
+typedef opencl_range range_type
 
+ + + +

+Friends

+default_opencl_factorydefault_factory ()
 
+ + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from tbb::flow::interface10::opencl_factory< default_device_filter >
+bool init (const opencl_device_list &device_list)
 
+void send_kernel (opencl_device device, const kernel_type &kernel, const range_type &work_size, Args &...args)
 
+void send_data (opencl_device device, T &t, Rest &...args)
 
+void send_data (opencl_device)
 
+void finalize (opencl_device device, FinalizeFn fn, Args &...args)
 
+const opencl_device_listdevices ()
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00057.png b/doc/html/a00057.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bd2cdb5c65848e696805a10b9f745555e08739 GIT binary patch literal 1704 zcma)7eLT}!82_=7l3PScvAW%2NEn)wx4g~DT+_vbTV9IIyrzYg%3CP%+SF7x@BHdE zo6#smlW4+pL;%^=Q-c=e7?`~oO7P%e9k2|S108)nri?6 zP)0l3y90nc55jJWFi5Ydf1&|R8g7R?9Aq*X1mC_FpUQfY4WTd6+}ynK(l8uaD#p0G z;sA)WJo=t{m;ivnUbMZf2U%{4CM=@wTkGiAvVTH4P1bKKQ;V6n9-FtMhcO82g=NeX z9@9`TUfaS|$^V*25_kxFMz5uc|aXDxk5`-sjYDE;? zIBE1tlZH51AduiackJ&O?5yF`1-uv>Sqk%FP(H`XTpxxl5MM?#)=S$-5^_k5*SRu% z+>M5EeXk9B&G-e9AFg9Mm!H^1fl9fS{F%(w`dDzJ1qx&O@(Y zqh_IstEMOKYIm@82I_oP&!QD;^4SdS7$ws(T=GJ6jsT4 z1iCK_qfBbG%oaWjzzM!I$A&8#z!t*mTDtf=FP<&4##>w2z8cqRQuFJL6UJ7Y$|M#T z80iet61-Va*-e$g&~&PSu;L^w%my*Pl1VvH{RkA#9l(&|+b&$Y7bxV9il5Df;9J3+ zug)gr5}O>VyGn|{j9rCYywg@r!ri@EDAu`EPRJapdS3VQ`@HRk`ou^C21J(A&7N{1 zU*h>w<@24>%qvPmnv{B;cafirlEw?rE*@j62b9Hopj2p?hdEKPXCAhH3^#AZKik5I zyyI*fWgJ6w>t`l=5t2GZc>dqUnL=Hr;fZ6x1G7Kl$40tzEDFndeFc>w5FCYiM}iAA zzeYWK-Crp%cpd{4KqSI?o!A3*brwgH_y;`qTLlMWKi}@Vw{B*H1FsS{I-c&%D*bz+ zy8dV#rS0h1CgPGPgA9lGh8;mr$H;&ZCe=H-gvpM#{yq}n*R>d>9n(lj3B;G@<62BEyVc2OdavCxr2BZV}itNRCwDu5_(3NyYVYe z4z0WmFic`7yiJWVvxzP-O9blIztFq|f6fECuJQo+S9Z>XM2fBt%+v`FQ%qFa4$3Xw zCMt8chWzVDha5?)p~J%@mX8jwA`wV)UI)lUZ2uO_1~{ttjlCY&WcMx3ist0(uNnRy zT?JA4led$vE~^W>V}jC=g)JfPwlIsYcen5`kGsMc*nx9$idoyol9hQG12;&WCKa~K%8~5U|=zUd)7B0sno35AJ-p;W~ct49zH}fS*@#kGd}=4c&#cH z%QSQ+N%btai+#4jtTcuK8Lo%VIzxVd{fHQDoW&zBFL#)4?id)KG|k$dUm#uh-RDR} zHNlsIVAtTDz4z;vfVLUqYC=%|%PvwZr8>AprtNaZkCFH>9G?%H!Ky`42;9&uP@`@L z68dW~w3qwX-tq^oMwp2Wmca)u_w4$f!QBO2lIM;Atggy{918>;rIKC;eJcRk!PWk* I-LDt^0cZ(B{Qv*} literal 0 HcmV?d00001 diff --git a/doc/html/a00058.html b/doc/html/a00058.html new file mode 100644 index 0000000..4f77a20 --- /dev/null +++ b/doc/html/a00058.html @@ -0,0 +1,56 @@ + + + + + + +tbb::flow::interface9::gfx_factory::device_type Struct Reference + + + + + + + +
+
+
tbb::flow::interface9::gfx_factory::device_type Struct Reference
+
+
+
The documentation for this struct was generated from the following file:
    +
  • gfx_factory.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00059.html b/doc/html/a00059.html new file mode 100644 index 0000000..c428c8e --- /dev/null +++ b/doc/html/a00059.html @@ -0,0 +1,66 @@ + + + + + + +tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference + + + + + + + +
+ +
+
tbb::flow::interface9::gfx_factory::dummy_device_selector Class Reference
+
+
+ + + + +

+Public Member Functions

+device_type operator() (gfx_factory &)
 
+
The documentation for this class was generated from the following file:
    +
  • gfx_factory.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00060.html b/doc/html/a00060.html new file mode 100644 index 0000000..144aa87 --- /dev/null +++ b/doc/html/a00060.html @@ -0,0 +1,94 @@ + + + + + + +tbb::flow::interface10::internal::edge_container< C > Class Template Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::internal::edge_container< C > Class Template Reference
+
+
+ + + + +

+Public Types

+typedef std::list< C
+*, tbb::tbb_allocator< C * > > 
edge_list_type
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

+void add_edge (C &s)
 
+void delete_edge (C &s)
 
+void copy_edges (edge_list_type &v)
 
+size_t edge_count ()
 
+void clear ()
 
+template<typename S >
void sender_extract (S &s)
 
+template<typename R >
void receiver_extract (R &r)
 
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00061.html b/doc/html/a00061.html new file mode 100644 index 0000000..35f6642 --- /dev/null +++ b/doc/html/a00061.html @@ -0,0 +1,84 @@ + + + + + + +tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Struct Reference + + + + + + + +
+ +
+
tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Struct Reference
+
+
+
+Inheritance diagram for tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard:
+
+
+ + + +
+ + + + + + +

+Public Member Functions

element_construction_guard (pointer an_element)
 
+void dismiss ()
 
+ + + +

+Public Attributes

+pointer element
 
+
The documentation for this struct was generated from the following file:
    +
  • concurrent_vector.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00061.png b/doc/html/a00061.png new file mode 100644 index 0000000000000000000000000000000000000000..0b05314963f9bf5563543dda942f32e1d95f8dc4 GIT binary patch literal 1053 zcmeAS@N?(olHy`uVBq!ia0y~yV7vfi2XHV0$$2hU;((MyfKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1M?bB7srqa#v=P6oGN@-qrA=>G6;LTg>zFpRFnZ#2tXQ8^2`+Cig zNpW+Rx7_;qCu8C1I4#exnh6&Y`F$5o`tnKUa{k4zck9Amzf>!#efIovzzUVvf+cgD zRA0{BarVSh_n_K0*ZWr1f8yDC=8tl#*CcJASv@E&DioFyoao{b!SF$_hEatgHkDz#6%}Xpk4-`+ZmLDG#Uhf3OYo%5?r`g4U}3b zmHuexq^vZlgM*)=f#pCWnz0rw_xzsPH^>)XJooc)M14b%jqwWhdpUV_cQ2=&a9%u@ zU6h}}zu-o-?ZV0J{<$$LVec0p5uiMo(t8VYgQ7@9ec;>>lBqP>m`P+F-?kfezo}Iw< zx%P5yNoi>5y>hdyrPr=4`SU$!zr?dOI>w@tXU7Wf*Dv`wGiB>~?WZ3DHZD7~_`=t- zotIuF8H(O2vlFgz*%!ChXV0(8oPFbV(q+B)cJr#1rcYkIc(Vz09eI@hL8@FFQ z(>`#*`+PtHw_R47-KW+)y8{|jTA3;)AtlT_NHXI7#~7|J|H59(w+@(>89ZJ6T-G@y GGywo%=<6B) literal 0 HcmV?d00001 diff --git a/doc/html/a00062.html b/doc/html/a00062.html new file mode 100644 index 0000000..6646bc3 --- /dev/null +++ b/doc/html/a00062.html @@ -0,0 +1,261 @@ + + + + + + +tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Class Template Reference
+
+
+ +

The enumerable_thread_specific container. + More...

+ +

#include <enumerable_thread_specific.h>

+
+Inheritance diagram for tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef Allocator allocator_type
 Basic types.
 
+typedef T value_type
 
+typedef T & reference
 
+typedef const T & const_reference
 
+typedef T * pointer
 
+typedef const T * const_pointer
 
+typedef
+internal_collection_type::size_type 
size_type
 
+typedef
+internal_collection_type::difference_type 
difference_type
 
+typedef
+internal::enumerable_thread_specific_iterator
+< internal_collection_type,
+value_type > 
iterator
 
+typedef
+internal::enumerable_thread_specific_iterator
+< internal_collection_type,
+const value_type > 
const_iterator
 
+typedef generic_range_type
+< iterator > 
range_type
 
+typedef generic_range_type
+< const_iterator > 
const_range_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

enumerable_thread_specific ()
 Default constructor. Each local instance of T is default constructed.
 
+template<typename Finit#if __TBB_ETS_USE_CPP11, typename = typename internal::enable_if<internal::is_callable_no_args<typename internal::strip<Finit>::type>::value>::type #endif>
 enumerable_thread_specific (Finit finit)
 Constructor with initializer functor. Each local instance of T is constructed by T(finit()).
 
enumerable_thread_specific (const T &exemplar)
 Constructor with exemplar. Each local instance of T is copy-constructed from the exemplar.
 
enumerable_thread_specific (T &&exemplar)
 
+template<typename P1 , typename... P, typename = typename internal::enable_if<!internal::is_callable_no_args<typename internal::strip<P1>::type>::value && !internal::is_compatible_ets<T, typename internal::strip<P1>::type>::value && !internal::is_same_type<T, typename internal::strip<P1>::type>::value >::type>
 enumerable_thread_specific (P1 &&arg1, P &&...args)
 Variadic constructor with initializer arguments. Each local instance of T is constructed by T(args...)
 
~enumerable_thread_specific ()
 Destructor.
 
+reference local ()
 returns reference to local, discarding exists
 
+reference local (bool &exists)
 Returns reference to calling thread's local copy, creating one if necessary.
 
+size_type size () const
 Get the number of local copies.
 
+bool empty () const
 true if there have been no local copies created
 
+iterator begin ()
 begin iterator
 
+iterator end ()
 end iterator
 
+const_iterator begin () const
 begin const iterator
 
+const_iterator end () const
 end const iterator
 
+range_type range (size_t grainsize=1)
 Get range for parallel algorithms.
 
+const_range_type range (size_t grainsize=1) const
 Get const range for parallel algorithms.
 
+void clear ()
 Destroys local copies.
 
enumerable_thread_specific (const enumerable_thread_specific &other)
 
+template<typename Alloc , ets_key_usage_type Cachetype>
 enumerable_thread_specific (const enumerable_thread_specific< T, Alloc, Cachetype > &other)
 
enumerable_thread_specific (enumerable_thread_specific &&other)
 
+template<typename Alloc , ets_key_usage_type Cachetype>
 enumerable_thread_specific (enumerable_thread_specific< T, Alloc, Cachetype > &&other)
 
+enumerable_thread_specificoperator= (const enumerable_thread_specific &other)
 
+template<typename Alloc , ets_key_usage_type Cachetype>
enumerable_thread_specificoperator= (const enumerable_thread_specific< T, Alloc, Cachetype > &other)
 
+enumerable_thread_specificoperator= (enumerable_thread_specific &&other)
 
+template<typename Alloc , ets_key_usage_type Cachetype>
enumerable_thread_specificoperator= (enumerable_thread_specific< T, Alloc, Cachetype > &&other)
 
+template<typename combine_func_t >
combine (combine_func_t f_combine)
 
+template<typename combine_func_t >
void combine_each (combine_func_t f_combine)
 
+ + + + +

+Friends

+template<typename U , typename A , ets_key_usage_type C>
class enumerable_thread_specific
 
+

Detailed Description

+

template<typename T, typename Allocator, ets_key_usage_type ETS_key_type>
+class tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >

+ +

The enumerable_thread_specific container.

+
enumerable_thread_specific has the following properties:
+- thread-local copies are lazily created, with default, exemplar or function initialization.
+- thread-local copies do not move (during lifetime, and excepting clear()) so the address of a copy is invariant.
+- the contained objects need not have operator=() defined if combine is not used.
+- enumerable_thread_specific containers may be copy-constructed or assigned.
+- thread-local copies can be managed by hash-table, or can be accessed via TLS storage for speed.
+- outside of parallel contexts, the contents of all thread-local copies are accessible by iterator or using combine or combine_each methods
+
Segmented iterator
When the thread-local objects are containers with input_iterators defined, a segmented iterator may be used to iterate over all the elements of all thread-local copies.
+
combine and combine_each
    +
  • Both methods are defined for enumerable_thread_specific.
  • +
  • combine() requires the type T have operator=() defined.
  • +
  • neither method modifies the contents of the object (though there is no guarantee that the applied methods do not modify the object.)
  • +
  • Both are evaluated in serial context (the methods are assumed to be non-benign.)
  • +
+
+

The documentation for this class was generated from the following file:
    +
  • enumerable_thread_specific.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00062.png b/doc/html/a00062.png new file mode 100644 index 0000000000000000000000000000000000000000..fba36b8c91269acd17d4473428f5d5e566a1b3e6 GIT binary patch literal 1259 zcmaJ>eN>WX6n{u#XmTt!!@|rhKaQ5!YLjMZ=Ft(BT4-ho*dcXu!AqhzhY6N$>JCcN zrYT~lrN{g(N#E3|WUFoYIW!z1l5LrSga?{TCIn7S>p8-%YY2LKq*Cd|oY9@g z6_Z2`2?I#czxM2D_f@e0`wm1|p2*)oI+r~VoG;&%R8X$RsGQ<`{0XFU!tSKqgAV8cFW=O{a+G07 zxff>1OgOZ0h`NU2t=OtosYYBYNk(|UT2?mm8EZQAU%iH8{%L1eL$MB9G+2iwU8Gli z(WA32kpGc~E-F_~kX7UkLoGAjlNHN8QvB4@HF>mz`}YU%*nCU>$Wp^alCl_m`-vISs&$1?J~feH zr``HW`CR%nv4>_PKVfrv6p7#T20}Y`3nwm*_Y3T#LR&lz1zfbs*E_Kp+M zfg?CrG>i8Gn?dREC9EUBfIjC{^k!fVUfJ->FbE;hq7!9~yxEeeeoLoxvEE648M@N@ zp8%{JL1gv-_B=B6bY%Ph(Scc{uvV!fzt$Mmq0}-9XmD$~tAIW`jP~6jB!wWxCWeIWAes6&dP1Q!x#H-v({*>)^IXxZ;KctJw z?X_}dSAN52nfz=;T0}>wT9&fnY|>=44_#kbZ_Em7zj%|Jk}>%6HWvOREVtjs=w(`2v!E?gXE^2(uY)P>epgHr7caq<{jz&iyN$ul+$y|^Y$iYo3<;?B HKY#TfaOiV_ literal 0 HcmV?d00001 diff --git a/doc/html/a00063.html b/doc/html/a00063.html new file mode 100644 index 0000000..c88d526 --- /dev/null +++ b/doc/html/a00063.html @@ -0,0 +1,146 @@ + + + + + + +tbb::filter Class Reference + + + + + + + +
+ +
+
tbb::filter Class Reference
+
+
+ +

A stage in a pipeline. + More...

+ +

#include <pipeline.h>

+
+Inheritance diagram for tbb::filter:
+
+
+ + +tbb::thread_bound_filter + +
+ + + + + + + + + + + + + + + + + +

+Static Protected Attributes

+static const unsigned char filter_is_serial = 0x1
 The lowest bit 0 is for parallel vs. serial.
 
static const unsigned char filter_is_out_of_order = 0x1<<4
 4th bit distinguishes ordered vs unordered filters. More...
 
+static const unsigned char filter_is_bound = 0x1<<5
 5th bit distinguishes thread-bound and regular filters.
 
+static const unsigned char filter_may_emit_null = 0x1<<6
 6th bit marks input filters emitting small objects
 
static const unsigned char exact_exception_propagation
 7th bit defines exception propagation mode expected by the application. More...
 
+

Detailed Description

+

A stage in a pipeline.

+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const unsigned char tbb::filter::exact_exception_propagation
+
+staticprotected
+
+Initial value:
=
+
#if TBB_USE_CAPTURED_EXCEPTION
+
0x0
+
+

7th bit defines exception propagation mode expected by the application.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const unsigned char tbb::filter::filter_is_out_of_order = 0x1<<4
+
+staticprotected
+
+ +

4th bit distinguishes ordered vs unordered filters.

+

The bit was not set for parallel filters in TBB 2.1 and earlier, but is_ordered() function always treats parallel filters as out of order.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • pipeline.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00063.png b/doc/html/a00063.png new file mode 100644 index 0000000000000000000000000000000000000000..a4923e5f6f12f4fc6c995790a39ddc23f8d14425 GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0vp^6M?vcgBeI(xc}1$NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~wRpNXhEy=VoqN0Ql>raKalS+U{~upI z{lb!fJrjb(vY)PUR=9q!@K(5si&Nu_nXF2^XU^1II&tQVI*7s6b0kI5*w*UTt$mxy zb|$8MGg5ZD-0}6@wAK6bjs}VwZx)y6x+uKZePf5)`}CLYz0YcljH|nid*wd8nBE&_ zk*z%Y+rsA;&7O<*ESqs=`pmE2-+n)FN51#sg)2YfjEz5gDjOTmpWvpXG?BrgmD@q% zkYudh#VLm*eVq)aYK+_%>?D;L=JyCT_#fjqpq`8> zeXe_AhlhqhgToS_ycFXP9tmIOS2O-z_&Q}vSOeoZ-+UWAzTiul#zWK6a-NX)_L%!4 z;Y@hXEvLSTI=3z#zmu)`ZuRq`wJW~fuD^TjQi0% zqi>4)?vuVQzB_Z5#8>T{%kpodu0LH@b=>j1`|b2%JHx6;?)H*r!*$Oa?eewEDB1Gk z|M3<6f1X!9d3!6na*O{S`Ohy7zWBE$_w$>!lJvD(<>qevc4p_(w+jR7ul@TFo#J^m w&p#xzzj9^zzRXaFyVXG+P+J`2)p^8zPfl@eY1pp$z%>FVdQ&MBb@09$ZlQUCw| literal 0 HcmV?d00001 diff --git a/doc/html/a00064.html b/doc/html/a00064.html new file mode 100644 index 0000000..615bcbb --- /dev/null +++ b/doc/html/a00064.html @@ -0,0 +1,102 @@ + + + + + + +tbb::interface6::filter_t< T, U > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::filter_t< T, U > Class Template Reference
+
+
+ +

Class representing a chain of type-safe pipeline filters. + More...

+ +

#include <pipeline.h>

+ + + + + + + + + + + +

+Public Member Functions

filter_t (const filter_t< T, U > &rhs)
 
+template<typename Body >
 filter_t (tbb::filter::mode mode, const Body &body)
 
+void operator= (const filter_t< T, U > &rhs)
 
+void clear ()
 
+ + + + + + + + + + +

+Friends

+class internal::pipeline_proxy
 
+template<typename T_ , typename U_ , typename Body >
filter_t< T_, U_ > make_filter (tbb::filter::mode, const Body &)
 Create a filter to participate in parallel_pipeline.
 
+template<typename T_ , typename V_ , typename U_ >
filter_t< T_, U_ > operator& (const filter_t< T_, V_ > &, const filter_t< V_, U_ > &)
 
+

Detailed Description

+

template<typename T, typename U>
+class tbb::interface6::filter_t< T, U >

+ +

Class representing a chain of type-safe pipeline filters.

+

The documentation for this class was generated from the following file:
    +
  • pipeline.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00065.html b/doc/html/a00065.html new file mode 100644 index 0000000..0677acd --- /dev/null +++ b/doc/html/a00065.html @@ -0,0 +1,73 @@ + + + + + + +tbb::final_scan_tag Struct Reference + + + + + + + +
+ +
+
tbb::final_scan_tag Struct Reference
+
+
+ +

Used to indicate that the final scan is being performed. + More...

+ +

#include <parallel_scan.h>

+ + + + +

+Static Public Member Functions

+static bool is_final_scan ()
 
+

Detailed Description

+

Used to indicate that the final scan is being performed.

+

The documentation for this struct was generated from the following file:
    +
  • parallel_scan.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00066.html b/doc/html/a00066.html new file mode 100644 index 0000000..0242697 --- /dev/null +++ b/doc/html/a00066.html @@ -0,0 +1,79 @@ + + + + + + +tbb::interface6::fixed_pool Class Reference + + + + + + + +
+ +
+
tbb::interface6::fixed_pool Class Reference
+
+
+
+Inheritance diagram for tbb::interface6::fixed_pool:
+
+
+ + + +
+ + + + + + + + +

+Public Member Functions

fixed_pool (void *buf, size_t size)
 construct pool with underlying allocator
 
~fixed_pool ()
 destroy pool
 
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00066.png b/doc/html/a00066.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf0f936e679a3260597e6bd40ca5a20cd113f3f GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^bAUL2gBeKP_Ia}bNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~p7nHb45?szJNM?KR|Y(+(fV`#|9?E2 zb$#c~1t%N214U!|95EQ$#q)XRu3de7_NJES`v*=t-(IR_Qt@0~6Z=Hvr7p-44olBZ8&1re>C1JX^$tT? zYTC}*xk7Y!>==zT|M_KLutFazUa^J@UmCW zlP5mQpLNSi_4;Tl@4PgPt&Mj) z+qs|qQavy9(r2CIyD8c4ZU`T@nzLiFcjS}(#kJey-WASW`!r&FVdQ&MBb@0Mb_w AY5)KL literal 0 HcmV?d00001 diff --git a/doc/html/a00067.html b/doc/html/a00067.html new file mode 100644 index 0000000..c3258e3 --- /dev/null +++ b/doc/html/a00067.html @@ -0,0 +1,125 @@ + + + + + + +tbb::interface6::flattened2d< Container > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::flattened2d< Container > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef conval_type::size_type size_type
 Basic types.
 
+typedef
+conval_type::difference_type 
difference_type
 
+typedef conval_type::allocator_type allocator_type
 
+typedef conval_type::value_type value_type
 
+typedef conval_type::reference reference
 
+typedef
+conval_type::const_reference 
const_reference
 
+typedef conval_type::pointer pointer
 
+typedef conval_type::const_pointer const_pointer
 
+typedef
+internal::segmented_iterator
+< Container, value_type > 
iterator
 
+typedef
+internal::segmented_iterator
+< Container, const value_type > 
const_iterator
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

flattened2d (const Container &c, typename Container::const_iterator b, typename Container::const_iterator e)
 
flattened2d (const Container &c)
 
+iterator begin ()
 
+iterator end ()
 
+const_iterator begin () const
 
+const_iterator end () const
 
+size_type size () const
 
+
The documentation for this class was generated from the following file:
    +
  • enumerable_thread_specific.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00068.html b/doc/html/a00068.html new file mode 100644 index 0000000..f26db82 --- /dev/null +++ b/doc/html/a00068.html @@ -0,0 +1,81 @@ + + + + + + +tbb::interface6::flow_control Class Reference + + + + + + + +
+ +
+
tbb::interface6::flow_control Class Reference
+
+
+ +

input_filter control to signal end-of-input for parallel_pipeline + More...

+ +

#include <pipeline.h>

+ + + + +

+Public Member Functions

+void stop ()
 
+ + + + +

+Friends

+template<typename T , typename U , typename Body >
class internal::concrete_filter
 
+

Detailed Description

+

input_filter control to signal end-of-input for parallel_pipeline

+

The documentation for this class was generated from the following file:
    +
  • pipeline.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00069.html b/doc/html/a00069.html new file mode 100644 index 0000000..e5ec32e --- /dev/null +++ b/doc/html/a00069.html @@ -0,0 +1,93 @@ + + + + + + +tbb::flow::interface9::gfx_async_msg< T > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface9::gfx_async_msg< T > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface9::gfx_async_msg< T >:
+
+
+ + + +
+ + + + +

+Public Types

+typedef gfx_offload::task_id_type kernel_id_type
 
+ + + + + + + + + + + +

+Public Member Functions

gfx_async_msg (const T &input_data)
 
+T & data ()
 
+const T & data () const
 
+void set_task_id (kernel_id_type id)
 
+kernel_id_type task_id () const
 
+
The documentation for this class was generated from the following file:
    +
  • gfx_factory.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00069.png b/doc/html/a00069.png new file mode 100644 index 0000000000000000000000000000000000000000..6a00083f0770d1e6929703aad0a4d8075d103f7e GIT binary patch literal 839 zcmeAS@N?(olHy`uVBq!ia0vp^Ux7G)gBeJE+jkfwArasc;`;ype<1V4o3Ew)hb917 zV0_@f0oKkt@<1*}NswPK15gnNTs;+H#K6FG&C|s(q=ND7+>4u5EAY6A>)-wV|M+z+ zCe9ndx9{DWX;3OJ%9+xt@_g!)ATISuDy)~6Oj{x`>&he%=k)>lVmD9RTK0rZ<>lj3 zu@RHvuCcFtuYccj&i3-k#$R$To^E%%wqX6oc=prIuM_O%Z6&@ z!*}d=n`?bx-b1yE?N@RQEw-%d^tvSZ*ZtMo>szhj8QZUzS=kp}Tei;q%D$MlhE-X{ zhMv!UP2Ba(_DG#No}1 zE1TPyT`n$R>saW?E8sj?N})~7)Pcu0s{t573_!h%Nf|-RM=qc$IAA_C$m^jC6UQ=` zCa$kVtNoW9l|R0;?nAJcc0=6vf1ER37Z@FgzGZEeux|f~_xk=8PnX&B1dA&+{9pF) zmG#$e_Bp)X`>rmI1P1QrOIBOzH0rla%$@t^-aVbtd&a*n^rcVE+Gw5XmuI>rxV`e{ zgsQFguieOh`sei8s=)ofXa4Tk`X>L_o|7iYH*2=ezOrKLz9~tWPRVKVsXO9-9=P4; zTRlZh(kE+s>a|C|9%)ajz48Yb3F}hlt&W#pd{4OA{QkY~Pqp9Ozp~V2jq`C}Z0z_^ zy7#B(tGDGP*VG=l>wdCW6npw}YpKWGt2a6~Z`*42;mq}`i+SopuHT);eo-Rm_g~>F zuXAF5%e|`(`S@nT%^RB4#daA_e+IZ+xw`4s+dmR%Ke%mW9x&N%{H@78e|C-PR^RJ) zKGqn^|1_U>V=cSEwWaB{A7l=^=&3%x=DV;Y--lXQm~RPKJ|)QHFLR*Xr1I$3CP#s( Op25@A&t;ucLK6Uunx9_) literal 0 HcmV?d00001 diff --git a/doc/html/a00070.html b/doc/html/a00070.html new file mode 100644 index 0000000..a27e478 --- /dev/null +++ b/doc/html/a00070.html @@ -0,0 +1,107 @@ + + + + + + +tbb::flow::interface9::gfx_buffer< T > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface9::gfx_buffer< T > Class Template Reference
+
+
+ + + + + + + + +

+Public Types

+typedef std::vector< T >::iterator iterator
 
+typedef std::vector< T >
+::const_iterator 
const_iterator
 
+typedef std::size_t size_type
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

gfx_buffer (size_type size)
 
+T * data ()
 
+const T * data () const
 
+size_type size () const
 
+const_iterator cbegin () const
 
+const_iterator cend () const
 
+iterator begin ()
 
+iterator end ()
 
+T & operator[] (size_type pos)
 
+const T & operator[] (size_type pos) const
 
+
The documentation for this class was generated from the following file:
    +
  • gfx_factory.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00071.html b/doc/html/a00071.html new file mode 100644 index 0000000..38f6fbe --- /dev/null +++ b/doc/html/a00071.html @@ -0,0 +1,100 @@ + + + + + + +tbb::flow::interface9::gfx_factory Class Reference + + + + + + + +
+ +
+
tbb::flow::interface9::gfx_factory Class Reference
+
+
+ + + + + + +

+Classes

struct  device_type
 
class  dummy_device_selector
 
+ + + + + + + + +

+Public Types

+template<typename T >
using async_msg_type = gfx_async_msg< T >
 
+typedef func_wrapper kernel_type
 
+typedef gfx_offload::task_id_type kernel_id_type
 
+ + + + + + + + + + + + +

+Public Member Functions

gfx_factory (tbb::flow::graph &g)
 
+template<typename... Args>
void send_data (device_type, Args &...args)
 
+template<typename... Args>
void send_kernel (device_type, const kernel_type &kernel, Args &...args)
 
+template<typename FinalizeFn , typename... Args>
void finalize (device_type, FinalizeFn fn, Args &...)
 
+
The documentation for this class was generated from the following file:
    +
  • gfx_factory.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00072.html b/doc/html/a00072.html new file mode 100644 index 0000000..8c9b37e --- /dev/null +++ b/doc/html/a00072.html @@ -0,0 +1,82 @@ + + + + + + +tbb::interface9::global_control Class Reference + + + + + + + +
+ +
+
tbb::interface9::global_control Class Reference
+
+
+ + + + +

+Public Types

enum  parameter { max_allowed_parallelism, +thread_stack_size, +parameter_max + }
 
+ + + +

+Public Member Functions

global_control (parameter p, size_t value)
 
+ + + +

+Static Public Member Functions

+static size_t active_value (parameter p)
 
+
The documentation for this class was generated from the following file:
    +
  • global_control.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00073.html b/doc/html/a00073.html new file mode 100644 index 0000000..090868b --- /dev/null +++ b/doc/html/a00073.html @@ -0,0 +1,388 @@ + + + + + + +tbb::flow::interface10::graph Class Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::graph Class Reference
+
+
+ +

The graph class. + More...

+ +

#include <flow_graph.h>

+
+Inheritance diagram for tbb::flow::interface10::graph:
+
+
+ + +tbb::flow::interface10::graph_proxy + +
+ + + + + + +

+Public Types

+typedef graph_iterator< graph,
+graph_node > 
iterator
 
+typedef graph_iterator< const
+graph, const graph_node > 
const_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

graph ()
 Constructs a graph with isolated task_group_context.
 
graph (task_group_context &use_this_context)
 Constructs a graph with use_this_context as context.
 
 ~graph ()
 Destroys the graph. More...
 
+void set_name (const char *name)
 
+void increment_wait_count ()
 
+void decrement_wait_count ()
 
void reserve_wait () __TBB_override
 Used to register that an external entity may still interact with the graph. More...
 
void release_wait () __TBB_override
 Deregisters an external entity that may have interacted with the graph. More...
 
template<typename Receiver , typename Body >
void run (Receiver &r, Body body)
 Spawns a task that runs a body and puts its output to a specific receiver. More...
 
template<typename Body >
void run (Body body)
 Spawns a task that runs a function object. More...
 
void wait_for_all ()
 Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls. More...
 
+task * root_task ()
 Returns the root task of the graph.
 
+iterator begin ()
 start iterator
 
+iterator end ()
 end iterator
 
+const_iterator begin () const
 start const iterator
 
+const_iterator end () const
 end const iterator
 
+const_iterator cbegin () const
 start const iterator
 
+const_iterator cend () const
 end const iterator
 
+bool is_cancelled ()
 return status of graph execution
 
+bool exception_thrown ()
 
+void reset (reset_flags f=rf_reset_protocol)
 
+ + + + + + + + + + + + + + + + + + + +

+Friends

+class graph_node
 
+template<typename C , typename N >
class graph_iterator
 
+void internal::activate_graph (graph &g)
 
+void internal::deactivate_graph (graph &g)
 
+bool internal::is_graph_active (graph &g)
 
+void internal::spawn_in_graph_arena (graph &g, tbb::task &arena_task)
 
+void internal::add_task_to_graph_reset_list (graph &g, task *tp)
 
+template<typename F >
void internal::execute_in_graph_arena (graph &g, F &f)
 
+

Detailed Description

+

The graph class.

+

This class serves as a handle to the graph

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
tbb::flow::interface10::graph::~graph ()
+
+inline
+
+ +

Destroys the graph.

+

Calls wait_for_all, then destroys the root task and context.

+ +

References wait_for_all().

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void tbb::flow::interface10::graph::release_wait ()
+
+virtual
+
+ +

Deregisters an external entity that may have interacted with the graph.

+
The graph will not return from wait_for_all until all the number of decrement_wait_count calls
+

matches the number of increment_wait_count calls.

+ +

Implements tbb::flow::interface10::graph_proxy.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void tbb::flow::interface10::graph::reserve_wait ()
+
+virtual
+
+ +

Used to register that an external entity may still interact with the graph.

+
The graph will not return from wait_for_all until a matching number of decrement_wait_count calls
+

is made.

+ +

Implements tbb::flow::interface10::graph_proxy.

+ +
+
+ +
+
+
+template<typename Receiver , typename Body >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void tbb::flow::interface10::graph::run (Receiver & r,
Body body 
)
+
+inline
+
+ +

Spawns a task that runs a body and puts its output to a specific receiver.

+
The task is spawned as a child of the graph. This is useful for running tasks
+

that need to block a wait_for_all() on the graph. For example a one-off source.

+ +

References root_task().

+ +
+
+ +
+
+
+template<typename Body >
+ + + + + +
+ + + + + + + + +
void tbb::flow::interface10::graph::run (Body body)
+
+inline
+
+ +

Spawns a task that runs a function object.

+
The task is spawned as a child of the graph. This is useful for running tasks
+

that need to block a wait_for_all() on the graph. For example a one-off source.

+ +

References root_task().

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void tbb::flow::interface10::graph::wait_for_all ()
+
+inline
+
+ +

Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.

+

The waiting thread will go off and steal work while it is block in the wait_for_all.

+ +

Referenced by ~graph().

+ +
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00073.png b/doc/html/a00073.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8bf518aa8fe58dd1394d50e1b430903168aa16 GIT binary patch literal 1120 zcmeAS@N?(olHy`uVBq!ia0y~yU|a@d2XHV0$y8y*Mj#~-;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|!2I6R#WAFU@$KBV(?03&FtnHS-}x`Q zUo=B;%DZnLzbdmY?%V1hV9fSU$cf|gfqxOxQfIO|^%$OWTJ7nQA{H~bqoWdySax0H z((0NlImHs*-1`qM%c&|EDU`Q-W<31U)n(m>wX@!ti*LHhYdL+&R~xg{9Vg^%VuL#r z&+gFMlbb7jdP1*6a*Y_f@Ap4z&(GQaE8IWRxA%9uTJ1{B(l_}#RnG^%yQ+FT%XewQ zah2$F5GP|5lC*SJ3zxri?*U=K3=%}WJ>+{Y}2)R zw>nS9?psq;bpNt$ugOv?P5b%@e|Dwz_Pw9tWUF%5{Or#lp6w@OLr`~lO>jv2>MiS(-?P8^pnWJCeunXRGx z1G9mmc|&D^FT=H;KWARP{MKx$`gN9sxmPbunHT15Tv_DHz<0oXhR>xr?w3nuF{B+? z&3V8k&X?iY$1Em;{&3-j%006f&OE-#k|4KUjp4J;vX^DM?=E9G!1yEFrj+4XAy6e5 zxL+8U78wjwgZ~-<9V3T?=jC77@@1n>M%n5VYyD#9fZT)NG=j;Dn4UP(a{BPk*Rnw(?e|5J%sXVoJ*OQ2~D@Agu^cNnV z%1~01ZJH{4J9Yhrzd@!~|J6OYwn%yP3}|9vl=ygbcHHd1xdBXHO*=BZeW%X8XVZVR zMCi(T7Kg{Pns+g`?6%)Vm2TESNJK*RbgQ(md4r=52PAISy_mJ^Pb!dUgN%i + + + + + +tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType > Class Template Reference
+
+
+ + + + + + + + + + + + + + +

+Public Types

+typedef size_t size_type
 
+typedef GraphNodeType value_type
 
+typedef GraphNodeType * pointer
 
+typedef GraphNodeType & reference
 
+typedef const GraphNodeType & const_reference
 
+typedef std::forward_iterator_tag iterator_category
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

graph_iterator ()
 Default constructor.
 
graph_iterator (const graph_iterator &other)
 Copy constructor.
 
+graph_iteratoroperator= (const graph_iterator &other)
 Assignment.
 
+reference operator* () const
 Dereference.
 
+pointer operator-> () const
 Dereference.
 
+bool operator== (const graph_iterator &other) const
 Equality.
 
+bool operator!= (const graph_iterator &other) const
 Inequality.
 
+graph_iteratoroperator++ ()
 Pre-increment.
 
+graph_iterator operator++ (int)
 Post-increment.
 
+ + + + + +

+Friends

+class graph
 
+class graph_node
 
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00075.html b/doc/html/a00075.html new file mode 100644 index 0000000..d41c943 --- /dev/null +++ b/doc/html/a00075.html @@ -0,0 +1,88 @@ + + + + + + +tbb::flow::interface10::graph_proxy Class Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::graph_proxy Class Referenceabstract
+
+
+ +

Pure virtual template classes that define interfaces for async communication. + More...

+ +

#include <flow_graph_abstractions.h>

+
+Inheritance diagram for tbb::flow::interface10::graph_proxy:
+
+
+ + +tbb::flow::interface10::graph +tbb::flow::interface10::receiver_gateway< Input > + +
+ + + + + + + + +

+Public Member Functions

+virtual void reserve_wait ()=0
 Inform a graph that messages may come from outside, to prevent premature graph completion.
 
+virtual void release_wait ()=0
 Inform a graph that a previous call to reserve_wait is no longer in effect.
 
+

Detailed Description

+

Pure virtual template classes that define interfaces for async communication.

+

The documentation for this class was generated from the following file:
    +
  • flow_graph_abstractions.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00075.png b/doc/html/a00075.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbecbb0874ee0b0a802a5acffa462a4d052ec0d GIT binary patch literal 1478 zcmb7^c~H|w6vuxFP>up(1d?(H69bA;uByQRh9iOe01;!jZ>UA&5QpHwQR9V@a3uxN zBA_J^F$DohI3g0Igb_stgowlhD5HoFjzCm!ApN1!e>>Bi+1!l}G8&Mn4 z^69%fE8aE+*C`wGTcmh?WW$hKYk4QK&g95gQ`M6+fh(We`yDAB%5g(7S~SlYh*PB% zV^^)XGPHzlNIj$c>9+!td*U(1*^9 z3Fs}k+C-g?-7a$e0iy|NMDyNDF*L&%qv5z_ zY5Q1M2@!sJbIg{YS~jH?-!t`TtWu*g^e&Wg(e2QW0@-Ui^%oBGy8kYR^G=#pty)Pu zD({hQw*wXC0K|y&gaC?mKNJI~rC*ZtTfxV~`bZ%feVS zl30cbOpMK=!vqtNYN>TiIgx&A?qyCyHb}laEi%BqFR}+~lZdN|p8chMLv0yrW$3jk z%)8v9i0v*%veGCZ&MTbVY8T96j6e$NoA=LJwCl@$rW}mL_GXq8O)106@1?dJ9;`UZ?6ez>L zy&e&<=X$i~ms1kITWdzI1m0h^>EX;1(cqL;D<5n7@lMpPaF_Jltdwv)LuZt^{?6Ph zBtK@1S|oQqhqXCrX8AR`GHSNjgI9m5>|IB_^0~R=gb?r${fADfM&|tMx<*Wpq{sQkmZ)_x~M+-;4VT?%AH*QL||g3bIpvE>e+L2 z3>f2MSL#x~juVzMhE~kO*gS(mm4detU89O(XKsV4KUCXKVwueCU7d%p2vJn0q_UR7 zAu@U(WPD>GGDHwEaEKyD2pPn`9F6<1$-a)9(!qr7WE;*kvhVbwrY-Y~gHlHk4Sl)* MNDLq}c*dUp2Ym3K7XSbN literal 0 HcmV?d00001 diff --git a/doc/html/a00076.html b/doc/html/a00076.html new file mode 100644 index 0000000..43cfeb9 --- /dev/null +++ b/doc/html/a00076.html @@ -0,0 +1,99 @@ + + + + + + +tbb::internal::tbb_thread_v3::id Class Reference + + + + + + + +
+ +
+
tbb::internal::tbb_thread_v3::id Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Friends

+class tbb_thread_v3
 
+bool operator== (tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)
 
+bool operator!= (tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)
 
+bool operator< (tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)
 
+bool operator<= (tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)
 
+bool operator> (tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)
 
+bool operator>= (tbb_thread_v3::id x, tbb_thread_v3::id y) __TBB_NOEXCEPT(true)
 
+template<class charT , class traits >
std::basic_ostream< charT,
+traits > & 
operator<< (std::basic_ostream< charT, traits > &out, tbb_thread_v3::id id)
 
+tbb_thread_v3::id
+__TBB_EXPORTED_FUNC 
thread_get_id_v3 ()
 
+size_t tbb_hasher (const tbb_thread_v3::id &id)
 
+id atomic_compare_and_swap (id &location, const id &value, const id &comparand)
 
+
The documentation for this class was generated from the following file:
    +
  • tbb_thread.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00077.html b/doc/html/a00077.html new file mode 100644 index 0000000..4b16384 --- /dev/null +++ b/doc/html/a00077.html @@ -0,0 +1,81 @@ + + + + + + +tbb::improper_lock Class Reference + + + + + + + +
+ +
+
tbb::improper_lock Class Reference
+
+
+ +

Exception for PPL locks. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::improper_lock:
+
+
+ + + +
+ + + + +

+Public Member Functions

+const char * what () const __TBB_override throw ()
 
+

Detailed Description

+

Exception for PPL locks.

+

The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00077.png b/doc/html/a00077.png new file mode 100644 index 0000000000000000000000000000000000000000..7f4f5571e678cab77f93f0ecf6ecf96ba1437811 GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^#Xuau!3-p2m+tZbQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;yA6NDNe}A~E zx5L_Nf_LWn9#=MX&ItZ)9UnMrTw?6bIA zTo+g7dF$zuTjxwm9@XA^XtU<_$0x79@hw-$E&h70z$-}lkfvvD#fi+cYvK*rdl;-f zH+=s3O277irN(aW`33)G@8VT=P(H+Yp{;;vi{c!HTn=>yX#`gu@NP<&2r=6c6;>$vMs_3c=;{Q dp855Oxv1LZ<=kl!OMtP%;OXk;vd$@?2>>|R=kEXj literal 0 HcmV?d00001 diff --git a/doc/html/a00078.html b/doc/html/a00078.html new file mode 100644 index 0000000..57fa90e --- /dev/null +++ b/doc/html/a00078.html @@ -0,0 +1,109 @@ + + + + + + +tbb::tick_count::interval_t Class Reference + + + + + + + +
+ +
+
tbb::tick_count::interval_t Class Reference
+
+
+ +

Relative time interval. + More...

+ +

#include <tick_count.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

interval_t ()
 Construct a time interval representing zero time duration.
 
interval_t (double sec)
 Construct a time interval representing sec seconds time duration.
 
+double seconds () const
 Return the length of a time interval in seconds.
 
+interval_toperator+= (const interval_t &i)
 Accumulation operator.
 
+interval_toperator-= (const interval_t &i)
 Subtraction operator.
 
+ + + + + + + + + + + + +

+Friends

+class tbb::tick_count
 
+interval_t operator- (const tick_count &t1, const tick_count &t0)
 Extract the intervals from the tick_counts and subtract them.
 
+interval_t operator+ (const interval_t &i, const interval_t &j)
 Add two intervals.
 
+interval_t operator- (const interval_t &i, const interval_t &j)
 Subtract two intervals.
 
+

Detailed Description

+

Relative time interval.

+

The documentation for this class was generated from the following file:
    +
  • tick_count.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00079.html b/doc/html/a00079.html new file mode 100644 index 0000000..252533f --- /dev/null +++ b/doc/html/a00079.html @@ -0,0 +1,81 @@ + + + + + + +tbb::invalid_multiple_scheduling Class Reference + + + + + + + +
+ +
+
tbb::invalid_multiple_scheduling Class Reference
+
+
+ +

Exception for repeated scheduling of the same task_handle. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::invalid_multiple_scheduling:
+
+
+ + + +
+ + + + +

+Public Member Functions

+const char * what () const __TBB_override throw ()
 
+

Detailed Description

+

Exception for repeated scheduling of the same task_handle.

+

The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00079.png b/doc/html/a00079.png new file mode 100644 index 0000000000000000000000000000000000000000..ba8483c1cf060fa2603cfd6dbb3498dee4db5661 GIT binary patch literal 638 zcmeAS@N?(olHy`uVBq!ia0vp^dx1EBgBeIxUv7y5QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;_W8{<0j=jQ~Uk$ zg>PH2{r#M|zJGuHFADGRyyW_BWBk-2ZR^RW!hk%}ysh!uO<3>jb$NbN<)xJQ&GYru zze{siet$~P{PwRl5UAqanmJ#t&Rg+&f9n5_XJ+a@o%wnD8`YKP7e724H;GU3cHAU6 z{@Ia_!Idb zINxCYA%Kr7lbB|vBXM8>RQ=)pzgM3AKlPkJm;G|%ookjqfBvq`njfaUyW9RI^B0T9 zTh3RWlv|LvIsW{)mz#Lr-m~IW-?sbfvQry-pS5P{xN9WopYHB>8rwA|_^E;GrL6at zRhm~l<;r**n!l^Xenv2Brq}A}YP=c`%PY3UuO6D7{b{^>) + + + + + +tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel Class Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel Class Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel:
+
+
+ + + +
+ + + + +

+Public Member Functions

kernel (const kernel &k)
 
+ + + + + + + +

+Friends

+template<typename DeviceFilter_ >
class opencl_factory
 
+template<typename Factory >
class opencl_program
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00080.png b/doc/html/a00080.png new file mode 100644 index 0000000000000000000000000000000000000000..390fec9182b0ebd240c6467c1746328b2e12b66a GIT binary patch literal 966 zcmeAS@N?(olHy`uVBq!ia0y~yU`zzE12~w0YLYUb!Y zt>Uj|tE%QC_1^|fht@MaZ{8{XZqgT*eF|;ok4|4w|J-_0i;C^kkcdf2U}bQIXQJ`u zBWHBj8W#Rw^k8W6Xk}#j`O~wL@eznMlf|!-@eq(D)KGYmgUy4%O*L6Ufl*>=Phta0 zLWoftP$KZ81gR2|`fX>=2pMlyFlb;=XbF)}n1qaDAHEFyca>T1+=7xV&dVYhWT*9o zce3vAH2q=laqq&ViOTdmd6_w*W;8*Z%Wdltj9{`%ns|E9U$jC+~yo~K)vR=6kZhJNAKvK_(e)^9JF z>R;A+Ud?QEN$e`$yuGDIblEQ%UQgrPeq1>J)w#aexh6kyihCZu3*53hXZ^C*#t$5< zpZh$_V!!?L_0AFiv#Ry<_Yhn|n_yX4zb=H@eLaBNne*{9)hGV|$Dv z;xDLq{#?EB{nFU|H}9u&<*!^Pe|WBQuIVn}!_PPWp7!@(-tr6m4~?EA?3=B6ODJM? z?z-1AuWq)vQ@md{Fg)^+n_S+z7q?SBn(%+I?@ZbmxohWTJ?EdkSMqj-u5wuYc3wtx$g$b0 z-`O0n|CIi_qRUxtCc_`|>%V6_z7QMKAjdEK<9E`JOeTAe#D;toQML|boDy{7jE + + + + + +tbb::flow::interface10::limiter_node< T > Class Template Reference + + + + + + + +
+
+
tbb::flow::interface10::limiter_node< T > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00082.html b/doc/html/a00082.html new file mode 100644 index 0000000..c56f997 --- /dev/null +++ b/doc/html/a00082.html @@ -0,0 +1,89 @@ + + + + + + +tbb::interface6::memory_pool< Alloc > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::memory_pool< Alloc > Class Template Reference
+
+
+ +

Thread-safe growable pool allocator for variable-size requests. + More...

+ +

#include <memory_pool.h>

+
+Inheritance diagram for tbb::interface6::memory_pool< Alloc >:
+
+
+ + + +
+ + + + + + + + +

+Public Member Functions

memory_pool (const Alloc &src=Alloc())
 construct pool with underlying allocator
 
~memory_pool ()
 destroy pool
 
+

Detailed Description

+

template<typename Alloc>
+class tbb::interface6::memory_pool< Alloc >

+ +

Thread-safe growable pool allocator for variable-size requests.

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00082.png b/doc/html/a00082.png new file mode 100644 index 0000000000000000000000000000000000000000..040c525da839e5eac853d6e1a5792784458e9f56 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^kAOIUgBeH~pNX6eq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0^gLZ0Ln;{G&W)b5+JJ{O+TQZ_{f{4v z>JrovyPml1Tje!QX*$xLwyoU}){Ytoas{#wt}Yrkx5Tcq-rb+T^Z z^7TP^UPse*z3{lSc8_;q*RFrFo~2lotGtZ6x2=1>cG}$9nt-F4=GW79%lRAT$Czq+ znhT`|PWpGKwae=E&NVA0eNn9mE7a7?zop~(N@%x+=RHnW&rg0DUX#kzT#Yv`Wc;DS z->^|K{^Li9dxbSePZpFM|Lw2nr)TEP8wm``FcojQf+w#(_49G)sv``t&!pH2)Q@+(_J}ien4jLY+~2a-#{bT{ z3XUCXe|J6l^)uq$|7#-8itBIA&TW1+@$35N{W-H#Ji0w5m)1+Jc<qqUn>SH#qso1U5!_RQ;l zNZ$6Cdqodt`Fx|h%)9q(H8lBX=^I$f!dnpq+m6M qcTcQ^L?7hBLhy6@wKF*>bqwz1U9REzw~c|RiNVv=&t;ucLK6VN`#O~X literal 0 HcmV?d00001 diff --git a/doc/html/a00083.html b/doc/html/a00083.html new file mode 100644 index 0000000..b52ce5a --- /dev/null +++ b/doc/html/a00083.html @@ -0,0 +1,179 @@ + + + + + + +tbb::interface6::memory_pool_allocator< T, P > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::memory_pool_allocator< T, P > Class Template Reference
+
+
+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. + More...

+ +

#include <memory_pool.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + + + + + + + + + +

+Public Types

+typedef
+tbb::internal::allocator_type
+< T >::value_type 
value_type
 
+typedef value_type * pointer
 
+typedef const value_type * const_pointer
 
+typedef value_type & reference
 
+typedef const value_type & const_reference
 
+typedef size_t size_type
 
+typedef ptrdiff_t difference_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

memory_pool_allocator (pool_type &pool) throw ()
 
memory_pool_allocator (const memory_pool_allocator &src) throw ()
 
+template<typename U >
 memory_pool_allocator (const memory_pool_allocator< U, P > &src) throw ()
 
+pointer address (reference x) const
 
+const_pointer address (const_reference x) const
 
+pointer allocate (size_type n, const void *=0)
 Allocate space for n objects.
 
+void deallocate (pointer p, size_type)
 Free previously allocated block of memory.
 
+size_type max_size () const throw ()
 Largest value for which method allocate might succeed.
 
+template<typename U , typename... Args>
void construct (U *p, Args &&...args)
 Copy-construct value at location pointed to by p.
 
+void construct (pointer p, value_type &&value)
 
+void construct (pointer p, const value_type &value)
 
+void destroy (pointer p)
 Destroy value at location pointed to by p.
 
+ + + +

+Protected Types

+typedef P pool_type
 
+ + + +

+Protected Attributes

+pool_type * my_pool
 
+ + + + + + + + + + +

+Friends

+template<typename U , typename R >
class memory_pool_allocator
 
+template<typename V , typename U , typename R >
bool operator== (const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)
 
+template<typename V , typename U , typename R >
bool operator!= (const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)
 
+

Detailed Description

+

template<typename T, typename P = internal::pool_base>
+class tbb::interface6::memory_pool_allocator< T, P >

+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00084.html b/doc/html/a00084.html new file mode 100644 index 0000000..36b6b43 --- /dev/null +++ b/doc/html/a00084.html @@ -0,0 +1,128 @@ + + + + + + +tbb::interface6::memory_pool_allocator< void, P > Class Template Reference + + + + + + + +
+ +
+
tbb::interface6::memory_pool_allocator< void, P > Class Template Reference
+
+
+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. + More...

+ +

#include <memory_pool.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + + + +

+Public Types

+typedef P pool_type
 
+typedef void * pointer
 
+typedef const void * const_pointer
 
+typedef void value_type
 
+ + + + + + + + +

+Public Member Functions

memory_pool_allocator (pool_type &pool) throw ()
 
memory_pool_allocator (const memory_pool_allocator &src) throw ()
 
+template<typename U >
 memory_pool_allocator (const memory_pool_allocator< U, P > &src) throw ()
 
+ + + +

+Protected Attributes

+pool_type * my_pool
 
+ + + + + + + + + + +

+Friends

+template<typename U , typename R >
class memory_pool_allocator
 
+template<typename V , typename U , typename R >
bool operator== (const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)
 
+template<typename V , typename U , typename R >
bool operator!= (const memory_pool_allocator< V, R > &a, const memory_pool_allocator< U, R > &b)
 
+

Detailed Description

+

template<typename P>
+class tbb::interface6::memory_pool_allocator< void, P >

+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00085.html b/doc/html/a00085.html new file mode 100644 index 0000000..16d13b5 --- /dev/null +++ b/doc/html/a00085.html @@ -0,0 +1,98 @@ + + + + + + +rml::MemPoolPolicy Struct Reference + + + + + + + +
+ +
+
rml::MemPoolPolicy Struct Reference
+
+
+ + + + +

+Public Types

enum  { TBBMALLOC_POOL_VERSION = 1 + }
 
+ + + +

+Public Member Functions

MemPoolPolicy (rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+rawAllocType pAlloc
 
+rawFreeType pFree
 
+size_t granularity
 
+int version
 
+unsigned fixedPool: 1
 
+unsigned keepAllMemory: 1
 
+unsigned reserved: 30
 
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00086.html b/doc/html/a00086.html new file mode 100644 index 0000000..f207534 --- /dev/null +++ b/doc/html/a00086.html @@ -0,0 +1,81 @@ + + + + + + +tbb::missing_wait Class Reference + + + + + + + +
+ +
+
tbb::missing_wait Class Reference
+
+
+ +

Exception for missing wait on structured_task_group. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::missing_wait:
+
+
+ + + +
+ + + + +

+Public Member Functions

+const char * what () const __TBB_override throw ()
 
+

Detailed Description

+

Exception for missing wait on structured_task_group.

+

The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00086.png b/doc/html/a00086.png new file mode 100644 index 0000000000000000000000000000000000000000..7f9c4b31407dc4891a59c510c5a999ce0f36acf8 GIT binary patch literal 489 zcmVvTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004aNkl4jX&Ku+ z{B4sYb#ZB0UV?qLwO((I%9h%%x4Y0LNlmUyKKx!{Wl}7mO_Ex4n0%>ww@TPpge0}N zG_6N%^0rT#VuFP|T?bZ@TD*?lo)I0-DQ|k2d+RCYUfv{0Z4!f~Ns_WmlO$ysYBDn$ z0l=@h0SsZ7>2@2X8fIEVgH+>8UzvN;1dwK$0J2OIK$d9&$TCd;S*8gf%QOLGnWp0~ zGaCX1Fo0x$&26Z`I)uytXXVD8g2+eUwIk&pklP66N(YrKlAE2!1yrCy1|9cU= zQ~aCJGl=EkIe~GaWvX+}pepU?opLX1anI(mj?a7}dggfFRNfj-0e~hS*weLO{?`C_ fn=dt)nT_BFa9}>GS5c@900000NkvXXu0mjf=2qC~ literal 0 HcmV?d00001 diff --git a/doc/html/a00087.html b/doc/html/a00087.html new file mode 100644 index 0000000..bdc2f17 --- /dev/null +++ b/doc/html/a00087.html @@ -0,0 +1,230 @@ + + + + + + +tbb::movable_exception< ExceptionData > Class Template Reference + + + + + + + +
+ +
+
tbb::movable_exception< ExceptionData > Class Template Reference
+
+
+ +

Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::movable_exception< ExceptionData >:
+
+
+ + +tbb::tbb_exception + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

movable_exception (const ExceptionData &data_)
 
movable_exception (const movable_exception &src) throw ()
 
+const movable_exceptionoperator= (const movable_exception &src)
 
+ExceptionData & data () throw ()
 
+const ExceptionData & data () const throw ()
 
+const char * name () const __TBB_override throw ()
 Returns RTTI name of the originally intercepted exception.
 
+const char * what () const __TBB_override throw ()
 Returns the result of originally intercepted exception's what() method.
 
movable_exceptionmove () __TBB_override throw ()
 Creates and returns pointer to the deep copy of this exception object. More...
 
void destroy () __TBB_override throw ()
 Destroys objects created by the move() method. More...
 
void throw_self () __TBB_override
 Throws this exception object. More...
 
- Public Member Functions inherited from tbb::tbb_exception
void operator delete (void *p)
 
+ + + + +

+Protected Attributes

+ExceptionData my_exception_data
 User data.
 
+

Detailed Description

+

template<typename ExceptionData>
+class tbb::movable_exception< ExceptionData >

+ +

Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.

+

Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread ().

+
See Also
tbb::tbb_exception
+

Member Function Documentation

+ +
+
+
+template<typename ExceptionData >
+ + + + + +
+ + + + + + + + + + + + + +
void tbb::movable_exception< ExceptionData >::destroy ()
throw (
)
+
+inlinevirtual
+
+ +

Destroys objects created by the move() method.

+

Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method.

+ +

Implements tbb::tbb_exception.

+ +
+
+ +
+
+
+template<typename ExceptionData >
+ + + + + +
+ + + + + + + + + + + + + +
movable_exception* tbb::movable_exception< ExceptionData >::move ()
throw (
)
+
+inlinevirtual
+
+ +

Creates and returns pointer to the deep copy of this exception object.

+

Move semantics is allowed.

+ +

Implements tbb::tbb_exception.

+ +
+
+ +
+
+
+template<typename ExceptionData >
+ + + + + +
+ + + + + + + +
void tbb::movable_exception< ExceptionData >::throw_self ()
+
+inlinevirtual
+
+ +

Throws this exception object.

+

Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown.

+ +

Implements tbb::tbb_exception.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00087.png b/doc/html/a00087.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2e3fe83eab54ed65eb8ecc80475c8fdaf8016c GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0vp^KY+M{gBeKv)x8GdNCfzVxc>kDAIN<1=4)yHp$R}1 z7#}!rfVK0EJdn##666=m08|75S5Ji)F)%Rud%8G=R4~4sd;8L6EglE)!ey2J&F^Vx zbUgq6`NG{LhqZLQQW{&Loj49Ev4n z^JaOjTfN)fS@f3Gzjyydb62e@|I|{k<>b;eO<9p$W}#Q5D+6rwQmSH}?l(|hwaWZc zN5%J*N0V>&cTZorJL2Qp*afSql+W*drMXk~#$$WseY3CbUT?Jee-F@jqxZIVj)sQL zKfVUYu|_yyZ3Ty-1j_?cI|i|hTK|4Zm~Pj)S9ROOT>D+5>;W-7z64Hj_6;rF%n^r< zGU_~h#4xR(kimP0MT2UL%mE=(>3PdCXB|^AQBwL=P$($qy<3l+-b1I40#4RfzO9xnjL$V)t{u2;_2Z=xN2Qa`XU^_8p&GOIQDEwd zV@4~xzUt&_tyTz{R+%n1(Z2BT>UpcrKKmFSbw0~T#Y6A&IVGj~N4_851$Q6cCNHk9 z?|=FJ|A3lAh8GH)7{+x^q;GX&c!Zs-^c$z%l%(zpUL-b>k_lq?%_4xR>^a1{Jd)Y+8-(X>pPyWziT`1oy`Wv z;;2>Me%usz`k?RKN2}HB8mDK-s4qXTKke%j!_|wE>iXvMPAreHTXxLCLC-svVSC}h z$9j?~PIYo`2fnZ*IVw4;ps7@;X_k@aI|j)QXl8NGr}+@A9BeibmgF?hQAxvX + + + + + +tbb::mutex Class Reference + + + + + + + + +
+ +

Wrapper around the platform's native lock. + More...

+ +

#include <mutex.h>

+
+Inheritance diagram for tbb::mutex:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 The scoped locking pattern. More...
 
+ + + + + + + + +

+Public Types

enum  state_t { INITIALIZED =0x1234, +DESTROYED =0x789A, +HELD =0x56CD + }
 
+typedef LPCRITICAL_SECTION native_handle_type
 Return native_handle.
 
+typedef pthread_mutex_t * native_handle_type
 
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

mutex ()
 Construct unacquired mutex.
 
+void lock ()
 Acquire lock.
 
bool try_lock ()
 Try acquiring lock (non-blocking) More...
 
+void unlock ()
 Release lock.
 
+native_handle_type native_handle ()
 
+void set_state (state_t to)
 Set the internal state.
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = false
 
+static const bool is_recursive_mutex = false
 
+static const bool is_fair_mutex = false
 
+ + + +

+Friends

+class scoped_lock
 
+

Detailed Description

+

Wrapper around the platform's native lock.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool tbb::mutex::try_lock ()
+
+inline
+
+ +

Try acquiring lock (non-blocking)

+

Return true if lock acquired; false otherwise.

+ +

References tbb::aligned_space< T, N >::begin().

+ +

Referenced by tbb::mutex::scoped_lock::try_acquire().

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00088.png b/doc/html/a00088.png new file mode 100644 index 0000000000000000000000000000000000000000..5fdf55b651bc5c164a1cb34b69cc3c780cc1b9ec GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|=%$ba4!+V0=6G<+;@cJTCo9y*~fTuhE<^ ziP!7u(>jZFRS`nRPafI$vwP-Ej)X~1<_l(|i5< zy5rv5Q$zmvb8g+@%6+*#eb?FPMQ`p*%PZe~e8QQO%#*%h|9?KH>AMoJOY>NGZU57E zI?Ls@a?V|Aw(;!cZT6Aji8JP|JhmibRsPLj>&u6iyg7ZVdRy;tokg*gx0jhNUmRIf zudfp6`7-ak@3eOI;3<#zZREK2{`ccr>$B}*>xs3Qw)sb0eA%`vU$A-l%NO6K)rDm& z-&5ME$9W^NRb};ypDTRgtxSHO4Dh`r9JM4avS*j&EsnQOU);Mj|LF_A`@bz`WnJP9 z-R`w^?y6}1dHLSo^RC9)&Rw zT_*WmEdRX6e-hsh510O!7~MsaN-~{Rs8lMocui7QTbP!{%>%#3^fu)N% z=9cs=ERk5q&@Awg<%5fh$N^!&Kn8yo7e*UFK~@3+ALEs>(#)778tR=i8q`5}pGHa1 zo?muz9=S`)Ix*f$`dQ*Ty>e3Sw8~>kOJDBXe{TBvQ~!!wrhi=?T@|_S-s&6AI3Ikj z`TrvA!$*G$>3_~oCpQ%3Aw2D>x*#al#ospdzWQ0)$kE#>`Gzshs^`dtk5 m?E+j6I$?NX%dDBa2kf7lG)sMvG?xG-D+W(jKbLh*2~7Z*`8Xi} literal 0 HcmV?d00001 diff --git a/doc/html/a00089.html b/doc/html/a00089.html new file mode 100644 index 0000000..fda5f68 --- /dev/null +++ b/doc/html/a00089.html @@ -0,0 +1,106 @@ + + + + + + +tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Struct Reference + + + + + + + +
+ +
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Struct Reference
+
+
+
+Inheritance diagram for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

node (const Key &key)
 
node (const Key &key, const T &t)
 
node (const Key &key, T &&t)
 
node (value_type &&i)
 
+template<typename... Args>
 node (Args &&...args)
 
node (value_type &i)
 
node (const value_type &i)
 
+void * operator new (size_t, node_allocator_type &a)
 
+void operator delete (void *ptr, node_allocator_type &a)
 
+ + + +

+Public Attributes

+value_type item
 
+
The documentation for this struct was generated from the following file:
    +
  • concurrent_hash_map.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00089.png b/doc/html/a00089.png new file mode 100644 index 0000000000000000000000000000000000000000..b91437953953383d1bdd13d2f918fcb240b393eb GIT binary patch literal 1052 zcmeAS@N?(olHy`uVBq!ia0y~yU|bDk2XHV0$q8>)83HMZ0G|-o|Ns93nJ?aaE$u%v z0VD^)2M!!y?YtuoWO9@Q`2{lo6@kFjQz1qS49u%NT^vIy7~jr~t=eqG!{%;Y`+fi8 z$pXxu)*|msAV#b?~oO$ypVbTuJ}%&VT*X zEU)(V1I6o#yEf7J^s{5~>dZk#i^qyI&?a%1&#gTXQqGq4|^4X$Sc#ln- zdDY$%zJamKw=dpazV=0SdbHbX?{^paOv3D?c5qdG6}aoQifLo}(<$2jnX=R0#%yI| zT9X*o^IFR6#{K!bZWX7kw$O9C`pB+uE5CWkR?&OR;dLFWe(X@XsrqiW)Qxk$u1)Q~ zEH_opr+01U%wHz!*{YX`UAgyf?;a_ZCH3p{^lv5fepkl87tDtFHUb9Chb3%!*{e?bh}L|6lvVB$YsHrq%RM>% z^{2bDV=v0`-w}P`S#hT$+gtg?g$3XFTYjEeH|=`XbcOV)IT4rhS6J=% ztG?(@_~%#UVSjgT+_PM};rGOK48Syuz#j@y)27Xs89Vns!}Cn`BX(C(-vP5SgQu&X J%Q~loCICr^ + + + + + +tbb::null_mutex Class Reference + + + + + + + +
+ +
+
tbb::null_mutex Class Reference
+
+
+ +

A mutex which does nothing. + More...

+ +

#include <null_mutex.h>

+
+Inheritance diagram for tbb::null_mutex:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 Represents acquisition of a mutex. More...
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = false
 
+static const bool is_recursive_mutex = true
 
+static const bool is_fair_mutex = true
 
+

Detailed Description

+

A mutex which does nothing.

+

A null_mutex does no operation and simulates success.

+

The documentation for this class was generated from the following file:
    +
  • null_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00090.png b/doc/html/a00090.png new file mode 100644 index 0000000000000000000000000000000000000000..b72b3103da6961e7e331dd83e54bf97960852cd0 GIT binary patch literal 704 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|{n1ba4!+V0=6G^`%t?Jg(tsb8f!>e~evw zdYquU&HOftybEf)vA)9plG4gp6DK{1XVmhXC$eDD6Hn(0-+#oX*R`TkO`XP+ca#yCr`T>Z8TK)ar@ku3peND?=o!cGcxY4X-W4DTI zko}qB*(z^eOzC;o`eSR4*Cl^#2i234nL;MnWHOl=?`~lDw>ys^{6eTh{`T$(ajYee z_OQK7bzsz6bV9vB-PMiJM$?Gvf#<|P2LG-eri!2xkpq*J7BkEfk!1a_%oYCfmb)S+UHfdo^!Bmp+^U}af?xjaWO>mzkM+YW zyO_nM8DVR6GXhV=-|Km`?smvsffB=iZr53V1pO7wcxCZ?n{>lQutOIB9Sg)I^&4l; c{CV9z{$F$O?a4>=fys@*)78&qol`;+0BZ(FfB*mh literal 0 HcmV?d00001 diff --git a/doc/html/a00091.html b/doc/html/a00091.html new file mode 100644 index 0000000..bb5b134 --- /dev/null +++ b/doc/html/a00091.html @@ -0,0 +1,95 @@ + + + + + + +tbb::null_rw_mutex Class Reference + + + + + + + +
+ +
+
tbb::null_rw_mutex Class Reference
+
+
+ +

A rw mutex which does nothing. + More...

+ +

#include <null_rw_mutex.h>

+
+Inheritance diagram for tbb::null_rw_mutex:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 Represents acquisition of a mutex. More...
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = true
 
+static const bool is_recursive_mutex = true
 
+static const bool is_fair_mutex = true
 
+

Detailed Description

+

A rw mutex which does nothing.

+

A null_rw_mutex is a rw mutex that does nothing and simulates successful operation.

+

The documentation for this class was generated from the following file:
    +
  • null_rw_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00091.png b/doc/html/a00091.png new file mode 100644 index 0000000000000000000000000000000000000000..1ddf07110ee986746c8aac255d38381a067a83e9 GIT binary patch literal 724 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|>r2ba4!+V0=6Gc2Tndk4t}=(dPgEkE`CP zX`Rrrtux>h)7I3R$2T3(PD=|HQ1kpJx?s{1Pev`zd0RMt$^92z?0tD}V{dA%&Hwvf ze_UNKsq3}C3f*Xv%pV_k`ag#C$=;rJ{BEA?q?tatJ5Ro`m!ETfqsf%Ku8*PjciriI zdS$WDi;SrWv$t=tj|@+oF?Z#$B^j&aZ$?{R&If+0`W%+{5(@$S~tNT|YWBHy^ z$K@<<);LWHef4vN&wMMB+b08jZ!zlzt=Dn8E0gO`ZMkdfH+Rcj7r)o_>6yOlTot|a zn%mX2?EU>Kt2e(oH;*s$?$MjgtF%4+S95Gp*;@6!TF3MG3yl{u?pB6sX~L4*yAIC0;JyV``#ZR9~)!hmc9bteLS64E5`z4~UkCUby{MX-PPvti^iAD#?I` zZjDEr4?G0}8T`9Cm@0x?L=H?=TEs9bse=q4c zr@{8pt3vmMNiL_=C3EFj8yWOp>{&efXtHh9>;-d=)l5FM{m&eRJxk8B?foy);8)MD z^eae_dBqoL%UdpMxuf#9BkG=>m>=BpYSnF(8^sGwcl58`#V~)pJ*#ZDcWmUYUWVsd lAUDGt_dS2l%$fCn86I^smp_ + + + + + +tbb::flow::interface10::null_type Struct Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::null_type Struct Reference
+
+
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00093.html b/doc/html/a00093.html new file mode 100644 index 0000000..af41953 --- /dev/null +++ b/doc/html/a00093.html @@ -0,0 +1,126 @@ + + + + + + +tbb::flow::interface10::opencl_async_msg< T, Factory > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_async_msg< T, Factory > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_async_msg< T, Factory >:
+
+
+ + +tbb::flow::interface10::async_msg< T > + +
+ + + + +

+Public Types

+typedef T value_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

opencl_async_msg (const T &data)
 
opencl_async_msg (const T &data, cl_event event)
 
+T & data (bool wait=true)
 
+const T & data (bool wait=true) const
 
opencl_async_msg (const opencl_async_msg &dmsg)
 
opencl_async_msg (opencl_async_msg &&dmsg)
 
+opencl_async_msgoperator= (const opencl_async_msg &dmsg)
 
+cl_event const * get_event () const
 
+void set_event (cl_event e) const
 
+void clear_event () const
 
+template<typename Callback >
void register_callback (Callback c) const
 
operator T & ()
 
operator const T & () const
 
+ + + +

+Protected Member Functions

+void finalize () const __TBB_override
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00093.png b/doc/html/a00093.png new file mode 100644 index 0000000000000000000000000000000000000000..b1afd1d4d2d4dbdd59b2e7feda962fce669fb01b GIT binary patch literal 1132 zcmeAS@N?(olHy`uVBq!ia0y~yU~~hr12~w0WY9;Q4?s#Hz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-ope`2kYKmUQk9pbs&1ZK+J;_15uJgP4te!V z61nzT;&hemykFlQNxhlzaAn`5C7s*)igFY@^m-J(c-H+dj@V?~D z#lH3aZ-&LJ|8E$UhtHOI<`~QC{^Q<>*->%Nex^>S?=0+pdTNzglkIPL_R^zuHv?DtjIOH!qmBWPe!FlqDO47OS*Ql~C1Ob40^4 z@ved1=}k+frA9I_{V4g%u!KR$tA`=*?;jQSh6O^(4k6}UCj}Lj9pU)Ers~qL0VopD zDX6gK2!}ve5(|g6Aydm#2}WT2FeIwFQ7XNUF&JgZNowguJcYNPpNy;*ef+|J zp?O{6p84;;-9C4H-^r>sTQ}O31h4nacK^G5YtCnzduMZ{vkmRe$e%uUzm5Om+oQL> zv1c#4yu#|hjrTX^zB$3zW1h$Te*3G1U$1Su_iOLddr9uwo>upib*AUrSeQr%cjXI;G(sv*In6v|ZI44Zxy-!PC{xWt~$(69D_O9<2ZX literal 0 HcmV?d00001 diff --git a/doc/html/a00094.html b/doc/html/a00094.html new file mode 100644 index 0000000..e84d401 --- /dev/null +++ b/doc/html/a00094.html @@ -0,0 +1,146 @@ + + + + + + +tbb::flow::interface10::opencl_buffer< T, Factory > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_buffer< T, Factory > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_buffer< T, Factory >:
+
+
+ + +tbb::flow::interface10::opencl_subbuffer< T, Factory > + +
+ + + + + + + + + + + +

+Public Types

+typedef cl_mem native_object_type
 
+typedef opencl_buffer memory_object_type
 
+typedef Factory opencl_factory_type
 
+template<access_type a>
using iterator = T *
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<access_type a>
iterator< a > access () const
 
+T * data () const
 
+template<access_type a = read_write>
iterator< a > begin () const
 
+template<access_type a = read_write>
iterator< a > end () const
 
+size_t size () const
 
+T & operator[] (ptrdiff_t k)
 
opencl_buffer (size_t size)
 
opencl_buffer (Factory &f, size_t size)
 
+cl_mem native_object () const
 
+const opencl_buffermemory_object () const
 
+void send (opencl_device device, opencl_async_msg< opencl_buffer, Factory > &dependency) const
 
+void receive (const opencl_async_msg< opencl_buffer, Factory > &dependency) const
 
+opencl_subbuffer< T, Factory > subbuffer (size_t index, size_t size) const
 
+ + + + + + + + + +

+Friends

+template<typename >
class opencl_factory
 
+template<typename , typename >
class opencl_subbuffer
 
+bool operator== (const opencl_buffer< T, Factory > &lhs, const opencl_buffer< T, Factory > &rhs)
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00094.png b/doc/html/a00094.png new file mode 100644 index 0000000000000000000000000000000000000000..c47bbb970103e06d50b5d3bb3d4599ee4f735add GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0y~yV6+9Y12~w0WK2ZRd>|ze;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z@p{p;uuoF_;&8wqSsa&uG6=r|N7To zBV6y9@Wx_Gx?dH4W|{11p#`Zd^_gq824$~Rbz#3+mtQJGO(JSwH@y=R4hoZKvn;|4!|wu78)Fr(BlGpSdJG zHsy z=goh=cXQY8JFz$KkJ9(PFec}=bARs`FV*R~mj3nX$-RN!*L1H~6nn+?{xP=M_g7T+ zoqN0MdG$K|)N7{S5@!iW^?~@JmwV?&5ASgb*m0w{wP{|eMxQEOhD_<}^34Oz`Nvnz>Qq;C#4VoFS zIHgSbS4q`n6W{r(*JsXJc3yO{%2bt?xuUk7r&hi23<`7gp9Hjh(v+)y>(Ac*di_J@ zS>B%WP4U0AJh`^mWIPvEIr%!JNaDkr--rHx`p7)#%=fs8^)Emv=ack=B_7#x%-1e^ zv3FbT9DUEQ_ZO@4UVq%a&9i&Ivu?5M;ph8zILwmm5ilvOza4O+kiBZsmvGTG zbTD o_l&fC;d|L+>axsP_paBMR6EYNzjoD1U`fK@>FVdQ&MBb@0E;GG-v9sr literal 0 HcmV?d00001 diff --git a/doc/html/a00095.html b/doc/html/a00095.html new file mode 100644 index 0000000..19d40eb --- /dev/null +++ b/doc/html/a00095.html @@ -0,0 +1,137 @@ + + + + + + +tbb::flow::interface10::opencl_buffer_impl< Factory > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_buffer_impl< Factory > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_buffer_impl< Factory >:
+
+
+ + +tbb::flow::interface10::opencl_memory< Factory > + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

opencl_buffer_impl (size_t size, Factory &f)
 
opencl_buffer_impl (cl_mem m, size_t index, size_t size, Factory &f)
 
+size_t size () const
 
+void map_memory (opencl_device device, opencl_async_msg< void *, Factory > &dmsg) __TBB_override
 
- Public Member Functions inherited from tbb::flow::interface10::opencl_memory< Factory >
opencl_memory (Factory &f)
 
+cl_mem get_cl_mem () const
 
+void * get_host_ptr ()
 
+Factory * factory () const
 
+opencl_async_msg< void *, Factory > receive (const cl_event *e)
 
+opencl_async_msg< void *, Factory > send (opencl_device device, const cl_event *e)
 
+ + + + +

+Friends

+template<typename , typename >
class opencl_buffer
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from tbb::flow::interface10::opencl_memory< Factory >
+cl_mem my_cl_mem
 
+tbb::atomic
+< opencl_device::device_id_type > 
my_curr_device_id
 
+void * my_host_ptr
 
+Factory * my_factory
 
+tbb::spin_mutex my_sending_lock
 
+bool my_sending_event_present
 
+cl_event my_sending_event
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00095.png b/doc/html/a00095.png new file mode 100644 index 0000000000000000000000000000000000000000..46c39ab38d17fab5ec03b1f82d2eae1e036cda86 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yU^D}=12~w0#ZyXjmX4>ot&El3;_9Sm6uEMldIo7|G53_^4e*ovtK9deYt0?^Xu+k`O-JvygC1D)7q^!zP;QX z{eNZdmmm8|=T*kB&sm>Te#O0JzhBVz&zp0*AMCiovu1kR+P(7Wa>`|?-7Ai##on=< zIV&(Q_w$*}h4)3f|7E@T^;+-LnWu`fV!QKxP4D|}DEl_iK7ID->z|BVOITj*wh#ES z^=$Vl52;elcj_Bt(>HHg$-bNax9YZSZ{(uqK2N$We9d-A`Hh@J`Gb3V-)b<{ZTsq> zXJ$7!_xkG4D|K<-WWRmqFF#ba>GfLfwAq^B_vRfl*=M~(cRBP-mY7) zjrT@c_U#*<$GbAWy}nj#otl3xPd%4+(@neY=l!$pwxR z{+!dBbXKNDPHSMW3yo*cZ0Hb@b_j`&Kgp}G;s~3-)#j)o<_^t`jC&TgunB}EF>`2d zWNevwg8>+k3_w#FHUO1Jbn+^!0V<|U`kH#O_R=XKnoC_=7(E!zpxdLh?fBBWGu^6r zx9yc!ZWG36aVyTITJXRUJz3kcKbFloc=^^=Ri?lBdh5b(%;OiHcC3TJ=53*0RBfkj zTDsN=iEYp8S?~yp3CD zn&0@v(LOh(R$_AQ?CFn#j5k>3GhYAx_)PMVbvf^S=X zv_6-X8q8lN|JXYxHjVzt2+8D%Pk_iuKs&rOp)uvKqb9iLf4{9?37u1bK!7|R!SHEW0NyCQapz;c7Z M)78&qol`;+09MB@5dZ)H literal 0 HcmV?d00001 diff --git a/doc/html/a00096.html b/doc/html/a00096.html new file mode 100644 index 0000000..fbaacc7 --- /dev/null +++ b/doc/html/a00096.html @@ -0,0 +1,185 @@ + + + + + + +tbb::flow::interface10::opencl_device Class Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_device Class Reference
+
+
+ + + + + + +

+Public Types

enum  : device_id_type { unknown = device_id_type( -2 ), +host = device_id_type( -1 ) + }
 
+typedef size_t device_id_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

opencl_device (cl_device_id d_id)
 
opencl_device (cl_device_id cl_d_id, device_id_type device_id)
 
+std::string platform_profile () const
 
+std::string platform_version () const
 
+std::string platform_name () const
 
+std::string platform_vendor () const
 
+std::string platform_extensions () const
 
+template<typename T >
void info (cl_device_info i, T &t) const
 
+std::string version () const
 
+int major_version () const
 
+int minor_version () const
 
+bool out_of_order_exec_mode_on_host_present () const
 
+bool out_of_order_exec_mode_on_device_present () const
 
+std::array< size_t, 3 > max_work_item_sizes () const
 
+size_t max_work_group_size () const
 
+bool built_in_kernel_available (const std::string &k) const
 
+std::string built_in_kernels () const
 
+std::string name () const
 
+cl_bool available () const
 
+cl_bool compiler_available () const
 
+cl_bool linker_available () const
 
+bool extension_available (const std::string &ext) const
 
+std::string extensions () const
 
+cl_device_type type () const
 
+std::string vendor () const
 
+cl_uint address_bits () const
 
+cl_device_id device_id () const
 
+cl_command_queue command_queue () const
 
+void set_command_queue (cl_command_queue cmd_queue)
 
+ + + + + + + + + + + + + + + +

+Friends

+template<typename DeviceFilter >
class opencl_factory
 
+template<typename Factory >
class opencl_memory
 
+template<typename Factory >
class opencl_program
 
+template<typename T , typename Factory >
class opencl_buffer
 
+bool operator== (opencl_device d1, opencl_device d2)
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00097.html b/doc/html/a00097.html new file mode 100644 index 0000000..3c161a9 --- /dev/null +++ b/doc/html/a00097.html @@ -0,0 +1,107 @@ + + + + + + +tbb::flow::interface10::opencl_device_list Class Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_device_list Class Reference
+
+
+ + + + + + + + +

+Public Types

+typedef container_type::iterator iterator
 
+typedef
+container_type::const_iterator 
const_iterator
 
+typedef container_type::size_type size_type
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

opencl_device_list (std::initializer_list< opencl_device > il)
 
+void add (opencl_device d)
 
+size_type size () const
 
+bool empty () const
 
+iterator begin ()
 
+iterator end ()
 
+const_iterator begin () const
 
+const_iterator end () const
 
+const_iterator cbegin () const
 
+const_iterator cend () const
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00098.html b/doc/html/a00098.html new file mode 100644 index 0000000..b953da7 --- /dev/null +++ b/doc/html/a00098.html @@ -0,0 +1,123 @@ + + + + + + +tbb::flow::interface10::opencl_factory< DeviceFilter > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_factory< DeviceFilter > Class Template Reference
+
+
+ + + + +

+Classes

class  kernel
 
+ + + + + + + + + + +

+Public Types

+template<typename T >
using async_msg_type = opencl_async_msg< T, opencl_factory< DeviceFilter >>
 
+typedef opencl_device device_type
 
+typedef kernel kernel_type
 
+typedef opencl_range range_type
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

+bool init (const opencl_device_list &device_list)
 
+template<typename... Args>
void send_kernel (opencl_device device, const kernel_type &kernel, const range_type &work_size, Args &...args)
 
+template<typename T , typename... Rest>
void send_data (opencl_device device, T &t, Rest &...args)
 
+void send_data (opencl_device)
 
+template<typename FinalizeFn , typename... Args>
void finalize (opencl_device device, FinalizeFn fn, Args &...args)
 
+const opencl_device_listdevices ()
 
+ + + + + + + + + + +

+Friends

+template<typename Factory >
class opencl_program
 
+template<typename Factory >
class opencl_buffer_impl
 
+template<typename Factory >
class opencl_memory
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00099.html b/doc/html/a00099.html new file mode 100644 index 0000000..be12e29 --- /dev/null +++ b/doc/html/a00099.html @@ -0,0 +1,119 @@ + + + + + + +tbb::flow::interface10::opencl_memory< Factory > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_memory< Factory > Class Template Referenceabstract
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_memory< Factory >:
+
+
+ + +tbb::flow::interface10::opencl_buffer_impl< Factory > + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

opencl_memory (Factory &f)
 
+cl_mem get_cl_mem () const
 
+void * get_host_ptr ()
 
+Factory * factory () const
 
+opencl_async_msg< void *, Factory > receive (const cl_event *e)
 
+opencl_async_msg< void *, Factory > send (opencl_device device, const cl_event *e)
 
+virtual void map_memory (opencl_device, opencl_async_msg< void *, Factory > &)=0
 
+ + + + + + + + + + + + + + + +

+Protected Attributes

+cl_mem my_cl_mem
 
+tbb::atomic
+< opencl_device::device_id_type > 
my_curr_device_id
 
+void * my_host_ptr
 
+Factory * my_factory
 
+tbb::spin_mutex my_sending_lock
 
+bool my_sending_event_present
 
+cl_event my_sending_event
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00099.png b/doc/html/a00099.png new file mode 100644 index 0000000000000000000000000000000000000000..ccd505daffccbdc5b64b60d7a6df1e19730ac2c9 GIT binary patch literal 1158 zcmeAS@N?(olHy`uVBq!ia0y~yU^D}=12~w0U5Ie*1ph z9md-S*O}`}nGrA#~6 z*%Pkm2mU_4`0e%;wMu3U{^3c?9NHThTc+M%IOLVXkZ8LB7$vKw1TiuF2&rXU!k`2c z46LnHHE&n|jGhqwtdqP7%Z{*p;8it2iLfvXIoc zcf*q=FWDe8TcvgC4HeBbN7OtMO>;ey_-nx&{s~JWm-o#} zs|ogdp7`#w^2wO**S>Py-duS2(jFzxPg~Z0UUqf*jijF7YA?3^nJ6CU3~UwcI8dys>ZWNCjEZrJE5Or_iClgYb@{BH@;2ZyfKr#I_9x= zPHhy!?FYZPX0K#;tho13TJhgoT}ijk@0QP1o;11le&@E&H^ncSJ^ifIJ6$~2eRAK` z#NFu^(=JWje#SCwJ>SdTJ87{Mk*}4upEZ4@b!*?u+t0KfKi#%-(z%xx-&{ZYyzE5S zoV#APxKp;*u9^FI^U6u@cGi6<70uPx&WwJsMRrchbQ`x(IyU+j2H>NGg zH`=9Q`H5{`^V#{cFRFPyx0?CO5~yf?AV&1qZnzqiz3N&N^DpLuS`J!jMvrQMg$9GC LtDnm{r-UW|>RLHH literal 0 HcmV?d00001 diff --git a/doc/html/a00100.html b/doc/html/a00100.html new file mode 100644 index 0000000..ff957a3 --- /dev/null +++ b/doc/html/a00100.html @@ -0,0 +1,56 @@ + + + + + + +tbb::flow::interface10::opencl_node< Args > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::opencl_node< Args > Class Template Reference
+
+
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00101.html b/doc/html/a00101.html new file mode 100644 index 0000000..e477903 --- /dev/null +++ b/doc/html/a00101.html @@ -0,0 +1,86 @@ + + + + + + +tbb::flow::interface10::opencl_node< tuple< Ports...> > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_node< tuple< Ports...> > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_node< tuple< Ports...> >:
+
+
+ + +tbb::flow::interface10::opencl_node< tuple< Ports...>, queueing, opencl_info::default_opencl_factory > + +
+ + + + +

+Public Types

+typedef base_type::kernel_type kernel_type
 
+ + + + + + +

+Public Member Functions

opencl_node (graph &g, const kernel_type &kernel)
 
+template<typename DeviceSelector >
 opencl_node (graph &g, const kernel_type &kernel, DeviceSelector d)
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00101.png b/doc/html/a00101.png new file mode 100644 index 0000000000000000000000000000000000000000..4a6091550558b3a238fa9118cd2ab91422910b63 GIT binary patch literal 1611 zcmc(fdpOg39LIlgqAYgK;V31#EOHIaD0K1Aj7DzlXlCScFeA62xl~J9J))61k4x)d zdvK6x#N47NhN8L5goMpf9Aj>4XU^rRKhFQ>`#j&z=k@tK-#9PHcxKn^M6bKB%)@#tcef-LPich`r^cZ<))V%PG|V-rk~vIW5s%rJ4Vrh{!LoAA ztmLYtc;y6|b})WDWl*aH8W4r0upH8E5Hn?My zqU+^UO;l!4L3L-s@Vto19fZ3P8=+>1&R;`yFvDTpJ-2WUhXlu5xRfGY>uP~;+SUnk z&;NdnpHJ8lcu3Saene&nBg~Ia2=BK^-T{mN)k@LOoGc`UFa}yORH6yp&!Hy=vKyG zyi+GYIJ9dfder5kcJqq32Q%(C9oF-HLx0?;f_GFGrEkxu*JNfXOm%x|y+=WoVw@J! zVX;>e@-$4tdhw-|nA(se`j`|^`m%H>w`!-cSdXjL(J+Ro76`6C9DZvUGd3{MYJ;6J zPIhypTCv6$g2-U42vS4;>+w{h<*4x4)}(Cx_Rta};__umF2fYtgPc)q%FOL?ri)Rl zmKIEP%_&;Ex-N--lsAmHuYE=r7P!93w~J79zO-+e&oue)wu<{qogX%v#TmHtF{J_2 zn|91Qf1ZrQT+>i6Gv*nTC2Edmy3Z0hG;<-Z*1ONnhJM360*r#sE^VY~WzC`Qb|UVztv?E_ zr9v6A@Datnh``3UHcyeSJ3}J{o#@b!nOPM5A140C(RIU547)Do1bVR< zhFv=Vh4E}GpwI%G^~(izv_PAay>tP2liPSX6QG|Lz;Ff>e19DI&KGEsXUU>$Ib;p3 z&Bp(Vy?VuJ?v8r2Y&RMe*d-hI>gK?ULpn0d_=>&s;g~($Nv9&crvj)b)x%H8oUhMA(Uz$io`V;;(?G+QQb97Uv>B z(W4bO(O}woMo{A*9QW)?1d+jvZU$q`laUueqtkKSj2GvH{B{BKAiK=GkW5N3ij~{I zoG`V(w^}zXCo)q!b3+rbiwlq@FG&dg7A9{r^&s?{y#r%Z;9|wnx37o(QIT1!L<-(u@@EImdANjYV$`h1k?>*7fGv2KouWZZ8o{Wj{)G{`#z)8S-DSnFLxNXz+s6+G-{G4Xe0${{m--Ep z<5halEFncFZ~TtSJ7X?aZ?M)X};bH{*_dAqUnVPZ9Hv zbQr}YCILRrVOutEmKIwY$X~_!Mz_C_7pDKO%0VmOr91*{1l99W_VWV>duO`}Ti + + + + + +tbb::flow::interface10::opencl_node< tuple< Ports...>, JP > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_node< tuple< Ports...>, JP > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >:
+
+
+ + +tbb::flow::interface10::opencl_node< tuple< Ports...>, JP, opencl_info::default_opencl_factory > + +
+ + + + +

+Public Types

+typedef base_type::kernel_type kernel_type
 
+ + + + + + +

+Public Member Functions

opencl_node (graph &g, const kernel_type &kernel)
 
+template<typename DeviceSelector >
 opencl_node (graph &g, const kernel_type &kernel, DeviceSelector d)
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00102.png b/doc/html/a00102.png new file mode 100644 index 0000000000000000000000000000000000000000..0efca40bd406be819b4995adf281ada7f76b93ca GIT binary patch literal 1585 zcmcgsX;hL~82-#-xm8nXCCU@|J-x#eV+Ti&pqe;@jN%l-PK{Ms*WlE z09(9z4B{w3cAI=<5Rkhq}`Le(o8^z2mB&h z83$hnW`+3lK&Y`BZITfT4@TOmGdFW`)T#pbz;p#ICy^@-4+4h`$#WF_dIcMnC_j#iqq@2d}&TT;Nyp3eZ$?{XC`Xw zeKsr3=6mGv)~!buA{RAdN$dF|qM&T4V>GbYVy(PA}|vOGeMOP1ihk2kMK zqcDlZ>B5M9A&n%Nj55!e8w+jUuZiRu$FBCVEW<2Ea#{lT6Vs+&)jPsmxQJs=xJ9`T;nL~lX37Ab$;9f(Du*8 z;NPDrb zy_;TOJ*$wOLpJx$#4!(P_{FV^Hld>HW_ZM+#nU#aGB{Es3EhcHd>P4`Gd6l-7kR&> zdiT&&1xTpl#eOMwq%x_Xele@Gq~8CKOtwHAu=0`y^1}!?ZZvP|UE?Y$cmXB9YT;2o z%KB-IS@>~W3--}Dir&B;Z}JCB!d2rH92;*3dI9Pu z5-^Zue&8Fu4oyj6I2hg@Ty`0BQ&}-MqaMc`(4H`CqI>?u#nfM9jYE%M3nmk zj8*w;Buq%nW85A1JfWYw;(#puH%Y@O|0Ic8Nm=Ai=czjwaK?)`RGcequ%Ax5XA85q z+7y3kDdL7X>Xm)D4JQ?e@T~AIsRHNwh!sWF9`&tjGP@Txu{Fc}3u{|^my*iVPYT4B z3o|;(hC2H48P)~;U{n&UKPcbvV!Z literal 0 HcmV?d00001 diff --git a/doc/html/a00103.html b/doc/html/a00103.html new file mode 100644 index 0000000..67e93a6 --- /dev/null +++ b/doc/html/a00103.html @@ -0,0 +1,88 @@ + + + + + + +tbb::flow::interface10::opencl_node< tuple< Ports...>, JP, Factory > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_node< tuple< Ports...>, JP, Factory > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_node< tuple< Ports...>, JP, Factory >:
+
+
+ + + +
+ + + + +

+Public Types

+typedef base_type::kernel_type kernel_type
 
+ + + + + + + + +

+Public Member Functions

opencl_node (graph &g, const kernel_type &kernel)
 
opencl_node (graph &g, const kernel_type &kernel, Factory &f)
 
+template<typename DeviceSelector >
 opencl_node (graph &g, const kernel_type &kernel, DeviceSelector d, Factory &f)
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00103.png b/doc/html/a00103.png new file mode 100644 index 0000000000000000000000000000000000000000..b87ca5cc69f1fbd508430f3f463871194bb8e344 GIT binary patch literal 1284 zcmeAS@N?(olHy`uVBq!ia0y~yVC)9612~w0gC%yLKVCkO!=RTv+Smf zvr+$h#m+sSxMcONV@W27B@T~&Xg*W_?)NXEeyhyw$g@(x<*(KE`&gVQ{dw^2--%D= zDT~dGoGp8;QG8)cn&L^Tt?lprzI~+hBKz%~O&oVGUhVdqSeYo=@!IwHsr+}j`+OcV zTdpcR^Q2cZ`{Wk8^hln`bA1)N3nD6vo&M(tJq(PDdea$M!l3%HdRNTu-J5qR*BR?s z&HnZ%$vQ{fYkSnN$KYU!JcydqN^=|Ws zoVU4=ccS%|$!rbT_tC`p*MyU{#rtk-h)Ca>e^)N~`IM<;ZKj&3k#!6ApMCqc<*Vr{ z`Ol9wr3AmwXZn%SH)%`A zO^g#9jxs59cdi!Fd@ zM=6h~bd7G`h!|yqEH!r9D{j>1l zlV=UpaT_c4&52kky~#hx=K0Cc`o^Qy?d*4qcdwaS@X3Th`mD}8zp6jIeo+Vc_DM@k zmp^;S`SOL0f25<2l`bp)zIEO{POa^^f3D5BzJAxdb?J7#F>AUO725XN|5>@gHs#{1 zyF1h0Ywg-0AwGZqw6oLJPd$3;e*c{4KW9pRPiwvZ=*3x8`|J1euKzHI(v%aEy_dUl zc1eFk&YJ!^mv!$vUy+xxBki_i&NcSF^QE_Ua4f9k*k|yT_gk6l?!~Lc=Pp{ovDzU< zU+FdPi>tbS9D%8~cuRSD&B>&>W%G_29Jf?W5#%clS3R)RU%BbpvlYr>vIp`v&bS;a zBi}9+eRce{N$WD|T+<&68%{y!(sa>EA1( UjF_@zz#@ym)78&qol`;+0Mfi{#{d8T literal 0 HcmV?d00001 diff --git a/doc/html/a00104.html b/doc/html/a00104.html new file mode 100644 index 0000000..8566b9c --- /dev/null +++ b/doc/html/a00104.html @@ -0,0 +1,118 @@ + + + + + + +tbb::flow::interface10::opencl_program< Factory > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_program< Factory > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_program< Factory >:
+
+
+ + + +
+ + + + +

+Public Types

+typedef Factory::kernel_type kernel_type
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

opencl_program (Factory &factory, opencl_program_type type, const std::string &program_name)
 
opencl_program (Factory &factory, const char *program_name)
 
opencl_program (Factory &factory, const std::string &program_name)
 
opencl_program (opencl_program_type type, const std::string &program_name)
 
opencl_program (const char *program_name)
 
opencl_program (const std::string &program_name)
 
opencl_program (opencl_program_type type)
 
opencl_program (const opencl_program &src)
 
+kernel_type get_kernel (const std::string &k) const
 
+ + + + + + + +

+Friends

+template<typename DeviceFilter >
class opencl_factory
 
+template<typename DeviceFilter >
class opencl_factory< DeviceFilter >::kernel
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00104.png b/doc/html/a00104.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce2c236820443b396cd09c4c062ee66d1b7e022 GIT binary patch literal 871 zcmeAS@N?(olHy`uVBq!ia0y~yU{nLL12~w0WV4t?1CWvk@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+B`YrDl5B9J%gs- z&fazWlMGPgsgdu(8R>mbw{6Yq{r&vR70bPfp7)4lS*aAUZ~GuWl2v%`Y%LEaw*i3Z~}oC}Vh z@3&R7d2A%`z1v-op4TUnk3~UK9?!pa>62~vHBrqH+G$BQJXR?W_ z%Z!c=V-5!9f*w=Gl8tH&de>Mk9G%6m>&>iX(Z9k(4kb@~>3BD_ihIGqPY(jE8RDKO z|39@gh4JUtTNiA7`{ng}LP{;CZCUgAXrTQX&Ig^}O>D2(|J8l%f9`qi+1}sNb6)Js ztlLnpqkG!o_4`NL_C#kz?OuO*TYc*5yJ;ue;@I!Zp0?hhZtCn);&a35zVPcT%9O0$ z{Z??>{YlHd?0L6y>y-RuFN=Mjilp!Fx*T(M(>J|YX|tmlLT1eqyB1YB)$)~d_}84i znf5t8VeQeC74sLbe7X5cu-d_{Z%byLvoYT)Cg$L)`l@->w$0mi-{8;McWm9VFSqVz z+`4~H*y;0yxtUtUpQmZvyS!!Y{W23%v!MJhQ!}jUW;e`Y(7JW;i%tCL;&m%!eO-5D zzFpXNa8{_&O-UsY{^@cyXFb8dcD;$O0w$Gk!C zmhxZji&I|N9FSLZZd<6y7lpeL%b3WNpspGU_J}_4> Nc)I$ztaD0e0sy2Hm7M?p literal 0 HcmV?d00001 diff --git a/doc/html/a00105.html b/doc/html/a00105.html new file mode 100644 index 0000000..3bdda08 --- /dev/null +++ b/doc/html/a00105.html @@ -0,0 +1,84 @@ + + + + + + +tbb::flow::interface10::opencl_range Class Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_range Class Reference
+
+
+ + + + + + +

+Public Types

+typedef size_t range_index_type
 
+typedef std::array
+< range_index_type, 3 > 
nd_range_type
 
+ + + + + + + + +

+Public Member Functions

+template<typename G = std::initializer_list<int>, typename L = std::initializer_list<int>, typename = typename std::enable_if<!std::is_same<typename std::decay<G>::type, opencl_range>::value>::type>
 opencl_range (G &&global_work=std::initializer_list< int >({0}), L &&local_work=std::initializer_list< int >({0, 0, 0}))
 
+const nd_range_type & global_range () const
 
+const nd_range_type & local_range () const
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00106.html b/doc/html/a00106.html new file mode 100644 index 0000000..634c848 --- /dev/null +++ b/doc/html/a00106.html @@ -0,0 +1,135 @@ + + + + + + +tbb::flow::interface10::opencl_subbuffer< T, Factory > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::opencl_subbuffer< T, Factory > Class Template Reference
+
+
+
+Inheritance diagram for tbb::flow::interface10::opencl_subbuffer< T, Factory >:
+
+
+ + +tbb::flow::interface10::opencl_buffer< T, Factory > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

opencl_subbuffer (const opencl_buffer< T, Factory > &owner, size_t index, size_t size)
 
- Public Member Functions inherited from tbb::flow::interface10::opencl_buffer< T, Factory >
+template<access_type a>
iterator< a > access () const
 
+T * data () const
 
+template<access_type a = read_write>
iterator< a > begin () const
 
+template<access_type a = read_write>
iterator< a > end () const
 
+size_t size () const
 
+T & operator[] (ptrdiff_t k)
 
opencl_buffer (size_t size)
 
opencl_buffer (Factory &f, size_t size)
 
+cl_mem native_object () const
 
+const opencl_buffermemory_object () const
 
+void send (opencl_device device, opencl_async_msg< opencl_buffer, Factory > &dependency) const
 
+void receive (const opencl_async_msg< opencl_buffer, Factory > &dependency) const
 
+opencl_subbuffer< T, Factory > subbuffer (size_t index, size_t size) const
 
+ + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from tbb::flow::interface10::opencl_buffer< T, Factory >
+typedef cl_mem native_object_type
 
+typedef opencl_buffer memory_object_type
 
+typedef Factory opencl_factory_type
 
+template<access_type a>
using iterator = T *
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_opencl_node.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00106.png b/doc/html/a00106.png new file mode 100644 index 0000000000000000000000000000000000000000..98b15820ccac1b6236c910a19cb67b24f63929ef GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0y~yV6+9Y12~w0WK2ZRd>|ze;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z@qNy;uuoF_;&8?vL_ZCuG{;rpZZ__ zDdeY`qH?@P+AbsC^0_yrsXE-|h?}`A)64g=3F{FRPfgFNHA~bz166H3yR=?<28DR~ zPg+#;V(QQB_qIM>D!n0_ul%=`XVI2D8jm?AUCDm&BKO&m>z~%kPe`fjcdB%G|F__9 z)qYLSPg{=FU4EsyH{1I7&q*m?YpdSp?)|6#@XC4P_hoW-@}p{c2TP`r7{L+;_~I7v~;&7ajCl`a*W|tET<`RGRNZGvrRUmH+N7{Qcj)`8#`W zOf_9HZC+{Nx0L=@2eV$^zQ#NMo}!ulk3?3f`FHZRzFuDYlI4Q>a@*wNcZv<8bEX~R z+&tgQCEz zYLZAOP{WEz^Hf~FE;9GMJZ09h%qqPG{%hh6TnY=8unSzd9{z~AL-Qpg%h#sqKNy_6 zsu&7Yts7QMl5+_0}Klpc5s(yLwAP|K-)xJk4$D-+SVEmuGW<)6cf%x7v1# zw~I2`e~&V1{(JxA-j7-4mkQs7wyWSa9@(XWkvym@kOMfJ7T@V&=M z^EF@BzLk~Vk$+`x-@IsWBJ#tQh~Dp;Wybivxwn3M=(ffZ+w%VHw?+a14# T*_J#279$Lvu6{1-oD!M + + + + + +tbb::parallel_while< Body > Class Template Reference + + + + + + + +
+ +
+
tbb::parallel_while< Body > Class Template Reference
+
+
+ +

Parallel iteration over a stream, with optional addition of more work. + More...

+ +

#include <parallel_while.h>

+
+Inheritance diagram for tbb::parallel_while< Body >:
+
+
+ + + +
+ + + + + +

+Public Types

+typedef Body::argument_type value_type
 Type of items.
 
+ + + + + + + + + + + + + + +

+Public Member Functions

parallel_while ()
 Construct empty non-running parallel while.
 
~parallel_while ()
 Destructor cleans up data members before returning.
 
template<typename Stream >
void run (Stream &stream, const Body &body)
 Apply body.apply to each item in the stream. More...
 
void add (const value_type &item)
 Add a work item while running. More...
 
+

Detailed Description

+

template<typename Body>
+class tbb::parallel_while< Body >

+ +

Parallel iteration over a stream, with optional addition of more work.

+

The Body b has the requirement:
+ "b(v)"
+ "b.argument_type"
+ where v is an argument_type

+

Member Function Documentation

+ +
+
+
+template<typename Body >
+ + + + + + + + +
void tbb::parallel_while< Body >::add (const value_typeitem)
+
+ +

Add a work item while running.

+

Should be executed only by body.apply or a thread spawned therefrom.

+ +
+
+ +
+
+
+template<typename Body >
+
+template<typename Stream >
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_while< Body >::run (Stream & stream,
const Body & body 
)
+
+ +

Apply body.apply to each item in the stream.

+

A Stream s has the requirements
+ "S::value_type"
+ "s.pop_if_present(value) is convertible to bool

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • parallel_while.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00107.png b/doc/html/a00107.png new file mode 100644 index 0000000000000000000000000000000000000000..fc86480fb6f62f64fddf8d2c87db84e764fa7982 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^%YZn5gBeIJnfuQXNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~e)e>645?szJ2$tlMM1zNUVZYFzxjLm znwkz-?cOHrb1T46WS0BKuj0m=Kel>adco!6`6(#DYtnS4;7NN*I4`FZzkV5`y?>f~ z@KhboU;XP6{c@*=7%T}o7Zs}VGJn^LH1^LPza`FiS3mHc@!nL+^Z!-b8SPswnVzv* z|9v#)eqG+Wi|z;K+^M#obZW|J@#>$GW`|pMTE|Y>BQj&slcmoSX3gZ)XUN~naO}FV zLHv660z2m7MKw&%oedb}7Jd*q;QdgoVfrCo2L0CA3~^lMjC(}#m?|{yuzU#G!TDfm zfiS9qU59-^-eBxmcL1m&fvF<%=$uV&c^~*hH>* zOtIyxXAhU={M~=V`=-zIRcC##AG#LIHEFTv)mbwvzX+7}{ z@SfW8YvW;^LvIbTx399i!@oi!M6haxMD(E>m#og*y|t!#?OmN?UnJ86jrXRr7dvF9tea2Si{h`+JvsKfI zbKjL$_3eNArDw8V>oY(0#XS|T%Qs@b{>hf=Kg&6H(5PYm%5w3Zr)kUg s8~Zdcip&58jt_(W-u`^!%@@BiZzopr0Ov&@Q2+n{ literal 0 HcmV?d00001 diff --git a/doc/html/a00108.html b/doc/html/a00108.html new file mode 100644 index 0000000..3144199 --- /dev/null +++ b/doc/html/a00108.html @@ -0,0 +1,139 @@ + + + + + + +tbb::pipeline Class Reference + + + + + + + +
+ +
+
tbb::pipeline Class Reference
+
+
+ +

A processing pipeline that applies filters to items. + More...

+ +

#include <pipeline.h>

+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+__TBB_EXPORTED_METHOD pipeline ()
 Construct empty pipeline.
 
virtual __TBB_EXPORTED_METHOD ~pipeline ()
 
+void __TBB_EXPORTED_METHOD add_filter (filter &filter_)
 Add filter to end of pipeline.
 
+void __TBB_EXPORTED_METHOD run (size_t max_number_of_live_tokens)
 Run the pipeline to completion.
 
+void __TBB_EXPORTED_METHOD run (size_t max_number_of_live_tokens, tbb::task_group_context &context)
 Run the pipeline to completion with user-supplied context.
 
+void __TBB_EXPORTED_METHOD clear ()
 Remove all filters from the pipeline.
 
+ + + + + + + + + + + + + +

+Friends

+class internal::stage_task
 
+class internal::pipeline_root_task
 
+class filter
 
+class thread_bound_filter
 
+class internal::pipeline_cleaner
 
+class tbb::interface6::internal::pipeline_proxy
 
+

Detailed Description

+

A processing pipeline that applies filters to items.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual __TBB_EXPORTED_METHOD tbb::pipeline::~pipeline ()
+
+virtual
+
+

Though the current implementation declares the destructor virtual, do not rely on this detail. The virtualness is deprecated and may disappear in future versions of TBB.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • pipeline.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00109.html b/doc/html/a00109.html new file mode 100644 index 0000000..fe82e3c --- /dev/null +++ b/doc/html/a00109.html @@ -0,0 +1,73 @@ + + + + + + +tbb::pre_scan_tag Struct Reference + + + + + + + +
+ +
+
tbb::pre_scan_tag Struct Reference
+
+
+ +

Used to indicate that the initial scan is being performed. + More...

+ +

#include <parallel_scan.h>

+ + + + +

+Static Public Member Functions

+static bool is_final_scan ()
 
+

Detailed Description

+

Used to indicate that the initial scan is being performed.

+

The documentation for this struct was generated from the following file:
    +
  • parallel_scan.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00110.html b/doc/html/a00110.html new file mode 100644 index 0000000..7c8faeb --- /dev/null +++ b/doc/html/a00110.html @@ -0,0 +1,56 @@ + + + + + + +tbb::flow::interface10::internal::predecessor_cache< T, M > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::predecessor_cache< T, M > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00111.html b/doc/html/a00111.html new file mode 100644 index 0000000..f0044b4 --- /dev/null +++ b/doc/html/a00111.html @@ -0,0 +1,105 @@ + + + + + + +tbb::queuing_mutex Class Reference + + + + + + + + +
+ +

Queuing mutex with local-only spinning. + More...

+ +

#include <queuing_mutex.h>

+
+Inheritance diagram for tbb::queuing_mutex:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 The scoped locking pattern. More...
 
+ + + + + + +

+Public Member Functions

queuing_mutex ()
 Construct unacquired mutex.
 
+void __TBB_EXPORTED_METHOD internal_construct ()
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = false
 
+static const bool is_recursive_mutex = false
 
+static const bool is_fair_mutex = true
 
+

Detailed Description

+

Queuing mutex with local-only spinning.

+

The documentation for this class was generated from the following file:
    +
  • queuing_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00111.png b/doc/html/a00111.png new file mode 100644 index 0000000000000000000000000000000000000000..97f8b53bdb2fc94c669545ed9d635338907e3f57 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|?$Wba4!+V0=6G?WAS}9#{V~tK$3rd$0fU zWLUec?6zCko~x}YMI4>=hQ_;_3_QEmvuSxwyyBp$IVsFB{;~aox4zqDxKH1y__JT? z<8nvUo!R0me4|ZP{Qgj~{onE5-;yuC%`@MvqITFL%jlT@+{@)Y%yvDW&p&(ibe)d+ z_b7+z)vVhpqQ0rmENVMBQ_JU0K%MuzQ|4#Y>hvVn-xL#^+!OY3ny`^G1~;yjG> z<@0oXg4(6mfA}CRXzuvF-rCW4^3mIldd`n4i}kg%7TB;(-8-i*FZX4&qxRdiTvj3p zsiKo~f_2@}s$N`JBkug|lGF-q+xtDMOrsjEWtHTrYgBF+*sc4XXKL4bJ>ivI{@>3@*MIZat0&B#e6jE=+q+qg-O)+2 z8ovFwcg~j4X7%O1yh%Mj@8mXw*%(YaZNGCdQ$fssma6~NTqOm6WG|Gw$#9G1XjuNG zP0F`@^2I$C+NQ5wS8x11DQ!ym-OO6yXO~K+$4$Nx$7*tS(fgOX7_@JR{_1`IU+%)s zX3K9f4dyQoOV(Q7|KGq=(+zX_tl7I~MrQnFG_P)+;rcJ?E--;Ic)I$ztaD0e0suRY BTY3Nh literal 0 HcmV?d00001 diff --git a/doc/html/a00112.html b/doc/html/a00112.html new file mode 100644 index 0000000..7d4363f --- /dev/null +++ b/doc/html/a00112.html @@ -0,0 +1,110 @@ + + + + + + +tbb::queuing_rw_mutex Class Reference + + + + + + + +
+ +
+
tbb::queuing_rw_mutex Class Reference
+
+
+ +

Queuing reader-writer mutex with local-only spinning. + More...

+ +

#include <queuing_rw_mutex.h>

+
+Inheritance diagram for tbb::queuing_rw_mutex:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 The scoped locking pattern. More...
 
+ + + + + + + + + +

+Public Member Functions

queuing_rw_mutex ()
 Construct unacquired mutex.
 
~queuing_rw_mutex ()
 Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL.
 
+void __TBB_EXPORTED_METHOD internal_construct ()
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = true
 
+static const bool is_recursive_mutex = false
 
+static const bool is_fair_mutex = true
 
+

Detailed Description

+

Queuing reader-writer mutex with local-only spinning.

+

Adapted from Krieger, Stumm, et al. pseudocode at http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93

+

The documentation for this class was generated from the following file:
    +
  • queuing_rw_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00112.png b/doc/html/a00112.png new file mode 100644 index 0000000000000000000000000000000000000000..aeda94ccfed1540cd9f7d5b4689bd271e13ebcdf GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|^c=>Eakt!T5IW?Y?FM9vA;5UZ4Nh@0pT4 zhr8A3^tF_uB4#(#)cfX!J8?YZQ}UQpZyMnFX$hN_=e!VB+hh9=-=4M3GHu$*k3Z@S zANe03dTOYqagDpqm@%%lrmq*X^ zd$qOUTNroFw=HY@znqeAtJX3$bbhH@b!xxK>>K45D^8kqOQde;*sc?`&3cpO^y^MR z8#X=6N?c?W^RuNjzHb%|`Ox#n80 z>%Mb;-~O=cR_Sq%*}L9}ym7rgb;(_$&S^_xj-N~Rv~rJj{QatL_oRh0q@C`%Ofp+3 z^X#j&XVgVa$yn}>*^*P2%nxIps^XuuVA2y$*$fWFI}Qx-*O?#i?c#p%xKQ}g?uN2C z-xc=qY8>#r@`>|-r|x2gc~^|Mh-Z{|x;ca5f#F9uGwX*XY(TB~O=W(I?}vSNeqHHg zw2zJJ!!|u;*}kRkmh%g^N*p`B(su2!fVF>{xhW`=+M+_S<5>|}56y146nbPns52Z3rG;pgmTnljy3<=>J3}Wk~L@l{hmwftbJ1t#q4@_DQuC^Z7!+x zw^d`s7cBDqxUc9J)9F&i7d2*mZ;#G9|5M>WVeG_<{0kYbl-g+=un&Rxr+7ZUBFpt( a%)5P>_v|_B`vsV689ZJ6T-G@yGywoFo@zq? literal 0 HcmV?d00001 diff --git a/doc/html/a00113.html b/doc/html/a00113.html new file mode 100644 index 0000000..c6cb414 --- /dev/null +++ b/doc/html/a00113.html @@ -0,0 +1,231 @@ + + + + + + +tbb::interface5::reader_writer_lock Class Reference + + + + + + + +
+ +
+
tbb::interface5::reader_writer_lock Class Reference
+
+
+ +

Writer-preference reader-writer lock with local-only spinning on readers. + More...

+ +

#include <reader_writer_lock.h>

+
+Inheritance diagram for tbb::interface5::reader_writer_lock:
+
+
+ + + +
+ + + + + + + + +

+Classes

class  scoped_lock
 The scoped lock pattern for write locks. More...
 
class  scoped_lock_read
 The scoped lock pattern for read locks. More...
 
+ + + + +

+Public Types

enum  status_t { waiting_nonblocking, +waiting, +active, +invalid + }
 Status type for nodes associated with lock instances. More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

reader_writer_lock ()
 Constructs a new reader_writer_lock.
 
~reader_writer_lock ()
 Destructs a reader_writer_lock object.
 
void __TBB_EXPORTED_METHOD lock ()
 Acquires the reader_writer_lock for write. More...
 
bool __TBB_EXPORTED_METHOD try_lock ()
 Tries to acquire the reader_writer_lock for write. More...
 
void __TBB_EXPORTED_METHOD lock_read ()
 Acquires the reader_writer_lock for read. More...
 
bool __TBB_EXPORTED_METHOD try_lock_read ()
 Tries to acquire the reader_writer_lock for read. More...
 
+void __TBB_EXPORTED_METHOD unlock ()
 Releases the reader_writer_lock.
 
+ + + + + +

+Friends

+class scoped_lock
 
+class scoped_lock_read
 
+

Detailed Description

+

Writer-preference reader-writer lock with local-only spinning on readers.

+

Loosely adapted from Mellor-Crummey and Scott pseudocode at http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp

+

Member Enumeration Documentation

+ +
+
+ +

Status type for nodes associated with lock instances.

+

waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.

+

waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.

+

active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion

+

invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed

+

The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.

+

State diagram for scoped_lock status:

+

waiting -------—> waiting_nonblocking | _____________/ | V V V active --------------—> invalid

+

State diagram for scoped_lock_read status:

+

waiting | V active --------------—>invalid

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock ()
+
+ +

Acquires the reader_writer_lock for write.

+

If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: improper_lock The context tries to acquire a reader_writer_lock that it already has write ownership of.

+ +
+
+ +
+
+ + + + + + + +
void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read ()
+
+ +

Acquires the reader_writer_lock for read.

+

If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: improper_lock The context tries to acquire a reader_writer_lock that it already has write ownership of.

+ +
+
+ +
+
+ + + + + + + +
bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock ()
+
+ +

Tries to acquire the reader_writer_lock for write.

+

This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, try_lock() returns false.

+ +
+
+ +
+
+ + + + + + + +
bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read ()
+
+ +

Tries to acquire the reader_writer_lock for read.

+

This function does not block. Return Value: True or false, depending on whether the lock is acquired or not.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • reader_writer_lock.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00113.png b/doc/html/a00113.png new file mode 100644 index 0000000000000000000000000000000000000000..12ea5c61822a9cff028a841febee251e03da1868 GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^XMs3?gBeKn&SE?Uq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ06g*uVLn;{G&V8Hr*no$n-JzlOzq#G< zPwc8USH3^z8PT|weU(hulPuL|`e|v08$2&5ERpi;@?14>$qW$VF>1DKTcoqiLCn}XU)UI(8`(hW0~m@^o9<})Ns zy2o%tWiMlgXBC=)np4uon-dQ(uqj>zssQ4YU}N6j@&7*mTfbGD>C2RROaqI*Mzv{^+a^3$FUQXXWV!E_Tm9x9RWxR}<_seW(1Zl+V9%Z^&$3 z|FkP=Ms{ZKuSd6gW(%I1{i#ZJ+j0MCTW8(58nCor;qQRI^|7h3Cj)Odx@}kd>RHVF zWqqvO{>ATF%G$SbzTa%2y<27dp_-)dxA#}v{Jz&^%Fk^t%Kl25{@%Gpch90{I&aua z*`@E5_FI)FM}&LErv0?_u3Yu($C9hde?6aER+E3u@7Bq^nX@hzJ=dSV#p}zuWp6Xz zx~`ErQ+KJaDs1)X+5oXtRkyfJOHYa0=Ds}>UTyDCp|oOV{;uqU4D2x+-k>1Mg5Xbo fR+$(}x7gp3sm=V7T(S+Aei%Gm{an^LB{Ts5dagH? literal 0 HcmV?d00001 diff --git a/doc/html/a00114.html b/doc/html/a00114.html new file mode 100644 index 0000000..ea7c5e5 --- /dev/null +++ b/doc/html/a00114.html @@ -0,0 +1,67 @@ + + + + + + +tbb::cache_aligned_allocator< void >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::cache_aligned_allocator< void >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef
+cache_aligned_allocator< U > 
other
 
+
The documentation for this struct was generated from the following file:
    +
  • cache_aligned_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00115.html b/doc/html/a00115.html new file mode 100644 index 0000000..5fe6247 --- /dev/null +++ b/doc/html/a00115.html @@ -0,0 +1,66 @@ + + + + + + +tbb::scalable_allocator< T >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::scalable_allocator< T >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef scalable_allocator< U > other
 
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00116.html b/doc/html/a00116.html new file mode 100644 index 0000000..5b4a99a --- /dev/null +++ b/doc/html/a00116.html @@ -0,0 +1,67 @@ + + + + + + +tbb::cache_aligned_allocator< T >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::cache_aligned_allocator< T >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef
+cache_aligned_allocator< U > 
other
 
+
The documentation for this struct was generated from the following file:
    +
  • cache_aligned_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00117.html b/doc/html/a00117.html new file mode 100644 index 0000000..0c940de --- /dev/null +++ b/doc/html/a00117.html @@ -0,0 +1,66 @@ + + + + + + +tbb::tbb_allocator< T >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::tbb_allocator< T >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef tbb_allocator< U > other
 
+
The documentation for this struct was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00118.html b/doc/html/a00118.html new file mode 100644 index 0000000..c89030f --- /dev/null +++ b/doc/html/a00118.html @@ -0,0 +1,67 @@ + + + + + + +tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef memory_pool_allocator
+< U, P > 
other
 
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00119.html b/doc/html/a00119.html new file mode 100644 index 0000000..0f98071 --- /dev/null +++ b/doc/html/a00119.html @@ -0,0 +1,67 @@ + + + + + + +tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef memory_pool_allocator
+< U, P > 
other
 
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00120.html b/doc/html/a00120.html new file mode 100644 index 0000000..13762d4 --- /dev/null +++ b/doc/html/a00120.html @@ -0,0 +1,67 @@ + + + + + + +tbb::zero_allocator< T, Allocator >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::zero_allocator< T, Allocator >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef zero_allocator< U,
+Allocator > 
other
 
+
The documentation for this struct was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00121.html b/doc/html/a00121.html new file mode 100644 index 0000000..ce50367 --- /dev/null +++ b/doc/html/a00121.html @@ -0,0 +1,67 @@ + + + + + + +tbb::zero_allocator< void, Allocator >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::zero_allocator< void, Allocator >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef zero_allocator< U,
+Allocator > 
other
 
+
The documentation for this struct was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00122.html b/doc/html/a00122.html new file mode 100644 index 0000000..5df5081 --- /dev/null +++ b/doc/html/a00122.html @@ -0,0 +1,66 @@ + + + + + + +tbb::tbb_allocator< void >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::tbb_allocator< void >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef tbb_allocator< U > other
 
+
The documentation for this struct was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00123.html b/doc/html/a00123.html new file mode 100644 index 0000000..da86ece --- /dev/null +++ b/doc/html/a00123.html @@ -0,0 +1,66 @@ + + + + + + +tbb::scalable_allocator< void >::rebind< U > Struct Template Reference + + + + + + + +
+ +
+
tbb::scalable_allocator< void >::rebind< U > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef scalable_allocator< U > other
 
+
The documentation for this struct was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00124.html b/doc/html/a00124.html new file mode 100644 index 0000000..62e71fe --- /dev/null +++ b/doc/html/a00124.html @@ -0,0 +1,241 @@ + + + + + + +tbb::flow::interface10::receiver< T > Class Template Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::receiver< T > Class Template Referenceabstract
+
+
+ +

Pure virtual template class that defines a receiver of messages of type T. + More...

+ +

#include <flow_graph.h>

+
+Inheritance diagram for tbb::flow::interface10::receiver< T >:
+
+
+ + +tbb::flow::interface10::internal::untyped_receiver + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef T input_type
 The input type of this receiver.
 
+typedef
+internal::async_helpers< T >
+::filtered_type 
filtered_type
 
+typedef T input_type
 The input type of this receiver.
 
+typedef sender< T > predecessor_type
 The predecessor type for this node.
 
+typedef
+internal::edge_container
+< predecessor_type
built_predecessors_type
 
+typedef
+built_predecessors_type::edge_list_type 
predecessor_list_type
 
- Public Types inherited from tbb::flow::interface10::internal::untyped_receiver
+typedef untyped_sender predecessor_type
 The predecessor type for this node.
 
+typedef
+internal::edge_container
+< predecessor_type
built_predecessors_type
 
+typedef
+built_predecessors_type::edge_list_type 
predecessor_list_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+bool try_put (const typename internal::async_helpers< T >::filtered_type &t)
 Put an item to the receiver.
 
+bool try_put (const typename internal::async_helpers< T >::async_type &t)
 
+virtual ~receiver ()
 Destructor.
 
+bool try_put (const T &t)
 Put an item to the receiver.
 
+virtual bool register_predecessor (predecessor_type &)
 Add a predecessor to the node.
 
+virtual bool remove_predecessor (predecessor_type &)
 Remove a predecessor from the node.
 
+virtual built_predecessors_typebuilt_predecessors ()=0
 
+virtual void internal_add_built_predecessor (predecessor_type &)=0
 
+virtual void internal_delete_built_predecessor (predecessor_type &)=0
 
+virtual void copy_predecessors (predecessor_list_type &)=0
 
+virtual size_t predecessor_count ()=0
 
- Public Member Functions inherited from tbb::flow::interface10::internal::untyped_receiver
+virtual ~untyped_receiver ()
 Destructor.
 
+template<typename X >
bool try_put (const X &t)
 Put an item to the receiver.
 
+ + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+virtual task * try_put_task_wrapper (const void *p, bool is_async) __TBB_override
 
+virtual task * try_put_task (const T &t)=0
 Put item to successor; return task to run the successor if possible.
 
+virtual task * try_put_task (const T &t)=0
 
+virtual graphgraph_reference ()=0
 
+virtual void reset_receiver (reset_flags f=rf_reset_protocol)=0
 put receiver back in initial state
 
+virtual bool is_continue_receiver ()
 
- Protected Member Functions inherited from tbb::flow::interface10::internal::untyped_receiver
+template<typename X >
task * try_put_task (const X &t)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Friends

+template<typename >
class internal::async_storage
 
+template<typename , typename >
struct internal::async_helpers
 
+template<typename R , typename B >
class run_and_put_task
 put item to successor; return task to run the successor if possible.
 
+template<typename X , typename Y >
class internal::broadcast_cache
 
+template<typename X , typename Y >
class internal::round_robin_cache
 
+template<typename U >
class limiter_node
 put receiver back in initial state
 
+template<typename TT , typename M >
class internal::successor_cache
 
+template<typename , typename >
class proxy_dependency_receiver
 
+

Detailed Description

+

template<typename T>
+class tbb::flow::interface10::receiver< T >

+ +

Pure virtual template class that defines a receiver of messages of type T.

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00124.png b/doc/html/a00124.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3fbdae080ea07d4b3363997e402f6dce3e8ed6 GIT binary patch literal 1020 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y!~12~w0rc96T3MM|{PO+F8R;4Ky&*YF6!{>E!wfh>}%%rHHW{c&B{H|ci`6V!YB7GN1I6qo;B7_=J@-0k8(w?WS+8B z`;OVYoTA|u^_^Vb8krS(m)>6Gf9B-6nU$H(rYri+-e@pK$tXi@>ofBUZz@aH{P#HY z_MzCUgQvG$oWHPBJO8k|iQb|K{E4sn7ev-?es5bNAAURkjnwC<`WH)9*4C8I{;kcwZqD1Cw)O2r zoxoie3r`)k6j*QHpVqrBJ1IkYQ*!9rzZOOBU+PNtbUZs?Cs}KD|L3ldI^B(N{wsEL z)d`B+O3isR?bWu>`7_F{mwcXck+;v9?e1Uhf_)-q=eg&y{w}-0{Y+HK-0IEMXEhQ3 zUtVC?vGBb6=6`9s({3=Y+ZO*u>h>0syleM2WbgX)@WPzyCjKj=w;odux&MXj__|-0 zqKxMSBp1p$zsYvASs3Lsw|}1Qg3FvH)(fkcH_y?xSjg~C9cOsIYJ`U03-SCk%Lj$( SY7xM!%HZkh=d#Wzp$PyF7}rMt literal 0 HcmV?d00001 diff --git a/doc/html/a00125.html b/doc/html/a00125.html new file mode 100644 index 0000000..f41aabd --- /dev/null +++ b/doc/html/a00125.html @@ -0,0 +1,93 @@ + + + + + + +tbb::flow::interface10::receiver_gateway< Input > Class Template Reference + + + + + + + +
+ +
+
tbb::flow::interface10::receiver_gateway< Input > Class Template Referenceabstract
+
+
+
+Inheritance diagram for tbb::flow::interface10::receiver_gateway< Input >:
+
+
+ + +tbb::flow::interface10::graph_proxy + +
+ + + + + +

+Public Types

+typedef Input input_type
 Type of inputing data into FG.
 
+ + + + + + + + + + + +

+Public Member Functions

+virtual bool try_put (const input_type &)=0
 Submit signal from an asynchronous activity to FG.
 
- Public Member Functions inherited from tbb::flow::interface10::graph_proxy
+virtual void reserve_wait ()=0
 Inform a graph that messages may come from outside, to prevent premature graph completion.
 
+virtual void release_wait ()=0
 Inform a graph that a previous call to reserve_wait is no longer in effect.
 
+
The documentation for this class was generated from the following file:
    +
  • flow_graph_abstractions.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00125.png b/doc/html/a00125.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec2957fdfc09c109bd8470d36a7e17ee5e92ef2 GIT binary patch literal 1063 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y^412~w0r1*!%A|NFZ;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O0Ct93?@1!3;n}AaM0mh!Fz=^EOWx$B+ufw{u??JyzgxtFw# zmHG`VMQ?L<-7YbCxiY`u=th?M$Z4sb(^4asZSV+E@)W+*uX1#Wyl0oE{Unjebt;qV&f_=NpKbWMweFip?Em+%$31R^W?$FKUtObB zzb#y@eOB<-3xBpe-}kie__v(m7k_62{^~QEv@WgI+IpKx?30_nKCPEdyV?Fm{*3UM zYcFTmJ1$RrA@8{0FLABH8zZHLaK1HhTqWyPa zk*A)!!+uUGnYll{KCSLp$KzkSHvF4mKHG0|>(TcDyQlu$?0Jdz-S3aTr^lC`J<|4d z_x=4*E4Rp=d>3Cj+p6nGX_n%Q^%ui4w%6MR#(n?maq0hI-vX=q!kqhWomXKz^K{pi z_m*m&%HO~43H>Lt^n1=fn}yHszVe>*PxGbwq$K13{rq9G&gn@yr#GEp_~BW@pu!M* ziQnPGad$4J4i9?nM?|n=?Pi%hO9Um5Wt@amEBxv#y?heBs=gZ(`Cp{56x^^&2>EH=plid@x6P{<~}8 zeNz7K>YqOU{OHi`*vU7}J$w3S1%vp{Jp0>z``z}-->SJb`|A?v^u1f{R{Y;)ecR&q zR?D2)wewBeB47WTT3Rsw=G(h=$E;2~`FwMy-15Z=lkIPRIKHqyUw#2^==|T)j?3QO z?0WO}%6HAzlE3G%y?wfDW#`2`J4@%C-KwqdTP!+0?Z8c)-HFSLB|-6TQeV@uaen60 z-^rtu)g-R|&%dYPvGU7xf7SiZ`f8fzbGPi}p0nTeZyyXlAQ-v5yN|Kw_BPE9<()Nx zR`v|}$G6__kE*pi@cU=v^oJV83^wV#bqnXmi5v)@WA^K89mBr4sPS0&Lv!hrB~yaZ b{xDuXWaBe&>(P2(u4eFb^>bP0l+XkK)7BJ` literal 0 HcmV?d00001 diff --git a/doc/html/a00126.html b/doc/html/a00126.html new file mode 100644 index 0000000..a00e9ee --- /dev/null +++ b/doc/html/a00126.html @@ -0,0 +1,162 @@ + + + + + + +tbb::recursive_mutex Class Reference + + + + + + + + +
+ +

#include <recursive_mutex.h>

+
+Inheritance diagram for tbb::recursive_mutex:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 The scoped locking pattern. More...
 
+ + + + + + +

+Public Types

+typedef LPCRITICAL_SECTION native_handle_type
 Return native_handle.
 
+typedef pthread_mutex_t * native_handle_type
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

recursive_mutex ()
 Construct unacquired recursive_mutex.
 
+void lock ()
 Acquire lock.
 
bool try_lock ()
 Try acquiring lock (non-blocking) More...
 
+void unlock ()
 Release lock.
 
+native_handle_type native_handle ()
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = false
 
+static const bool is_recursive_mutex = true
 
+static const bool is_fair_mutex = false
 
+ + + +

+Friends

+class scoped_lock
 
+

Detailed Description

+

Mutex that allows recursive mutex acquisition.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool tbb::recursive_mutex::try_lock ()
+
+inline
+
+ +

Try acquiring lock (non-blocking)

+

Return true if lock acquired; false otherwise.

+ +

References tbb::aligned_space< T, N >::begin().

+ +

Referenced by tbb::recursive_mutex::scoped_lock::try_acquire().

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • recursive_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00126.png b/doc/html/a00126.png new file mode 100644 index 0000000000000000000000000000000000000000..3157a913de76891db2928ba797af89eeb5eb82f1 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|{O?ba4!+V0=6G^`tclJT3OCwynDVzxTSd z6N7B5ZF-tg^tN+OLYGT~{tG#A_%k?8`mkr+Y_0BSE+R~4o z>Wv?T3r|g1=j`HavqVDzE=`VhiPsm7|w1@ZPmMvFiR|Z~XEEP35XEZHO`|DyC>Bnn5 zOY#o5iA{294C^`cCFEj`x%0d$|Ovywoc!yJ#QVI7EOA>$$U}3se*ywpLHF>yoTihe}7hTTwX39 zTVdDyGP#4vh9%aY!T&`UQ-xEw$N}M9ix}oz5M}+)vQDExy~LH#W}!CM1J2k$G$kLz zT%9={aw;(Va90P)&jl)uQL@^hckg+#%-0>>?b`)eEt>oltm@~q-4;>nHfEJA7hi07 z_h?>>SG&o=Z@$kS->cc}_IuN!Vy=&Z#_`2#EgVm*tI?l#ujJ|OZ{i2!3*28`JE@kk zbZ+wX?XLRsgbvLA@V=w3-gi;TyZhCa5+_x=d+{Y^KTr$gI`Z3-E qW?&z80=*CN$m8jDEdqZYi#xS8Pr2b~e+rmb89ZJ6T-G@yGywn;tYQ@a literal 0 HcmV?d00001 diff --git a/doc/html/a00127.html b/doc/html/a00127.html new file mode 100644 index 0000000..09eb639 --- /dev/null +++ b/doc/html/a00127.html @@ -0,0 +1,56 @@ + + + + + + +tbb::flow::interface10::internal::reservable_predecessor_cache< T, M > Class Template Reference + + + + + + + +
+
+
tbb::flow::interface10::internal::reservable_predecessor_cache< T, M > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00128.html b/doc/html/a00128.html new file mode 100644 index 0000000..54f4b1d --- /dev/null +++ b/doc/html/a00128.html @@ -0,0 +1,56 @@ + + + + + + +tbb::flow::interface10::internal::round_robin_cache< T, M > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::round_robin_cache< T, M > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00129.html b/doc/html/a00129.html new file mode 100644 index 0000000..a9e672a --- /dev/null +++ b/doc/html/a00129.html @@ -0,0 +1,56 @@ + + + + + + +tbb::flow::interface10::run_and_put_task< R, B > Class Template Reference + + + + + + + +
+
+
tbb::flow::interface10::run_and_put_task< R, B > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00130.html b/doc/html/a00130.html new file mode 100644 index 0000000..6d04db9 --- /dev/null +++ b/doc/html/a00130.html @@ -0,0 +1,321 @@ + + + + + + +tbb::interface6::runtime_loader Class Reference + + + + + + + +
+ +
+
tbb::interface6::runtime_loader Class Reference
+
+
+ +

Load TBB at runtime. + More...

+ +

#include <runtime_loader.h>

+
+Inheritance diagram for tbb::interface6::runtime_loader:
+
+
+ + + +
+ + + + + + + + +

+Public Types

enum  error_mode { em_status, +em_throw, +em_abort + }
 Error mode constants. More...
 
enum  error_code {
+  ec_ok, +ec_bad_call, +ec_bad_arg, +ec_bad_lib, +
+  ec_bad_ver, +ec_no_lib +
+ }
 Error codes. More...
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

runtime_loader (error_mode mode=em_abort)
 Initialize object but do not load TBB.
 
 runtime_loader (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX, error_mode mode=em_abort)
 Initialize object and load TBB. More...
 
~runtime_loader ()
 Destroy object.
 
error_code load (char const *path[], int min_ver=TBB_INTERFACE_VERSION, int max_ver=INT_MAX)
 Load TBB. More...
 
error_code status ()
 Report status. More...
 
+

Detailed Description

+

Load TBB at runtime.

+

Usage:

+

In source code:

+
#include "tbb/runtime_loader.h"
+
+
char const * path[] = { "<install dir>/lib/ia32", NULL };
+
tbb::runtime_loader loader( path );
+
+
// Now use TBB.
+

Link with tbbproxy.lib (or libtbbproxy.a) instead of tbb.lib (libtbb.dylib, libtbb.so).

+

TBB library will be loaded at runtime from <install dir>="">/lib/ia32 directory.

+

Attention:

+

All runtime_loader objects (in the same module, i.e. exe or dll) share some global state. The most noticeable piece of global state is loaded TBB library. There are some implications:

+
-   Only one TBB library can be loaded per module.
+
+-   If one object has already loaded TBB library, another object will not load TBB.
+    If the loaded TBB library is suitable for the second object, both will use TBB
+    cooperatively, otherwise the second object will report an error.
+
+-   \c runtime_loader objects will not work (correctly) in parallel due to absence of
+    synchronization.

Member Enumeration Documentation

+ +
+
+ +

Error codes.

+ + + + + + + +
Enumerator
ec_ok  +

No errors.

+
ec_bad_call  +

Invalid function call (e. g. load() called when TBB is already loaded).

+
ec_bad_arg  +

Invalid argument passed.

+
ec_bad_lib  +

Invalid library found (e. g. TBB_runtime_version symbol not found).

+
ec_bad_ver  +

TBB found but version is not suitable.

+
ec_no_lib  +

No suitable TBB library found.

+
+ +
+
+ +
+
+ +

Error mode constants.

+ + + + +
Enumerator
em_status  +

Save status of operation and continue.

+
em_throw  +

Throw an exception of tbb::runtime_loader::error_code type.

+
em_abort  +

Print message to stderr and call abort().

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tbb::interface6::runtime_loader::runtime_loader (char const * path[],
int min_ver = TBB_INTERFACE_VERSION,
int max_ver = INT_MAX,
error_mode mode = em_abort 
)
+
+ +

Initialize object and load TBB.

+

See load() for details.

+

If error mode is em_status, call status() to check whether TBB was loaded or not.

+
Parameters
+ + + + + +
pathList of directories to search TBB in.
min_verMinimal suitable version of TBB.
max_verMaximal suitable version of TBB.
modeError mode for this object.
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
error_code tbb::interface6::runtime_loader::load (char const * path[],
int min_ver = TBB_INTERFACE_VERSION,
int max_ver = INT_MAX 
)
+
+ +

Load TBB.

+

The method searches the directories specified in path[] array for the TBB library. When the library is found, it is loaded and its version is checked. If the version is not suitable, the library is unloaded, and the search continues.

+

Note:

+

For security reasons, avoid using relative directory names. For example, never load TBB from current ("."), parent ("..") or any other relative directory (like "lib" ). Use only absolute directory names (e. g. "/usr/local/lib").

+

For the same security reasons, avoid using system default directories ("") on Windows. (See http://www.microsoft.com/technet/security/advisory/2269637.mspx for details.)

+

Neglecting these rules may cause your program to execute 3-rd party malicious code.

+

Errors:

+
    +
  • ec_bad_call - TBB already loaded by this object.
  • +
  • ec_bad_arg - min_ver and/or max_ver negative or zero, or min_ver > max_ver.
  • +
  • ec_bad_ver - TBB of unsuitable version already loaded by another object.
  • +
  • ec_no_lib - No suitable library found.
  • +
+
Parameters
+ + + + +
pathList of directories to search TBB in.
min_verMinimal suitable version of TBB.
max_verMaximal suitable version of TBB.
+
+
+ +
+
+ +
+
+ + + + + + + +
error_code tbb::interface6::runtime_loader::status ()
+
+ +

Report status.

+

If error mode is em_status, the function returns status of the last operation.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • runtime_loader.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00130.png b/doc/html/a00130.png new file mode 100644 index 0000000000000000000000000000000000000000..56b89a68fda8064d7c58a403e3aa47ca3cccd7d0 GIT binary patch literal 616 zcmeAS@N?(olHy`uVBq!ia0vp^+kiNLgBeIR8`rM{QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;AAf9cd`fA9bJ zBw8S};O?}oQnBHdT%7A{t!I1?H{Sg5fJ&xG&^8s# zx?*lkk4yO#Zr`RP%lcj3rgb^8L*;Kz`<;Cg?yi;(`=`(n#m~}AEKJ-ofza8E|I-1dw7DgeBJ*0+-w-9@kvT1$l$PO*xg>W#T5rMK@CYFBd+2 z|2_OE3zJ1+-FZem3ob^JIrl7Y{_*qh?%X5qNr^V^Z z<++`+&VI4&TX1a3$y?7N#iKL67Mz + + + + + +tbb::scalable_allocator< T > Class Template Reference + + + + + + + +
+ +
+
tbb::scalable_allocator< T > Class Template Reference
+
+
+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. + More...

+ +

#include <scalable_allocator.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + + + + + + + + + +

+Public Types

+typedef
+internal::allocator_type< T >
+::value_type 
value_type
 
+typedef value_type * pointer
 
+typedef const value_type * const_pointer
 
+typedef value_type & reference
 
+typedef const value_type & const_reference
 
+typedef size_t size_type
 
+typedef ptrdiff_t difference_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

scalable_allocator (const scalable_allocator &) throw ()
 
+template<typename U >
 scalable_allocator (const scalable_allocator< U > &) throw ()
 
+pointer address (reference x) const
 
+const_pointer address (const_reference x) const
 
+pointer allocate (size_type n, const void *=0)
 Allocate space for n objects.
 
+void deallocate (pointer p, size_type)
 Free previously allocated block of memory.
 
+size_type max_size () const throw ()
 Largest value for which method allocate might succeed.
 
+template<typename U , typename... Args>
void construct (U *p, Args &&...args)
 
+void construct (pointer p, value_type &&value)
 
+void construct (pointer p, const value_type &value)
 
+void destroy (pointer p)
 
+

Detailed Description

+

template<typename T>
+class tbb::scalable_allocator< T >

+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.

+

The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00132.html b/doc/html/a00132.html new file mode 100644 index 0000000..f0c0594 --- /dev/null +++ b/doc/html/a00132.html @@ -0,0 +1,88 @@ + + + + + + +tbb::scalable_allocator< void > Class Template Reference + + + + + + + +
+ +
+
tbb::scalable_allocator< void > Class Template Reference
+
+
+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. + More...

+ +

#include <scalable_allocator.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + +

+Public Types

+typedef void * pointer
 
+typedef const void * const_pointer
 
+typedef void value_type
 
+

Detailed Description

+

template<>
+class tbb::scalable_allocator< void >

+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00133.html b/doc/html/a00133.html new file mode 100644 index 0000000..9fd831e --- /dev/null +++ b/doc/html/a00133.html @@ -0,0 +1,96 @@ + + + + + + +tbb::null_rw_mutex::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::null_rw_mutex::scoped_lock Class Reference
+
+
+ +

Represents acquisition of a mutex. + More...

+ +

#include <null_rw_mutex.h>

+
+Inheritance diagram for tbb::null_rw_mutex::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + + + +

+Public Member Functions

scoped_lock (null_rw_mutex &, bool=true)
 
+void acquire (null_rw_mutex &, bool=true)
 
+bool upgrade_to_writer ()
 
+bool downgrade_to_reader ()
 
+bool try_acquire (null_rw_mutex &, bool=true)
 
+void release ()
 
+

Detailed Description

+

Represents acquisition of a mutex.

+

The documentation for this class was generated from the following file:
    +
  • null_rw_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00133.png b/doc/html/a00133.png new file mode 100644 index 0000000000000000000000000000000000000000..081a54dff5c3418a26e55aabe7207612d4a46482 GIT binary patch literal 604 zcmeAS@N?(olHy`uVBq!ia0vp^2Y@($gBeIxq;!=5DTx4|5ZC|z{{xvX-h3_XKQsZz z0^*PbqpAr*{o=f3V+ZNS5JJZS0rzxOLN zMT!2d6`EsEm)b6WP#nAyvt=J{BNY0?u<4v$IdiVB|dz6cxKymPh0%!vut5+k*T? z=H&tBMN8gRCrH2g$8@>J{=dr8>%VqCpCBjs!s^jdrb$<33rtY)cXF6yGn3`a88)^D zi)|R((n=bSCl@qdWL@^-xS2#8Lqb8)KSrBQ9)=1bNrn$9Mhp);Qy30RKEcqSK9P~Z zUx}Gvo(mfTih`5JjT6$$j3f^1XaTBHWO#5=&EW1O^9I`>)duA`Gv{5|_ENR}iz?IU zMyuL0u17yF&FQs!y}D-F*XdsK@9wkfDx5C(jQw@4Y?<~NmQ|-RcWvg`<7DCy&b3=K zLTWlwv5YTw^Ih%zrdzoiSA8-|+S{_}r}w*j;|pT%T()~&^Hz%9WG%RD@3YTw%l;f@ z`pmswz$1ITY|_fwg$F+U_h!4ryuilf7Dv6{jd-V{oAT2t!xu<#D(^0unj~C)gZZu6 zI{$@fjQ?jJxV6Zt_0r+Z%P(x3`0kV1zhs$uff?H)_bJ~OW0FZ*|F$vi|8X9MJM99% lFkxY^soZCG=FG9D?97Fw7ENp2&45XP!PC{xWt~$(6955s2;cw! literal 0 HcmV?d00001 diff --git a/doc/html/a00134.html b/doc/html/a00134.html new file mode 100644 index 0000000..e32eefe --- /dev/null +++ b/doc/html/a00134.html @@ -0,0 +1,129 @@ + + + + + + +tbb::queuing_mutex::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::queuing_mutex::scoped_lock Class Reference
+
+
+ +

The scoped locking pattern. + More...

+ +

#include <queuing_mutex.h>

+
+Inheritance diagram for tbb::queuing_mutex::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 scoped_lock ()
 Construct lock that has not acquired a mutex. More...
 
scoped_lock (queuing_mutex &m)
 Acquire lock on given mutex.
 
~scoped_lock ()
 Release lock (if lock is held).
 
+void __TBB_EXPORTED_METHOD acquire (queuing_mutex &m)
 Acquire lock on given mutex.
 
+bool __TBB_EXPORTED_METHOD try_acquire (queuing_mutex &m)
 Acquire lock on given mutex if free (i.e. non-blocking)
 
+void __TBB_EXPORTED_METHOD release ()
 Release lock.
 
+

Detailed Description

+

The scoped locking pattern.

+

It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
tbb::queuing_mutex::scoped_lock::scoped_lock ()
+
+inline
+
+ +

Construct lock that has not acquired a mutex.

+

Equivalent to zero-initialization of *this.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • queuing_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00134.png b/doc/html/a00134.png new file mode 100644 index 0000000000000000000000000000000000000000..611457f0e8f9f148ec8a56d0ffee01acb4892bd2 GIT binary patch literal 622 zcmeAS@N?(olHy`uVBq!ia0vp^hk-bNgBeIp4mKz@t~!(|IO_( z^JYv~W$yPUaAy*;>M;Yu8T)6<`&bhX1Rj4?OtA z*mgU&rb9kqhCo~U4_3B@k5dB~I>L`JD#S^$H&mp`Fg%)CNJya6QRd7UHgPtCEt7!y zPBI9rpPRVKi~GUKs@se*p~uYP{;ckoWQe<%%Hut4u3YhS=?!1jC%+5J&erYDoVw_F z*~Zz&b^5bjwcB`oZ{g1udVH@B@vPcpY%y(W6N@Yma? zh59@FBR3>V2WW}8&{SvD(tBhsRYt;Fs zc273Br1y#Q@XxqaW;@@P?LFT7A>;YH8=>jD4p(NJ|6-`0drjJLs>H3@xQ#s z??3DPdtueQeeqr&Z1bk_*OnyS&~N(sf~jWF=8gIlZ-v|6Ppfm4VfeQR=3`scSu=ZA a)gP%TH=Z(q^*JzcFnGH9xvX + + + + + +tbb::mutex::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::mutex::scoped_lock Class Reference
+
+
+ +

The scoped locking pattern. + More...

+ +

#include <mutex.h>

+
+Inheritance diagram for tbb::mutex::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

scoped_lock ()
 Construct lock that has not acquired a mutex.
 
scoped_lock (mutex &mutex)
 Acquire lock on given mutex.
 
~scoped_lock ()
 Release lock (if lock is held).
 
+void acquire (mutex &mutex)
 Acquire lock on given mutex.
 
+bool try_acquire (mutex &mutex)
 Try acquire lock on given mutex.
 
+void release ()
 Release lock.
 
+ + + +

+Friends

+class mutex
 
+

Detailed Description

+

The scoped locking pattern.

+

It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.

+

The documentation for this class was generated from the following file:
    +
  • mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00135.png b/doc/html/a00135.png new file mode 100644 index 0000000000000000000000000000000000000000..5450176d7fa5c18126f5e6f83daf7a63bab18728 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5?gBeI3Ea0&NQW60^A+G=b{|7Q(y!l$%e+Z-k zj1L?*z}k679?0b=3GxeO04f53tEWPY7#JAWdb&7t$X!yRkzCC171$`g0uEAaqW#?P|jtW?K$b*qh_aI-rDdNt)bgK9ea1P zy-#z${ub3we>}4KtM(dwoy)0vcFzCQNlzv^O?o02c;bwX0E7HPMuE-@r+#;X#Tibs z{dE=>I58YNQNv(kq{z_k!*M`anCZib7JS?v5l(4o6Av&vn&8ABr^)i5kRx~bXYm83 z`!Cub_uIT>dlT1G-h|(`X1D!by7f+F+`IU@HmOJI7SDTS;{I5{q{QxVhLG0TuOa%U zLY{AUH{G#%%kq`w>Ok?F*6! zj2Kq&?xea$_ATq;Bg36H2ZW2p2G%cVd$vd}e5Padm0NOQH!DAHU;Reo$nLUNM=SSh zZwas1Ex}OrZ*dEQm + + + + + +tbb::spin_mutex::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::spin_mutex::scoped_lock Class Reference
+
+
+ +

Represents acquisition of a mutex. + More...

+ +

#include <spin_mutex.h>

+
+Inheritance diagram for tbb::spin_mutex::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

scoped_lock ()
 Construct without acquiring a mutex.
 
scoped_lock (spin_mutex &m)
 Construct and acquire lock on a mutex.
 
+void acquire (spin_mutex &m)
 Acquire lock.
 
bool try_acquire (spin_mutex &m)
 Try acquiring lock (non-blocking) More...
 
+void release ()
 Release lock.
 
~scoped_lock ()
 Destroy lock. If holding a lock, releases the lock first.
 
+ + + +

+Friends

+class spin_mutex
 
+

Detailed Description

+

Represents acquisition of a mutex.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool tbb::spin_mutex::scoped_lock::try_acquire (spin_mutexm)
+
+inline
+
+ +

Try acquiring lock (non-blocking)

+

Return true if lock acquired; false otherwise.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • spin_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00136.png b/doc/html/a00136.png new file mode 100644 index 0000000000000000000000000000000000000000..25da9c6ba09d573b82ff7e6295013c42ed53edd9 GIT binary patch literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^>wq|bgBeI}_u97=NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~KJ;{P45?szJNIVaY6Ah*)k{5||NmbR zaqNMvq)>*){oBe~4IhK%Y&@%-miD;8^O8o(I+aSnU6Y=;zVMnPzP!|T+ZThkot2q! zKcZC?J?9t2m1pgjn|bL-0tz8i0FsrO}^;f4R-1g9(so^%6=p7a$UdWe^#t7>n~lf_wu7t3ih9ZgLhw8tCjD3ZL*@b_HTO=GuPv`ce8%% z4b}a$<+{yfpXXcOnQ`;I)|-FIsr>!otFhVf%YUovnf_8Nxm2v^_2>4ydZUtM>FHMX z7j@H;H(t@3vHNY%>hiXb-N9F0EfWoY%Tp=;ysRykQRb%h`v0G5Z#+)lb(-s>xbT7K yFSq1ge4Xzj{y>`}mO + + + + + +tbb::spin_rw_mutex_v3::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::spin_rw_mutex_v3::scoped_lock Class Reference
+
+
+ +

The scoped locking pattern. + More...

+ +

#include <spin_rw_mutex.h>

+
+Inheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 scoped_lock ()
 Construct lock that has not acquired a mutex. More...
 
scoped_lock (spin_rw_mutex &m, bool write=true)
 Acquire lock on given mutex.
 
~scoped_lock ()
 Release lock (if lock is held).
 
+void acquire (spin_rw_mutex &m, bool write=true)
 Acquire lock on given mutex.
 
bool upgrade_to_writer ()
 Upgrade reader to become a writer. More...
 
+void release ()
 Release lock.
 
+bool downgrade_to_reader ()
 Downgrade writer to become a reader.
 
+bool try_acquire (spin_rw_mutex &m, bool write=true)
 Try acquire lock on given mutex.
 
+ + + + + + + +

+Protected Attributes

+spin_rw_mutexmutex
 The pointer to the current mutex that is held, or NULL if no mutex is held.
 
bool is_writer
 If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock. More...
 
+ + + +

+Friends

+class tbb::interface8::internal::x86_rtm_rw_mutex
 
+

Detailed Description

+

The scoped locking pattern.

+

It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock ()
+
+inline
+
+ +

Construct lock that has not acquired a mutex.

+

Equivalent to zero-initialization of *this.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer ()
+
+inline
+
+ +

Upgrade reader to become a writer.

+

Returns whether the upgrade happened without releasing and re-acquiring the lock

+ +

References is_writer.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool tbb::spin_rw_mutex_v3::scoped_lock::is_writer
+
+protected
+
+ +

If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.

+

Not defined if not holding a lock.

+ +

Referenced by acquire(), downgrade_to_reader(), release(), try_acquire(), and upgrade_to_writer().

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • spin_rw_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00137.png b/doc/html/a00137.png new file mode 100644 index 0000000000000000000000000000000000000000..13249c6a5c9189fb4202efb8b5609124c7dc489e GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0vp^H-I>RgBeKr$a-f1DTx4|5ZC|z{{xvX-h3_XKQsZz z0^XZi2i&|mS^Ws%?JH+o*03b$+4fiq{=L=IdpVU`G7+;lgu zc~UQzSz)iInU2JP1zh_XY&2z>M|NQUS^8Bh-Pp-*x4tb);psPu)$UcfFz!qH}(ok%^wY-TU9#_nVxeHY}aOa{W$d zLZoYH$xLf)#jk;^?>S$soWWaWHp90ww6yf7?VQq*-NhRwuYK`5urRcG;senL!>e}e zv+aTOF5hipId31?Y+z50Z&+KeFQd)nu~I(ewbiwja=G&5N$HZM(_(qAWxm!qr+fMG zbpMFtx6cCKcSV;hf2nX|Tl<&tqqVN4H~-~^-w}T`(fP@n#k>zz*q!++d1KS0?zs;F zl^s?#C;A`c`|@$VHQNIpSa^K?n4V@f?;k@%MT_y@i43QKsfWSS)z4*}Q$iB}$~h-f literal 0 HcmV?d00001 diff --git a/doc/html/a00138.html b/doc/html/a00138.html new file mode 100644 index 0000000..7ce81c6 --- /dev/null +++ b/doc/html/a00138.html @@ -0,0 +1,100 @@ + + + + + + +tbb::interface5::reader_writer_lock::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::interface5::reader_writer_lock::scoped_lock Class Reference
+
+
+ +

The scoped lock pattern for write locks. + More...

+ +

#include <reader_writer_lock.h>

+
+Inheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + +

+Public Member Functions

scoped_lock (reader_writer_lock &lock)
 Construct with blocking attempt to acquire write lock on the passed-in lock.
 
~scoped_lock ()
 Destructor, releases the write lock.
 
+void * operator new (size_t s)
 
+void operator delete (void *p)
 
+ + + +

+Friends

+class reader_writer_lock
 
+

Detailed Description

+

The scoped lock pattern for write locks.

+

Scoped locks help avoid the common problem of forgetting to release the lock. This type also serves as the node for queuing locks.

+

The documentation for this class was generated from the following file:
    +
  • reader_writer_lock.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00138.png b/doc/html/a00138.png new file mode 100644 index 0000000000000000000000000000000000000000..a999a7d0cd0bd7f4fb4169b8e0db9283f0821121 GIT binary patch literal 798 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y!~12~w0xp*Zd9~T#HMNhX$SvtKcOCzK_y*8Rmnv#^MqIvX^ zM^M+&iA$z*FX22o$9!61b(CFF0r>&+{&o?0vT0%ecTPcH8`QliViV+i?Bs^rbUnKK+>-5_kJ=>esvX zOs`KZkIz(j8H8?o>LfL#LoO~R40qbu8yGV-nlMQAw{KDoRe8ZH1EkR~C+X052R%7m<{@3nG+a}ZOq1|cuw_B zuvJ?G7}ypZyTq_0LaIT;n|VS~CPPqJ=CX%hSJ&MCf6LFTVcyc6%reHGEaO-ipI){7 z`{%LT`c+k>dS??E+rRSYNk5SNJ|WHW*z@yy`C60C|Gvq!T7I7Yv?_8(C z?QJwIc)6(R&-3c1%|Zfw|L@S)_vhMCw>RHXgzu$m`dm}B-OZ_uq<9z9iEs>#_N3i_a{r|J#>(uDP)Fz24W4<~hF}+)A{% zUXmF5=v#p8=^uWxYMigmeekzU%J|LfxXW|+vMFOI8NYlhJzZ`D3ndR({0YlYAfIKOPpn=QwMpeb`=+1<3|H3)Fs3 zZ#?-%s$t501>OVvz^K!l#-?x-62wzHXLWE03ts%dKQ&?Plt-F#jsp`jgQu&X%Q~lo FCIA@tYbyW% literal 0 HcmV?d00001 diff --git a/doc/html/a00139.html b/doc/html/a00139.html new file mode 100644 index 0000000..8af8fb4 --- /dev/null +++ b/doc/html/a00139.html @@ -0,0 +1,110 @@ + + + + + + +tbb::recursive_mutex::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::recursive_mutex::scoped_lock Class Reference
+
+
+ +

The scoped locking pattern. + More...

+ +

#include <recursive_mutex.h>

+
+Inheritance diagram for tbb::recursive_mutex::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

scoped_lock ()
 Construct lock that has not acquired a recursive_mutex.
 
scoped_lock (recursive_mutex &mutex)
 Acquire lock on given mutex.
 
~scoped_lock ()
 Release lock (if lock is held).
 
+void acquire (recursive_mutex &mutex)
 Acquire lock on given mutex.
 
+bool try_acquire (recursive_mutex &mutex)
 Try acquire lock on given recursive_mutex.
 
+void release ()
 Release lock.
 
+ + + +

+Friends

+class recursive_mutex
 
+

Detailed Description

+

The scoped locking pattern.

+

It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.

+

The documentation for this class was generated from the following file:
    +
  • recursive_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00139.png b/doc/html/a00139.png new file mode 100644 index 0000000000000000000000000000000000000000..9d4ec98b911f2d18a41fad4e3ce2d10c7aa42596 GIT binary patch literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^XMs3?gBeKn&SE?Uq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0L_A#_Ln;{G&VAdr+JMKUf2r5!fB7{F z9SRh-pMKYNO?u~}DQ5HKjv3Y)8cVbJOkz{K>Jj7<)T?q-1;p63+VE!a(Um`bhuz=7 zcXPrLzc1m&Yq!VfUHN*yESq=YlKA3g^Z$XxVy3fZ-An)0ob~LpvZrk2{8^WG{&ddL zyRzk9=eLR9eQ$p3UpaHn4Esrcw*Gy;|1<|?O{4eWO9hIr{T;iGiLTO z9gwbI;5i(SCD%Xk3D43rA>#>iHeO-qaj{|+nEZuJLG2~4gU==Dh8auD84Nx18ImU5 zV>qI+m$AdM3QfVD)6&M96Av%|eFIbh#7kDp%=@k1kY7-GEMM-9-S;hB?_Vuod%%?+ zy!pzjm#=R=QL|w`v-kCa)K6A^?`o9b?>?>GR(KE`e&B)WgJgk^!(|awzf|it6Wx! z=iBcOTXHq(`js>Dm(7}#`P%9A3Gu9JjG<1uWc$UY_FAu6=@wB6!)-w(~!n&QT3 z)&9G6R@t)9=ga11>UHxgPFugt{Ho`QRSxaN#p{@k&w3WS%Iic};wzuxtsmE + + + + + +tbb::null_mutex::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::null_mutex::scoped_lock Class Reference
+
+
+ +

Represents acquisition of a mutex. + More...

+ +

#include <null_mutex.h>

+
+Inheritance diagram for tbb::null_mutex::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + +

+Public Member Functions

scoped_lock (null_mutex &)
 
+void acquire (null_mutex &)
 
+bool try_acquire (null_mutex &)
 
+void release ()
 
+

Detailed Description

+

Represents acquisition of a mutex.

+

The documentation for this class was generated from the following file:
    +
  • null_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00140.png b/doc/html/a00140.png new file mode 100644 index 0000000000000000000000000000000000000000..d8565aa377b4b6d12e30bda0927c2756bdb21acf GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^tARLxgBeH$CYOE$QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;52aiuSxa~wLJfQ*)=OiGU3+WPrHAf zU3{MXLxwKmhTpI_Q>zI0u*=dN@8JHx*I%8rS@ z!M@A;LEqo6GaiKR^s_uyKj~BQ|9iF&Bhq@tBEP@MXVC-9-;^4pCAFtpSpS`N5G&#kt3X;{t!^(;nH18{26qE)Ek=S z$tAlUW3_et_p*zRE?%+d-!RuNculh|@9)(44|hcF5Sts^5xH)5 zucOtZ#HYJ_B2A@C`u_xdwc9B+w_o$L)QLr2_Maoy=^oad@hE=A)Ntoza;E;q#f7D@ z_gd7ihd6)D$bRp?(`@>K%A41W?(f)^{UBt~(-)BwudZ9pWwTbdy=v|Cu$}xNqCc*b z=IeZGymDhVzl`hu#_!jTYU=OM^Hz$tWyrr+^{qAVf5kcmdBqsUKb%0{Jj=a#CWm7m ZL)Om>Id#FK%Yc#1;OXk;vd$@?2>|Ul6*&L^ literal 0 HcmV?d00001 diff --git a/doc/html/a00141.html b/doc/html/a00141.html new file mode 100644 index 0000000..b1b2b2d --- /dev/null +++ b/doc/html/a00141.html @@ -0,0 +1,74 @@ + + + + + + +tbb::internal::critical_section_v4::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::internal::critical_section_v4::scoped_lock Class Reference
+
+
+
+Inheritance diagram for tbb::internal::critical_section_v4::scoped_lock:
+
+
+ + + +
+ + + + +

+Public Member Functions

scoped_lock (critical_section_v4 &lock_me)
 
+
The documentation for this class was generated from the following file:
    +
  • critical_section.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00141.png b/doc/html/a00141.png new file mode 100644 index 0000000000000000000000000000000000000000..15626cfa0fabd91facbde8e62a8b58a223eb2eca GIT binary patch literal 743 zcmeAS@N?(olHy`uVBq!ia0y~yU<9!PIGBOtwer*VfRsdlPl)UP|Nnu^7jM3n_8*!6 zWP$O40|!_;@5lqW93?@1!3;n}AaM0mh!Fz=Q<i7?&95nKAUwX?kldnmA6=N(wED-?uz;cd~xYfx|_EyDZe{uo#dpF`S(~| z!?pi$b#beoc>DWtp2(zrx8+NCz?tywJyS*p)%l)dRq&<#axjVKwx@ly6-=5_f{MqvsRSy|sQf38 zjy^oBziYzbbwAbzGSoN%6AJ?<#V~{lcXe=N@A}8+m$JCS)I07XFjX>my85}Sb4q9e E0A3kPkpKVy literal 0 HcmV?d00001 diff --git a/doc/html/a00142.html b/doc/html/a00142.html new file mode 100644 index 0000000..a6b1a24 --- /dev/null +++ b/doc/html/a00142.html @@ -0,0 +1,155 @@ + + + + + + +tbb::queuing_rw_mutex::scoped_lock Class Reference + + + + + + + +
+ +
+
tbb::queuing_rw_mutex::scoped_lock Class Reference
+
+
+ +

The scoped locking pattern. + More...

+ +

#include <queuing_rw_mutex.h>

+
+Inheritance diagram for tbb::queuing_rw_mutex::scoped_lock:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 scoped_lock ()
 Construct lock that has not acquired a mutex. More...
 
scoped_lock (queuing_rw_mutex &m, bool write=true)
 Acquire lock on given mutex.
 
~scoped_lock ()
 Release lock (if lock is held).
 
+void acquire (queuing_rw_mutex &m, bool write=true)
 Acquire lock on given mutex.
 
+bool try_acquire (queuing_rw_mutex &m, bool write=true)
 Acquire lock on given mutex if free (i.e. non-blocking)
 
+void release ()
 Release lock.
 
bool upgrade_to_writer ()
 Upgrade reader to become a writer. More...
 
+bool downgrade_to_reader ()
 Downgrade writer to become a reader.
 
+

Detailed Description

+

The scoped locking pattern.

+

It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
tbb::queuing_rw_mutex::scoped_lock::scoped_lock ()
+
+inline
+
+ +

Construct lock that has not acquired a mutex.

+

Equivalent to zero-initialization of *this.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer ()
+
+ +

Upgrade reader to become a writer.

+

Returns whether the upgrade happened without releasing and re-acquiring the lock

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • queuing_rw_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00142.png b/doc/html/a00142.png new file mode 100644 index 0000000000000000000000000000000000000000..227e99a9e7146d2e7de5a746eb21af449090be9c GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^H-I>RgBeKr$a-f1DTx4|5ZC|z{{xvX-h3_XKQsZz z0^1(`B6p0qd!N_tZ`4AbY;Gf&m<+ygDRSnK#Y~VGfp1caJcYMb?tMT zl!+>LSGgrPUs$@LoUHPgHC;KFC+liQ!xuYOwpHe&PDdNwsr-KhzaL_9gwJSUno%$!-O(Xjp{ z0pDiO8| z^M!a6CV_C+hKHN}GF7bXpLari^7fsfBK5Cx4H~w8HQliC1Alz-^w|bq&lk^I{4BnB zcH6Y&$E1$yn(*DII__{eeBybbbFte@UoG7>XWNyq>N&~9+t^&A53cH#-c>JFy}@vQ z(Wd{Y4`%NVSnYZwq*xE%^^G}68F}m@& zSpJ4cZvHpPh>hRwCb)ObZ`7^+9DlrP2fOQ#FT1Lk<4Vi3z=vR~IFEz4zBImz^cgOsxOj4E!JuUK}hS-ewx(Y?nv(pNIiS-mis;o+17VCVtymat6Y&Fj9fN0hes2F?|K2uwK) Mp00i_>zopr00eb2^#A|> literal 0 HcmV?d00001 diff --git a/doc/html/a00143.html b/doc/html/a00143.html new file mode 100644 index 0000000..6f13432 --- /dev/null +++ b/doc/html/a00143.html @@ -0,0 +1,99 @@ + + + + + + +tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference + + + + + + + +
+ +
+
tbb::interface5::reader_writer_lock::scoped_lock_read Class Reference
+
+
+ +

The scoped lock pattern for read locks. + More...

+ +

#include <reader_writer_lock.h>

+
+Inheritance diagram for tbb::interface5::reader_writer_lock::scoped_lock_read:
+
+
+ + + +
+ + + + + + + + + + + + +

+Public Member Functions

scoped_lock_read (reader_writer_lock &lock)
 Construct with blocking attempt to acquire read lock on the passed-in lock.
 
~scoped_lock_read ()
 Destructor, releases the read lock.
 
+void * operator new (size_t s)
 
+void operator delete (void *p)
 
+ + + +

+Friends

+class reader_writer_lock
 
+

Detailed Description

+

The scoped lock pattern for read locks.

+

The documentation for this class was generated from the following file:
    +
  • reader_writer_lock.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00143.png b/doc/html/a00143.png new file mode 100644 index 0000000000000000000000000000000000000000..10066bd980a7f04d27b6d2c16ba84af835b461d3 GIT binary patch literal 839 zcmeAS@N?(olHy`uVBq!ia0y~yV6+CZ12~w0WT2bU4Im{E;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z;w;i#WAFU@$KBVd8-WsT+VwXSMAD3(9@x4xjDn$jbq78Oa)T^(B|FR@!QSLJKsTa}gk+3KFP z5!Rls4&U+&lHZ&m-sP^i(d72sFVCblDSFnQHo0~8RKz-$8C$oTt`+e7rTy&V-M+G| zE!X^ls$wtYP161KdCTti)swz__gNpi^?sza=gqGsS8o@W%~G}QEt~YEEq&oNze!~~ ze!lsquDN&HKNHsadGDXC{NB7}@{*Ms$|hZDM|MpA>@u)BwHQ8sVohMsOMc6+>&LH6 z6%4i!)(v`jmm+N%_}0iaFiLdCvL`UOCEaI~Xqb4ToPjMtnO{6!d3SB)U$6Ps_iy_wxggE5k>Q)==e=>Pj4wm) z?)~@mdwS`%EylOr^6i@a*r}*N+0JG6?(n?--_PArnRM?rzwz3>UH2oMuGigqa#H^B z^u+!d*CRY#wfmz^P04(kdThyqFxRzz(%Gyv_J6ti>E1P)^;pMQN@{>_3vuW#+O+3KS6H~rdk#lW?lxvkH?*(|;rcjI2k3-|9oFjy$dDH`;euFMf0NQ~CGh>et@vH2s*iKRdK4@$569 z|3~V=pIB|aKlORe){o2D?`5Ce#mX{4xF9%}0g1|J-`d z@Ly)X>0!w&)j7w0%JBvi8SyAA|9a|U!t5!FEZ~aMNs%P+Y^>bP0l+XkKey*3Q literal 0 HcmV?d00001 diff --git a/doc/html/a00144.html b/doc/html/a00144.html new file mode 100644 index 0000000..e8715f3 --- /dev/null +++ b/doc/html/a00144.html @@ -0,0 +1,196 @@ + + + + + + +tbb::flow::interface10::sender< T > Class Template Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::sender< T > Class Template Referenceabstract
+
+
+ +

Pure virtual template class that defines a sender of messages of type T. + More...

+ +

#include <flow_graph.h>

+
+Inheritance diagram for tbb::flow::interface10::sender< T >:
+
+
+ + +tbb::flow::interface10::internal::untyped_sender + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+typedef T output_type
 The output type of this sender.
 
+typedef
+internal::async_helpers< T >
+::filtered_type 
filtered_type
 
+typedef T output_type
 The output type of this sender.
 
+typedef receiver< T > successor_type
 The successor type for this node.
 
+typedef
+internal::edge_container
+< successor_type
built_successors_type
 interface to record edges for traversal & deletion
 
+typedef
+built_successors_type::edge_list_type 
successor_list_type
 
- Public Types inherited from tbb::flow::interface10::internal::untyped_sender
+typedef untyped_receiver successor_type
 The successor type for this node.
 
+typedef
+internal::edge_container
+< successor_type
built_successors_type
 interface to record edges for traversal & deletion
 
+typedef
+built_successors_type::edge_list_type 
successor_list_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool try_get (T &)
 Request an item from the sender.
 
+virtual bool try_reserve (T &)
 Reserves an item in the sender.
 
+virtual bool register_successor (successor_type &r)=0
 Add a new successor to this node.
 
+virtual bool remove_successor (successor_type &r)=0
 Removes a successor from this node.
 
+virtual bool try_get (T &)
 Request an item from the sender.
 
+virtual bool try_reserve (T &)
 Reserves an item in the sender.
 
+virtual bool try_release ()
 Releases the reserved item.
 
+virtual bool try_consume ()
 Consumes the reserved item.
 
+virtual built_successors_typebuilt_successors ()=0
 
+virtual void internal_add_built_successor (successor_type &)=0
 
+virtual void internal_delete_built_successor (successor_type &)=0
 
+virtual void copy_successors (successor_list_type &)=0
 
+virtual size_t successor_count ()=0
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

+virtual bool try_get_wrapper (void *p, bool is_async) __TBB_override
 
+virtual bool try_reserve_wrapper (void *p, bool is_async) __TBB_override
 
- Protected Member Functions inherited from tbb::flow::interface10::internal::untyped_sender
+template<typename X >
bool try_get (X &t)
 Request an item from the sender.
 
+template<typename X >
bool try_reserve (X &t)
 Reserves an item in the sender.
 
+

Detailed Description

+

template<typename T>
+class tbb::flow::interface10::sender< T >

+ +

Pure virtual template class that defines a sender of messages of type T.

+

The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00144.png b/doc/html/a00144.png new file mode 100644 index 0000000000000000000000000000000000000000..9655e6a47e8186100b02aa608adab807a495ea8f GIT binary patch literal 973 zcmeAS@N?(olHy`uVBq!ia0y~yU=#$h12~w0B&X%ZgFs3mz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op3RPCZ~SBxU4HO9)IYsRC-YsBp|N*%xR9Z7ATm}C3d`MpC)6wBLv3?> z?v$A~4`jI)@_p7wyJq^*M!Hxk|5>5ylb;2$7Q4<=h6qhwVc&J4cvb&?tE>MQuZynf zecRr>*=()s+xXm-h1=41Uft-FBDT~wgBqK0#&TyM3O0XBK^V zxIB2)y)9L9E#IBH?~!s}C--LV@?8Gy9W5HsQSpKwJ#XH9yzZjj*Z(FHf0_T@Rkt-S zg{NYovSJsTRQ;om+>a#}#wxy>(2=+9;EQCvdCz~l%I*|Tb$Ie&X)NRJK=&ib`?4QJ z3Tw~RNsYLA=;SV0=Ea+r$;*caek%}&5VEV`P&zpoc1ktn#&oVDM!X};5ldkDE$S2A( zWO}kB}Hy9 z%~++AAr5Z(MQ#_lzS-;fELWe~tGvs`jgePxz7uU68-wykx=SErI+J7tPanAXo)yY#k%5TK)TbkC- zS@E}0>Gi8ui@ryno?Z6ZrKL3^aq_HAGkg``P}WEsD41Uy7u~yldtb+mhc|? z!7@qZ(%tei6X#jCTYA_;?)p>Lcrv>4&FrP?6aJs6Hnh2II@`G-zF%@$t;T-_^Ebac zuk4TP`*C&G#P*(!sb42}TmATdTJY|HX31my)!VZ3t_aFMozZhV=-)Fdq4TpM^iwqt zH%a(itE%BWKdWrRj$JFO_2!v2yx>jeJz$>z4-k~#zSs;3wy&@4kGEU!FiddD0p>jh MPgg&ebxsLQ0DX$B*#H0l literal 0 HcmV?d00001 diff --git a/doc/html/a00145.html b/doc/html/a00145.html new file mode 100644 index 0000000..446dfcf --- /dev/null +++ b/doc/html/a00145.html @@ -0,0 +1,182 @@ + + + + + + +tbb::spin_mutex Class Reference + + + + + + + + +
+ +

A lock that occupies a single byte. + More...

+ +

#include <spin_mutex.h>

+
+Inheritance diagram for tbb::spin_mutex:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 Represents acquisition of a mutex. More...
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

 spin_mutex ()
 Construct unacquired lock. More...
 
+void __TBB_EXPORTED_METHOD internal_construct ()
 Internal constructor with ITT instrumentation.
 
+void lock ()
 Acquire lock.
 
bool try_lock ()
 Try acquiring lock (non-blocking) More...
 
+void unlock ()
 Release lock.
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = false
 
+static const bool is_recursive_mutex = false
 
+static const bool is_fair_mutex = false
 
+ + + +

+Friends

+class scoped_lock
 
+

Detailed Description

+

A lock that occupies a single byte.

+

A spin_mutex is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically less than 20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
tbb::spin_mutex::spin_mutex ()
+
+inline
+
+ +

Construct unacquired lock.

+

Equivalent to zero-initialization of *this.

+ +

References internal_construct().

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool tbb::spin_mutex::try_lock ()
+
+inline
+
+ +

Try acquiring lock (non-blocking)

+

Return true if lock acquired; false otherwise.

+ +

References tbb::aligned_space< T, N >::begin().

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • spin_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00145.png b/doc/html/a00145.png new file mode 100644 index 0000000000000000000000000000000000000000..5dfc58974fe23922ad2b6e7edde1e485bc375a30 GIT binary patch literal 729 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|`Ddba4!+V0=6G^`%z|Jg(tsb8f!>e{A`- zOG0{E`>wv9@o2|VCk`E_OZ#WcjCGu$a`ZaG)FmEL3nqzp#$NdTBYwtP-|uQ+)0TdG zTz~nof3sK7edh(!`Z6wlc{Fp@&*SIk{thbM9=$w8&D%fk(}(%~=dOFm-s_zm-?R4i z+nnWdwl!{3}UVgoJ^3#XsgyiauKh}Hkw^(3{!Ob-56Kh`=-oN7%%64V@g2HJpUv1k~C$c5* z-mC@QOlD<@C%LxPh%D2OomFQf(!I?g_SMg%D`zfpZJD}w?_T@U7th`JZ8E&h8v8EZTJnaKY8F&4hdz;wvq>FVdQ&MBb@06Lgb(EtDd literal 0 HcmV?d00001 diff --git a/doc/html/a00146.html b/doc/html/a00146.html new file mode 100644 index 0000000..be13444 --- /dev/null +++ b/doc/html/a00146.html @@ -0,0 +1,236 @@ + + + + + + +tbb::spin_rw_mutex_v3 Class Reference + + + + + + + + +
+ +

Fast, unfair, spinning reader-writer lock with backoff and writer-preference. + More...

+ +

#include <spin_rw_mutex.h>

+
+Inheritance diagram for tbb::spin_rw_mutex_v3:
+
+
+ + + +
+ + + + + +

+Classes

class  scoped_lock
 The scoped locking pattern. More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

spin_rw_mutex_v3 ()
 Construct unacquired mutex.
 
~spin_rw_mutex_v3 ()
 Destructor asserts if the mutex is acquired, i.e. state is zero.
 
+void lock ()
 Acquire writer lock.
 
bool try_lock ()
 Try acquiring writer lock (non-blocking) More...
 
+void unlock ()
 Release lock.
 
+void lock_read ()
 Acquire reader lock.
 
bool try_lock_read ()
 Try acquiring reader lock (non-blocking) More...
 
+ + + + + + + +

+Static Public Attributes

+static const bool is_rw_mutex = true
 
+static const bool is_recursive_mutex = false
 
+static const bool is_fair_mutex = false
 
+ + + +

+Protected Types

+typedef intptr_t state_t
 
+ + + + +

+Protected Attributes

state_t state
 State of lock. More...
 
+ + + + + + + + + + + +

+Static Protected Attributes

+static const state_t WRITER = 1
 
+static const state_t WRITER_PENDING = 2
 
+static const state_t READERS = ~(WRITER | WRITER_PENDING)
 
+static const state_t ONE_READER = 4
 
+static const state_t BUSY = WRITER | READERS
 
+

Detailed Description

+

Fast, unfair, spinning reader-writer lock with backoff and writer-preference.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool tbb::spin_rw_mutex_v3::try_lock ()
+
+inline
+
+ +

Try acquiring writer lock (non-blocking)

+

Return true if lock acquired; false otherwise.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool tbb::spin_rw_mutex_v3::try_lock_read ()
+
+inline
+
+ +

Try acquiring reader lock (non-blocking)

+

Return true if reader lock acquired; false otherwise.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
state_t tbb::spin_rw_mutex_v3::state
+
+protected
+
+ +

State of lock.

+

Bit 0 = writer is holding lock Bit 1 = request by a writer to acquire lock (hint to readers to wait) Bit 2..N = number of readers holding lock

+ +

Referenced by tbb::spin_rw_mutex_v3::scoped_lock::release(), and unlock().

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • spin_rw_mutex.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00146.png b/doc/html/a00146.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1efc94eefd31b2d4083e828ac11551d2a93292 GIT binary patch literal 777 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|^cz>Eakt!T5IW?Ma_Ccv|dNEn9W}f3Nwm zG6$I&uYW1ZlReq_J)C@%e@+u{+QG~*>4|*v3YE%33R<4?E~x&J`Y(L%TFL2+n{;}o z|DP>bKWl}`XImGOHSQ*lKR&AD`FQ--v7Mze-ptdRdD3R`Y@LtA&ujWi549QoJ9^9b zuAkM?a3!g=LN{M&&h_7x!n4^rbmokeMJMLHnmbReOm}wv%`ib@*V$h#Eezeh*lTC4 z*rcXb-s{|xuRc5`Htmnw5#L3ZpDSEEq*5t8DKl$le%j(yOs}FZSe*X)YFm)K*OrU- zX1P3P%1Kew6v;TM;o~1WtIkkl_O^~$mo}eW5xH3OVp#9DqWh~ap1bwhbl0~f!m-;m z*7{x7o%`58zkK&Qp_c*IW1HWW#ClrsDsNG_TJg44$MgNcz(pH(eO{LmVI%Ey-(?ct zLfN!>-$`a4#9X&K{h76B(wEB;E~+Pm*#bR3wXk0Vh8QD*U7vk}^#eVZ|Nrt1ebIA~ zw|Rf?i(pt_PgXfeiiuSGetM7Phy4Ano@{e{G#&gNm_qJ4hWmx~??E0k@ zJ5GOy@d*BC(8G|a_*P2TV{_ofpT{qptFiMmQ8QQH%=dG9&8fbHYEn1VH(d>O{9+w$ zF05?*M(e54?MaT^aV~FviMmR=oV~ioujJR1M@wD)i@R9gl34Wle&3>H50|>w-|cxN zWg0pC + + + + + +tbb::structured_task_group Class Reference + + + + + + + +
+ +
+
tbb::structured_task_group Class Reference
+
+
+
+Inheritance diagram for tbb::structured_task_group:
+
+
+ + +tbb::internal::task_group_base + +
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename F >
task_group_status run_and_wait (task_handle< F > &h)
 
+task_group_status wait ()
 
- Public Member Functions inherited from tbb::internal::task_group_base
task_group_base (uintptr_t traits=0)
 
+template<typename F >
void run (task_handle< F > &h)
 
+task_group_status wait ()
 
+bool is_canceling ()
 
+void cancel ()
 
+ + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from tbb::internal::task_group_base
+task & owner ()
 
+template<typename F >
task_group_status internal_run_and_wait (F &f)
 
+template<typename Task , typename F >
void internal_run (__TBB_FORWARDING_REF(F) f)
 
- Protected Attributes inherited from tbb::internal::task_group_base
+empty_task * my_root
 
+task_group_context my_context
 
+
The documentation for this class was generated from the following file:
    +
  • task_group.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00147.png b/doc/html/a00147.png new file mode 100644 index 0000000000000000000000000000000000000000..f9335edceafd7f8bc89407edcd399573fb4cb1e3 GIT binary patch literal 961 zcmeAS@N?(olHy`uVBq!ia0vp^n}N84gBeK9F4tNQq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ013X3c`FY2YBFlwe^L}UW8X8x(T|e@(?Q`T_|L5X1cJE8)eY$n#O?ive{7*k0 z&(XiqJAKKq-LF3HJLzuKUpO}|?b-Ub|5Ru1H9xoh=Ii*s@6C*>)xmZxKc}Qr%P4SI z+#$W>#hin8>X>%ZRqXqDHM7OJ~$?`FBu@@cEG zy5-gWKB*~OXkREcvGBzYv$Heo?*uOUoq6Ds+4eV!r!C8MGR%5g!1h_~bd7o8{l_=1 ztdG5Sr7+IyhTXT*_jN?pYDLBWTUHRsAJkJ+E#scOc5m;B;>B-l{X+wFS0qK6|NO9W z#kDQpa@PIb^7+fE@3EH_-pG^Py5IJ7jNTUYTp#A$y&;x$l{fTi`Gs|R z`KNx|ZgKv6fB(i+SqH;X?o3{`>ejQph5IzWR2GJX)+)YSvr5X}YW1pP##a1?4Zg5C z@Z4vZdvW3C@8$KEWUcy7-SzzbVooXZ1KB0OFn$RPPAg#00)rVJ_dsE1M+qC#1yQK_ z;xf7S*Owj3yv4q!_RZqu8+i{H|Iwc_{ge5=v$gArf7z9u3!e6FZQ|M)ujgznowxD) zefD+QJ1^{5nD@=@nDw3R&zl~6V|=u3ZRP&2_gDFCkGI`*qeA*t#4elLfA18?z1v~2p)0A%bc+Qahx)8;n-_cjFA|^g{Qvc~&zI_2Oz!LyJ$JiMZ~wK|rbUmhpL4bQ zZTol8avt0FRp#?oGjC0gKl6N7-VXQo5lPh-`mZf6+w$sITp1`ZuWVj_mA7I4gQ}PO z<@4lE6t6jTF6`RBg~kWY-?0;QIQskv+X2%{z~oiJ){(yIrjk + + + + + +tbb::flow::interface10::internal::successor_cache< T, M > Class Template Reference + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::successor_cache< T, M > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00149.html b/doc/html/a00149.html new file mode 100644 index 0000000..6cdf68f --- /dev/null +++ b/doc/html/a00149.html @@ -0,0 +1,435 @@ + + + + + + +tbb::interface7::task_arena Class Reference + + + + + + + +
+ +
+
tbb::interface7::task_arena Class Reference
+
+
+ +

#include <task_arena.h>

+
+Inheritance diagram for tbb::interface7::task_arena:
+
+
+ + + +
+ + + + + +

+Classes

struct  attach
 Tag class used to indicate the "attaching" constructor. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 task_arena (int max_concurrency_=automatic, unsigned reserved_for_masters=1)
 Creates task_arena with certain concurrency limits. More...
 
task_arena (const task_arena &s)
 Copies settings from another task_arena.
 
task_arena (attach)
 Creates an instance of task_arena attached to the current arena of the thread.
 
+void initialize ()
 Forces allocation of the resources for the task_arena as specified in constructor arguments.
 
+void initialize (int max_concurrency_, unsigned reserved_for_masters=1)
 Overrides concurrency level and forces initialization of internal representation.
 
+void initialize (attach)
 Attaches this instance to the current arena of the thread.
 
void terminate ()
 
 ~task_arena ()
 
bool is_active () const
 
template<typename F >
void enqueue (F &&f)
 
+template<typename F >
void enqueue (const F &f)
 
template<typename F >
void enqueue (F &&f, priority_t p)
 
+void enqueue (const F &f, priority_t p)
 
template<typename F >
internal::return_type_or_void
+< F >::type 
execute (F &f)
 
template<typename F >
internal::return_type_or_void
+< F >::type 
execute (const F &f)
 
void debug_wait_until_empty ()
 
+int max_concurrency () const
 Returns the maximal number of threads that can work inside the arena.
 
+ + + +

+Static Public Member Functions

static int current_thread_index ()
 
+ + + + + +

+Friends

+class tbb::internal::task_scheduler_observer_v3
 
+int tbb::this_task_arena::max_concurrency ()
 
+

Detailed Description

+

1-to-1 proxy representation class of scheduler's arena Constructors set up settings only, real construction is deferred till the first method invocation Destructor only removes one of the references to the inner arena representation. Final destruction happens when all the references (and the work) are gone.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
tbb::interface7::task_arena::task_arena (int max_concurrency_ = automatic,
unsigned reserved_for_masters = 1 
)
+
+inline
+
+ +

Creates task_arena with certain concurrency limits.

+

Sets up settings only, real construction is deferred till the first method invocation

+
    +
  • max_concurrency specifies total number of slots in arena where threads work
  • +
  • reserved_for_masters specifies number of slots to be used by master threads only. Value of 1 is default and reflects behavior of implicit arenas.
  • +
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
tbb::interface7::task_arena::~task_arena ()
+
+inline
+
+

Removes the reference to the internal arena representation, and destroys the external object. Not thread safe wrt concurrent invocations of other methods.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static int tbb::interface7::task_arena::current_thread_index ()
+
+inlinestatic
+
+

Returns the index, aka slot number, of the calling thread in its current arena This method is deprecated and replaced with this_task_arena::current_thread_index()

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void tbb::interface7::task_arena::debug_wait_until_empty ()
+
+inline
+
+

Wait for all work in the arena to be completed Even submitted by other application threads Joins arena if/when possible (in the same way as execute())

+ +
+
+ +
+
+
+template<typename F >
+ + + + + +
+ + + + + + + + +
void tbb::interface7::task_arena::enqueue (F && f)
+
+inline
+
+

Enqueues a task into the arena to process a functor, and immediately returns. Does not require the calling thread to join the arena

+ +
+
+ +
+
+
+template<typename F >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void tbb::interface7::task_arena::enqueue (F && f,
priority_t p 
)
+
+inline
+
+

Enqueues a task with priority p into the arena to process a functor f, and immediately returns. Does not require the calling thread to join the arena

+ +
+
+ +
+
+
+template<typename F >
+ + + + + +
+ + + + + + + + +
internal::return_type_or_void<F>::type tbb::interface7::task_arena::execute (F & f)
+
+inline
+
+

Joins the arena and executes a mutable functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).

+ +
+
+ +
+
+
+template<typename F >
+ + + + + +
+ + + + + + + + +
internal::return_type_or_void<F>::type tbb::interface7::task_arena::execute (const F & f)
+
+inline
+
+

Joins the arena and executes a constant functor, then returns If not possible to join, wraps the functor into a task, enqueues it and waits for task completion Can decrement the arena demand for workers, causing a worker to leave and free a slot to the calling thread Since C++11, the method returns the value returned by functor (prior to C++11 it returns void).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool tbb::interface7::task_arena::is_active () const
+
+inline
+
+

Returns true if the arena is active (initialized); false otherwise. The name was chosen to match a task_scheduler_init method with the same semantics.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void tbb::interface7::task_arena::terminate ()
+
+inline
+
+

Removes the reference to the internal arena representation. Not thread safe wrt concurrent invocations of other methods.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • task_arena.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00149.png b/doc/html/a00149.png new file mode 100644 index 0000000000000000000000000000000000000000..e9685d4171a2c2b80abd7f134114e57d1cfc52ca GIT binary patch literal 656 zcmeAS@N?(olHy`uVBq!ia0vp^3xGI)gBeJ!Z0=(NQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;So7@Gz7IW5D3yfRZKs$|BpE>JnE!JwMyCeBdZ9Id`fwk@9F#~+cY z^TQ{9H_Co>#w_O9>W!wKo7u%Cl`O~>%!#@E*i6qTZ1+;bFU{^CvDcdSn9XIX+e?;z z?EKn%^ddWB{C~^puDe}U!MoTtocS_wTc6&OAJLlY^xZYTB}xa^yzrQ`@4{N^iV3?6 zkJ?wTd)H3;ZU1IYdQ|AF95d_aqgO93UllRw-`sahdE$S(81!y=URqd}%cA z$zp~nOC)U>gS|2n8EZoL8>VixdhmFo#lu$({`_fx(!| zp+S;W;Xn_QK!O`1hrwb7mKlLa(!c&Q0F6qW$Z#zbD!PT)ZuYg!pOe>z*&kRDQ=ZsYIeC7F+x(x8MSgGC>$!1vv3O8T4SVi{W7aoncih`u z)KDwRzx_^Fp?BeG2kX~dYovJDR~YAR^!)fv{ogBwIop~nek(KG5f()F^~*1<bP0l+XkKda59^ literal 0 HcmV?d00001 diff --git a/doc/html/a00150.html b/doc/html/a00150.html new file mode 100644 index 0000000..c01fda5 --- /dev/null +++ b/doc/html/a00150.html @@ -0,0 +1,131 @@ + + + + + + +tbb::task_group Class Reference + + + + + + + +
+ +
+
tbb::task_group Class Reference
+
+
+
+Inheritance diagram for tbb::task_group:
+
+
+ + +tbb::internal::task_group_base + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename F >
void run (task_handle< F > &h)
 
+template<typename F >
void run (F &&f)
 
+template<typename F >
void run (const F &f)
 
+template<typename F >
task_group_status run_and_wait (const F &f)
 
+template<typename F >
task_group_status run_and_wait (task_handle< F > &h)
 
- Public Member Functions inherited from tbb::internal::task_group_base
task_group_base (uintptr_t traits=0)
 
+template<typename F >
void run (task_handle< F > &h)
 
+task_group_status wait ()
 
+bool is_canceling ()
 
+void cancel ()
 
+ + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from tbb::internal::task_group_base
+task & owner ()
 
+template<typename F >
task_group_status internal_run_and_wait (F &f)
 
+template<typename Task , typename F >
void internal_run (__TBB_FORWARDING_REF(F) f)
 
- Protected Attributes inherited from tbb::internal::task_group_base
+empty_task * my_root
 
+task_group_context my_context
 
+
The documentation for this class was generated from the following file:
    +
  • task_group.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00150.png b/doc/html/a00150.png new file mode 100644 index 0000000000000000000000000000000000000000..d42b601be28042a7d338382ac8733c816f06abe6 GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^n}N84gBeK9F4tNQq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0xjbDQLn;{G&b?i<+JJ{4d{OY<|MK$h zBKmHt$+$dTX%x3YHeM`LV|_o|TTQUEo&9Ty7Ga_$p`={D|SNeJOxnHaI-%U#^p9Hd{6u4swB=G?`3p}wZL{foRNFSzylcN)6Ak1ytzKS~o#m+8NDt9o|e^S1xr3RiZmTHKXt8`9?Q zx^-D;TJihK=Poa|EB9nCzhjlXe@^K)>9;387R_0``SqOA*U~#bb`@_8+?}`MPpzK$ zzOu5J5l=Tq$M2C{|ExIHT<+e=O?f;1-;ZLyvnFc&D(Q6^HPPnVdZS96L%;If+WLK| zQC;`vKmVo}hJ}{qxGt->91?o_j`VZ=)_eNrR;?1B1SCE#*}N*tX7OhO9_M(5BOf>~ zNXlB(*L_pJyYTahJ9A6=&qbOuyi=IV_{b9&qL+Z7TLKJeeB3@YrAv|=4&h6HvG9^d z;QZ@zkN=c*Mn~ogOLW;k+%x6)N2B$3#r+STPTjTBJ-Ypx=S!v7N zuCOw%r*9qatV!Z;SZ+C2`uN$Wht@qfr0(FF&EKHD<4WbfSY4-Ejh`>(KRLGEdUs8p z&8dm^L+z}eKi#_b=+1T0OAkazaP3`{m!p~{y=!?M!<>b+=Vo3`p1XW{5pSLOxp&h! q9yFSlvF+%A`eSC+t`3jzKg|EG^ouF6xhx0f6b4UMKbLh*2~7aefv{!( literal 0 HcmV?d00001 diff --git a/doc/html/a00151.html b/doc/html/a00151.html new file mode 100644 index 0000000..632f594 --- /dev/null +++ b/doc/html/a00151.html @@ -0,0 +1,114 @@ + + + + + + +tbb::internal::task_group_base Class Reference + + + + + + + +
+ +
+
tbb::internal::task_group_base Class Reference
+
+
+
+Inheritance diagram for tbb::internal::task_group_base:
+
+
+ + +tbb::structured_task_group +tbb::task_group + +
+ + + + + + + + + + + + + +

+Public Member Functions

task_group_base (uintptr_t traits=0)
 
+template<typename F >
void run (task_handle< F > &h)
 
+task_group_status wait ()
 
+bool is_canceling ()
 
+void cancel ()
 
+ + + + + + + + + +

+Protected Member Functions

+task & owner ()
 
+template<typename F >
task_group_status internal_run_and_wait (F &f)
 
+template<typename Task , typename F >
void internal_run (__TBB_FORWARDING_REF(F) f)
 
+ + + + + +

+Protected Attributes

+empty_task * my_root
 
+task_group_context my_context
 
+
The documentation for this class was generated from the following file:
    +
  • task_group.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00151.png b/doc/html/a00151.png new file mode 100644 index 0000000000000000000000000000000000000000..e95fec5546162fcf72b876a7571a40174f6db6a5 GIT binary patch literal 1324 zcmeAS@N?(olHy`uVBq!ia0y~yU@QQ#J2;quWs402SiPrPzWe*W zVnb!bp#v2{mpGsN3OL4L8|AwDC+iON|IAhAPsYPq zxBK>jf%2EXDt1R!xE!&&s%@h5s5qj+#YG9IYGOyLyNgQFLqWk#uu!^qoR{WvrUMKn ze;5rIEF&x&;??ik4W+*Fs$n|mN~!>Bb;v0z_>&097u!joQF6yeDKm-I)|s>bJ4yJx-tra-0Z+W zViej~(BQI8agV)i{o35T^4Xuyrmp8d`SbV!Z|?fy*Y z_U|i~*e9o3ynbP()P*ln`5|?3-8_$1H-45n@A`V@?QZYX9|`GJXWeTJFKh{lko)SY zTvWs5yFRP;d2!_I-}3d24aOIyO)1M>|9hFkVWsZrzNL?X5>DQlwYvDf-^1_cgKh=5 zN`)t{|M`0Hq1&C$W_{XiRHK*|xqS9VZPlmsE&6J^u6cjn+O|JDXj`lK)$+i@vp-&y zei(lBL$zL?m74b3eeJV8OzTWlD+oJr#T$Q<9Q9D%Ta&b>z;-V8X2^f{0UPlh8 zYEBG)__VNRzl!N`ughuK)#*3Wt9w-5e&T#6J=@yA!t>VQL;IsEG?&J&|G!KBx5ZiW zw%OmGxx4T$ySDS;#^s53ZrJ!oZ@nJ9eplGy=XRw$^F{Y<+^O6=d5P^c$s_u=RIx4gh8pY>tk-&5$bwaLrPQF*&jsphBB`g>E)t1dJD zzPYq&>iM<7mp3cjy*>S5c=x(qx#S67Z0wY4YKz&~)IF>Ba7|zGKEd|O)@%M8)0gyr zs4JMX<@j{&`aO=@g%Wq|jOE!M_~SUp#yXF-e0w3!s0ni){uc#W^Rd{gOJ(nI^C=>p sR%{pn9#?U_^zP0TE# + + + + + +tbb::task_group_context Struct Reference + + + + + + + +
+
+
tbb::task_group_context Struct Reference
+
+
+ +

#include <parallel_invoke.h>

+

Detailed Description

+

Dummy to avoid cluttering the bulk of the header with enormous amount of ifdefs.

+

The documentation for this struct was generated from the following file:
    +
  • parallel_invoke.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00153.html b/doc/html/a00153.html new file mode 100644 index 0000000..00b3afb --- /dev/null +++ b/doc/html/a00153.html @@ -0,0 +1,94 @@ + + + + + + +tbb::task_handle< F > Class Template Reference + + + + + + + +
+ +
+
tbb::task_handle< F > Class Template Reference
+
+
+
+Inheritance diagram for tbb::task_handle< F >:
+
+
+ + + +
+ + + + + + + + +

+Public Member Functions

task_handle (const F &f)
 
task_handle (F &&f)
 
+void operator() () const
 
+ + + + + + + + +

+Friends

+template<typename _F >
class internal::task_handle_task
 
+class task_group
 
+class structured_task_group
 
+
The documentation for this class was generated from the following file:
    +
  • task_group.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00153.png b/doc/html/a00153.png new file mode 100644 index 0000000000000000000000000000000000000000..5f640e9e7369f83c7c304b581f01b7969a27ed2f GIT binary patch literal 538 zcmV+#0_FXQP)%jey0000OP)t-s|Ns90 z008Lh^>vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d00050Nkle}aAxV+WgJEViTmbLt0x(|Zz_?sa!Ep|ZiQ)_#C&2(Xh0=?310Yhmk!}D)N;lFC zfJo^^x&aU=-AFe8BBdMY20)}wxM5~CUKqe=B}QTZL|QSXNBiab0axyJ`i{7-UJHOu zzs3Lvv|yC0JA>B8+FYvZV>`hTSpwSI6189WBaAt-WG@d_{EHi@MQ-xC_GJZoGrI+K zK6csd$7({iJ{P%5cLVw9`lI3S9%IzhR&6m#z#gM~rMDSCE4B9khVyp2DK~6zZtTnl zT8Z80b~d2vN53=w8)svCQ{0I4?5}$eY)T!d?%V4(1z?;M1&07*qoM6N<$f=U|nMF0Q* literal 0 HcmV?d00001 diff --git a/doc/html/a00154.html b/doc/html/a00154.html new file mode 100644 index 0000000..9881e60 --- /dev/null +++ b/doc/html/a00154.html @@ -0,0 +1,74 @@ + + + + + + +tbb::internal::task_handle_task< F > Class Template Reference + + + + + + + +
+ +
+
tbb::internal::task_handle_task< F > Class Template Reference
+
+
+
+Inheritance diagram for tbb::internal::task_handle_task< F >:
+
+
+ + + +
+ + + + +

+Public Member Functions

task_handle_task (task_handle< F > &h)
 
+
The documentation for this class was generated from the following file:
    +
  • task_group.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00154.png b/doc/html/a00154.png new file mode 100644 index 0000000000000000000000000000000000000000..229263c6223fbf739b854a1eafa70239ec72a2cf GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^mw`BdgBeI}`MY5*kdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~{O#%D7*fIbcJ9SVs}%%TtK*9P{qN6T zw1Q_*_BO9_J=4&V4z6Zi=6y+NW)d@0cwMbLgK92$PI^?lJ6QT(qo$9#=dZr+*BAY% zS#|Se-dgo*nZYwpz1992@^0;EWBr*bcaJIiy}vVib>SSZce>)vPvSPuXR}Z~wbMM* zThHrK?VWcjp8S*jCW*{1nY84`lF2GZ(*x9vH*aL9XcIq>!1LluRj<0~g3HmF7Apnk ze!9c_L*7HZ;l~nThnh>A3U)791m>48b@*E`9#Nmm@My9h!$(gP=?~dw&ag2vOLRe1 zrI%KP-`@Z0=RbLe!@oAbz4@Y|FyZKx_ss7JGm>b1;tO<_u>(Yb4jd4f_C?}?XREQI~(fzyVUsIoIb7pee4sZUdMfteZM?=XZf2a z->&bxeDv>?WuMRgUTOQita_i__ZYdej;pR~t4D5rYgIc + + + + + +tbb::task_scheduler_init Class Reference + + + + + + + + +
+ +

Class delimiting the scope of task scheduler activity. + More...

+ +

#include <task_scheduler_init.h>

+
+Inheritance diagram for tbb::task_scheduler_init:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void __TBB_EXPORTED_METHOD initialize (int number_of_threads=automatic)
 Ensure that scheduler exists for this thread. More...
 
void __TBB_EXPORTED_METHOD initialize (int number_of_threads, stack_size_type thread_stack_size)
 The overloaded method with stack size parameter. More...
 
+void __TBB_EXPORTED_METHOD terminate ()
 Inverse of method initialize.
 
+void blocking_terminate ()
 terminate() that waits for worker threads termination. Throws exception on error.
 
+bool blocking_terminate (const std::nothrow_t &) __TBB_NOEXCEPT(true)
 terminate() that waits for worker threads termination. Returns false on error.
 
task_scheduler_init (int number_of_threads=automatic, stack_size_type thread_stack_size=0)
 Shorthand for default constructor followed by call to initialize(number_of_threads).
 
~task_scheduler_init ()
 Destroy scheduler for this thread if thread has no other live task_scheduler_inits.
 
+bool is_active () const
 Returns true if scheduler is active (initialized); false otherwise.
 
+ + + + +

+Static Public Member Functions

static int __TBB_EXPORTED_FUNC default_num_threads ()
 Returns the number of threads TBB scheduler would create if initialized by default. More...
 
+ + + + + + + +

+Static Public Attributes

+static const int automatic = -1
 Typedef for number of threads that is automatic.
 
+static const int deferred = -2
 Argument to initialize() or constructor that causes initialization to be deferred.
 
+

Detailed Description

+

Class delimiting the scope of task scheduler activity.

+

A thread can construct a task_scheduler_init object and keep it alive while it uses TBB's tasking subsystem (including parallel algorithms).

+

This class allows to customize properties of the TBB task pool to some extent. For example it can limit concurrency level of parallel work initiated by the given thread. It also can be used to specify stack size of the TBB worker threads, though this setting is not effective if the thread pool has already been created.

+

If a parallel construct is used without task_scheduler_init object previously created, the scheduler will be initialized automatically with default settings, and will persist until this thread exits. Default concurrency level is defined as described in task_scheduler_init::initialize().

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads ()
+
+static
+
+ +

Returns the number of threads TBB scheduler would create if initialized by default.

+

Result returned by this method does not depend on whether the scheduler has already been initialized.

+

Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state.

+

Before TBB 3.0 U4 this method returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.

+

NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool.

+ +
+
+ +
+
+ + + + + + + + +
void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize (int number_of_threads = automatic)
+
+ +

Ensure that scheduler exists for this thread.

+

A value of -1 lets TBB decide on the number of threads, which is usually maximal hardware concurrency for this process, that is the number of logical CPUs on the machine (possibly limited by the processor affinity mask of this process (Windows) or of this thread (Linux, FreeBSD). It is preferable option for production code because it helps to avoid nasty surprises when several TBB based components run side-by-side or in a nested fashion inside the same process.

+

The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted.

+ +

Referenced by task_scheduler_init().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize (int number_of_threads,
stack_size_type thread_stack_size 
)
+
+ +

The overloaded method with stack size parameter.

+

Overloading is necessary to preserve ABI compatibility

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • task_scheduler_init.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00155.png b/doc/html/a00155.png new file mode 100644 index 0000000000000000000000000000000000000000..58550fd5aa8d025a8c6f44950d758c08a4175849 GIT binary patch literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^{XiVR!3-qDuU?A=QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;8Nldchb9Ubp=OTo+eqy7JTZO8L5ysNyP1>vgf`@?vrX%`&EAKI-k5rHKi(i%ii4Q zW=lOLt$W3IUSz|xw9RWnS8dju^kwtBACEuuM0~8si$CZ8>CAVJN$+0t+8qA-Gk6~N z&#w=5*nR%D()*v~`6tK!sISyr`ZwXF|F6#}Pyf_;PFnwDqDnkt<(V^&I3CDWF|q_1 z%)72F7GN-sQ(Yv$M6MyitDK=`sXfEKOY#iyFZmnRe_=lm{)_p6_Fu*iQ~xpi@Ty0Z z-u^Q=P0T~WK|&R%_6g&M(8^_5|F8Bj`+j_ReB$2cHmju9&;BpZzhOG_`B^_NC%;_v zvH1J18LRnrm*qZI&6&UVtnSro`;Y50o0dJ!_#3J0eRayVi;qekAAXbkrtNBL`R+M$ z!i8_%j;NKf$?L0(c+&Fx$NM|aBjX-F-Sg}A)iZ0&)~4IM2@m^edj6i>yz3L#maom* zA8qq@=lo+O-+xvl`@Q$CU%&3N%;(jSxu>TVp0wNl%O)y3@6wtl(+?M)&~IR + + + + + +tbb::interface6::task_scheduler_observer Class Reference + + + + + + + +
+ +
+
tbb::interface6::task_scheduler_observer Class Reference
+
+
+
+Inheritance diagram for tbb::interface6::task_scheduler_observer:
+
+
+ + +tbb::internal::task_scheduler_observer_v3 + +
+ + + + + +

+Public Types

enum  { keep_awake = false, +allow_sleep = true + }
 Return commands for may_sleep()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 task_scheduler_observer (bool local=false)
 Construct local or global observer in inactive state (observation disabled). More...
 
 task_scheduler_observer (task_arena &a)
 Construct local observer for a given arena in inactive state (observation disabled). More...
 
virtual ~task_scheduler_observer ()
 
void observe (bool state=true)
 Enable or disable observation. More...
 
virtual bool may_sleep ()
 The callback can be invoked by a worker thread before it goes to sleep. More...
 
- Public Member Functions inherited from tbb::internal::task_scheduler_observer_v3
void __TBB_EXPORTED_METHOD observe (bool state=true)
 Enable or disable observation. More...
 
+bool is_observing () const
 Returns true if observation is enabled, false otherwise.
 
task_scheduler_observer_v3 ()
 Construct observer with observation disabled.
 
virtual void on_scheduler_entry (bool)
 Entry notification. More...
 
virtual void on_scheduler_exit (bool)
 Exit notification. More...
 
+virtual ~task_scheduler_observer_v3 ()
 Destructor automatically switches observation off if it is enabled.
 
+ + + + + + + +

+Friends

+class internal::task_scheduler_observer_v3
 
+class internal::observer_proxy
 
+class internal::observer_list
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
tbb::interface6::task_scheduler_observer::task_scheduler_observer (bool local = false)
+
+inlineexplicit
+
+ +

Construct local or global observer in inactive state (observation disabled).

+

For a local observer entry/exit notifications are invoked whenever a worker thread joins/leaves the arena of the observer's owner thread. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task. TODO: Obsolete. Global observer semantics is obsolete as it violates master thread isolation guarantees and is not composable. Thus the current default behavior of the constructor is obsolete too and will be changed in one of the future versions of the library.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
tbb::interface6::task_scheduler_observer::task_scheduler_observer (task_arena & a)
+
+inlineexplicit
+
+ +

Construct local observer for a given arena in inactive state (observation disabled).

+

entry/exit notifications are invoked whenever a thread joins/leaves arena. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual tbb::interface6::task_scheduler_observer::~task_scheduler_observer ()
+
+inlinevirtual
+
+

Destructor protects instance of the observer from concurrent notification. It is recommended to disable observation before destructor of a derived class starts, otherwise it can lead to concurrent notification callback on partly destroyed object

+ +

References observe().

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool tbb::interface6::task_scheduler_observer::may_sleep ()
+
+inlinevirtual
+
+ +

The callback can be invoked by a worker thread before it goes to sleep.

+

If it returns false ('keep_awake'), the thread will keep spinning and looking for work. It will not be called for master threads.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void tbb::interface6::task_scheduler_observer::observe (bool state = true)
+
+inline
+
+ +

Enable or disable observation.

+

Warning: concurrent invocations of this method are not safe. Repeated calls with the same state are no-ops.

+ +

References tbb::internal::task_scheduler_observer_v3::observe(), and tbb::relaxed.

+ +

Referenced by ~task_scheduler_observer().

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • task_scheduler_observer.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00156.png b/doc/html/a00156.png new file mode 100644 index 0000000000000000000000000000000000000000..37496e90766c364ef54c599c792827549384d309 GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^-+?%QgBeJE@)kA+QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;Z{ z0A-2QRtvvnYVIm8Ta{bQ6aQ@oTj1r@59h4h_M#;IUS9v(i?iQdY5lrF7Uq8}j|< z=e~DW%;Z*0<=*90TU=G!xODx>ciZ+EtzIcNQ|qnWrMHKkH^2XBci#EuoNtTP?|heG zwrxeolTp6%lcOoy-(lO-H~S|5WH-*;jUU+{!*{&#gm_xn_OL& zo!ckbzxvQj9`QbvX%<+l*4EtO48(KV8{eG>z{KJx6@|%LW&abMzUfkewV;AG6gx72* zn%7Dz@Ndg&0ERdL0eLsgr7A3}3cv`0sCIZ=x94hKXR9HDTXl$QL&xSgJx_+;le9K>Xy|T5N;$&RyKWlQ(=YzM3cW2LzsM}rF9-MZf zI8~y3>b1PY_wBdV`yH}N>2i|Y^ycW{-E)l=2pFX9Te*8_`Q{zJbDu9xFZpgQ*tKw< zxNTO|#GS99F=Us#um0ZT6}PH(Ecout&?B}vwQ$<4uQBB&(&07+`*+^gfAX_@r{(h5 zyPoBL`BHbg+WvB^gSm9a^U8OxD>Zy}&Fi;W?`fg^x+^69F592<12sxfpMF)n+b6af z7(?vK&RaF`{7}6czI3A~--FOUs + + + + + +tbb::internal::task_scheduler_observer_v3 Class Reference + + + + + + + +
+ +
+
tbb::internal::task_scheduler_observer_v3 Class Reference
+
+
+
+Inheritance diagram for tbb::internal::task_scheduler_observer_v3:
+
+
+ + +tbb::interface6::task_scheduler_observer + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void __TBB_EXPORTED_METHOD observe (bool state=true)
 Enable or disable observation. More...
 
+bool is_observing () const
 Returns true if observation is enabled, false otherwise.
 
task_scheduler_observer_v3 ()
 Construct observer with observation disabled.
 
virtual void on_scheduler_entry (bool)
 Entry notification. More...
 
virtual void on_scheduler_exit (bool)
 Exit notification. More...
 
+virtual ~task_scheduler_observer_v3 ()
 Destructor automatically switches observation off if it is enabled.
 
+ + + + + + + +

+Friends

+class observer_proxy
 
+class observer_list
 
+class interface6::task_scheduler_observer
 
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void __TBB_EXPORTED_METHOD tbb::internal::task_scheduler_observer_v3::observe (bool state = true)
+
+ +

Enable or disable observation.

+

For local observers the method can be used only when the current thread has the task scheduler initialized or is attached to an arena.

+

Repeated calls with the same state are no-ops.

+ +

Referenced by tbb::interface6::task_scheduler_observer::observe(), and ~task_scheduler_observer_v3().

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_entry (bool )
+
+inlinevirtual
+
+ +

Entry notification.

+

Invoked from inside observe(true) call and whenever a worker enters the arena this observer is associated with. If a thread is already in the arena when the observer is activated, the entry notification is called before it executes the first stolen task.

+

Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void tbb::internal::task_scheduler_observer_v3::on_scheduler_exit (bool )
+
+inlinevirtual
+
+ +

Exit notification.

+

Invoked from inside observe(false) call and whenever a worker leaves the arena this observer is associated with.

+

Obsolete semantics. For global observers it is called by a thread before the first steal since observation became enabled.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • task_scheduler_observer.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00157.png b/doc/html/a00157.png new file mode 100644 index 0000000000000000000000000000000000000000..b87088c72d9c41832275a3a031b419b26a0c66d6 GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^-+?%QgBeJE@)kA+QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;4=V13AKCq~|J|0(uNtiXU-V7OeRJ@3akb9ws{Q*m zs%*^+UMBUqa$QB?4hFe*K7S{0-D_Xd<@z}3jAQ^ugmL)uzf0dee$E`bGFQn&fBQ?V zuV-I=<(#&0*{=6Lr$&2!JrR=mUHNX_??2C~_nrS7V7Gj)MD{xCUA@}xUeDk4C;smH z@1JVc-i|qV^KYNJ&Cc(}cUiwAnesVClTyyCY<^#(= zFnDw<*(KjU=g{O=b*KC^ZC1aFJ3Zr%RT+b3!Ft1dwzZi0);vW{tAb(Dzg--~n2CRg?M24$?7esRu}P3-yS-!9Be`uX&isNamqHsO7R z5t(o0zSXVx`by=E^D>Psil^gD?A}aK3{pur^k>^U>%IB?tLxX-eCc^tr|x8U<@=)d zv*xA9Rjv9xFMj9Nkp46C=X_5I&$W%Y@LN@2;>RO7k#m;v*GdFRASUu&LJdLN363}5o?mDmG&=4Zl%>g(4( zf0w;+6)>U_vhFG=MSf7co4$0TsGrM|*gvYZ^MPTel>-#7+)&!x0g9=$Tb~`4cVA@O Vo7?ef9WdiCc)I$ztaD0e0szS&(CYvI literal 0 HcmV?d00001 diff --git a/doc/html/a00158.html b/doc/html/a00158.html new file mode 100644 index 0000000..3a060d6 --- /dev/null +++ b/doc/html/a00158.html @@ -0,0 +1,160 @@ + + + + + + +tbb::tbb_allocator< T > Class Template Reference + + + + + + + +
+ +
+
tbb::tbb_allocator< T > Class Template Reference
+
+
+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. + More...

+ +

#include <tbb_allocator.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + + + + + + + + + + + + +

+Public Types

enum  malloc_type { scalable, +standard + }
 Specifies current allocator.
 
+typedef
+internal::allocator_type< T >
+::value_type 
value_type
 
+typedef value_type * pointer
 
+typedef const value_type * const_pointer
 
+typedef value_type & reference
 
+typedef const value_type & const_reference
 
+typedef size_t size_type
 
+typedef ptrdiff_t difference_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

tbb_allocator (const tbb_allocator &) throw ()
 
+template<typename U >
 tbb_allocator (const tbb_allocator< U > &) throw ()
 
+pointer address (reference x) const
 
+const_pointer address (const_reference x) const
 
+pointer allocate (size_type n, const void *=0)
 Allocate space for n objects.
 
+void deallocate (pointer p, size_type)
 Free previously allocated block of memory.
 
+size_type max_size () const throw ()
 Largest value for which method allocate might succeed.
 
+template<typename U , typename... Args>
void construct (U *p, Args &&...args)
 Copy-construct value at location pointed to by p.
 
+void construct (pointer p, value_type &&value)
 
+void construct (pointer p, const value_type &value)
 
+void destroy (pointer p)
 Destroy value at location pointed to by p.
 
+ + + + +

+Static Public Member Functions

+static malloc_type allocator_type ()
 Returns current allocator.
 
+

Detailed Description

+

template<typename T>
+class tbb::tbb_allocator< T >

+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.

+

The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.

+

The documentation for this class was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00159.html b/doc/html/a00159.html new file mode 100644 index 0000000..e2ee849 --- /dev/null +++ b/doc/html/a00159.html @@ -0,0 +1,88 @@ + + + + + + +tbb::tbb_allocator< void > Class Template Reference + + + + + + + +
+ +
+
tbb::tbb_allocator< void > Class Template Reference
+
+
+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. + More...

+ +

#include <tbb_allocator.h>

+ + + + +

+Classes

struct  rebind
 
+ + + + + + + +

+Public Types

+typedef void * pointer
 
+typedef const void * const_pointer
 
+typedef void value_type
 
+

Detailed Description

+

template<>
+class tbb::tbb_allocator< void >

+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.

+

The documentation for this class was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00160.html b/doc/html/a00160.html new file mode 100644 index 0000000..a3bd4db --- /dev/null +++ b/doc/html/a00160.html @@ -0,0 +1,226 @@ + + + + + + +tbb::tbb_exception Class Reference + + + + + + + +
+ +
+
tbb::tbb_exception Class Referenceabstract
+
+
+ +

Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::tbb_exception:
+
+
+ + +tbb::captured_exception +tbb::movable_exception< ExceptionData > + +
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual tbb_exceptionmove ()=0 throw ()
 Creates and returns pointer to the deep copy of this exception object. More...
 
virtual void destroy ()=0 throw ()
 Destroys objects created by the move() method. More...
 
virtual void throw_self ()=0
 Throws this exception object. More...
 
+virtual const char * name () const =0 throw ()
 Returns RTTI name of the originally intercepted exception.
 
+virtual const char * what () const __TBB_override=0 throw ()
 Returns the result of originally intercepted exception's what() method.
 
void operator delete (void *p)
 
+

Detailed Description

+

Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.

+

If an unhandled exception of the type derived from tbb::tbb_exception is intercepted by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in the root thread. The root thread is the thread that has started the outermost algorithm or root task sharing the same task_group_context with the guilty algorithm/task (the one that threw the exception first).

+

Note: when documentation mentions workers with respect to exception handling, masters are implied as well, because they are completely equivalent in this context. Consequently a root thread can be master or worker thread.

+

NOTE: In case of nested algorithms or complex task hierarchies when the nested levels share (explicitly or by means of implicit inheritance) the task group context of the outermost level, the exception may be (re-)thrown multiple times (ultimately - in each worker on each nesting level) before reaching the root thread at the outermost level. IMPORTANT: if you intercept an exception derived from this class on a nested level, you must re-throw it in the catch block by means of the "throw;" operator.

+

TBB provides two implementations of this interface: tbb::captured_exception and template class tbb::movable_exception. See their declarations for more info.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
virtual void tbb::tbb_exception::destroy ()
throw (
)
+
+pure virtual
+
+ +

Destroys objects created by the move() method.

+

Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method.

+ +

Implemented in tbb::movable_exception< ExceptionData >, and tbb::captured_exception.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
virtual tbb_exception* tbb::tbb_exception::move ()
throw (
)
+
+pure virtual
+
+ +

Creates and returns pointer to the deep copy of this exception object.

+

Move semantics is allowed.

+ +

Implemented in tbb::movable_exception< ExceptionData >, and tbb::captured_exception.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void tbb::tbb_exception::operator delete (void * p)
+
+inline
+
+

Operator delete is provided only to allow using existing smart pointers with TBB exception objects obtained as the result of applying move() operation on an exception thrown out of TBB scheduler.

+

When overriding method move() make sure to override operator delete as well if memory is allocated not by TBB's scalable allocator.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void tbb::tbb_exception::throw_self ()
+
+pure virtual
+
+ +

Throws this exception object.

+

Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown.

+ +

Implemented in tbb::movable_exception< ExceptionData >, and tbb::captured_exception.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00160.png b/doc/html/a00160.png new file mode 100644 index 0000000000000000000000000000000000000000..a067095e06ef057d1150b21de7f8d9c17cb3c66c GIT binary patch literal 1423 zcmb_ceN>WH7=OvwTbV=3(z38ot^6n^tAq-*9ZbQ^%uk#%4Q)guR7P?v!BcHvUzDj- zP-@OpAS0=Rg$fnqk!`LL{7CWh6q7P@_L`#TUbpu5&d%9A=id8#-E*Jk_j}Hh8yOMm zGH>ZT003MlVdN+PK-ghfIL8S-332U6`0|MSIwoX#dKwmge* zteA3x204}W`3WRltW;%V8Aht5f8;ALJ$_9u-f8&M(LRMbD`z2rU)W)(Q@6LTk9Uj) zEkmyMyqieUJ(Cs(TBWV`t1{&3EMVtMYT;(9bYvr~&g>+lLqHyll(Q-hwSq$R_MVjj ztnd9K1u!YIfDm?o26WZi5N`J+>Z1S&e(81wyZ{^isd0h)|5n$pEX#L8xP~77RMBNa zkUwHM^G}+VSfe%tY+_}Udh{ThCBOt7(pF)5TowEVVwktZQ!~x#cvH~*SCn-aP=W?Ukze{Q8TU8_wTUh_|{n10S5uM;Tx*I zyYN3Tlo!q@W?p^e!~UjugM06i;#}d=(l{@4$tiPUHu>ZNIO!Sfq*+iJ$gR|#7V;h) zIoCQ=1$m%{7l~}$a~VWCYCGgpXmVh&n-W;`@s=ab(^9)oNE$;zXtZRqr173lQUcWD z3Jtb$VY=R`Y!5FNgqE?Fgk^4Qx#FUdZ{Ev$Zlso@(L?Ww`My$oXVzL0*Ib#RrrAWc zbDtYosl)GaSo#ySyj~xW*8jY+de3+yKELJCvWv32W@D`%w$G_0-tjHLA`Lvh*S8jz zy2M&)>}Jwqf;=CZUTn}W-!!?WZN&2G;Os^6=2$_UXr%5LldMnN&mQyb-Otq!A9^)J z;ZF9N__uSJW{z}ssyisdt?Z5rI!XgIXSrnsEVFoF%IaGF`(!;n$p8DQsjbUZE`qhY zu7`l~P*GwEkHDM}nZ=c~uZNIE&`FVL$v_2mbFnLN`%UK3ZBtJElu61H + + + + + +tbb::internal::tbb_exception_ptr Class Reference + + + + + + + +
+ +
+
tbb::internal::tbb_exception_ptr Class Reference
+
+
+ +

Exception container that preserves the exact copy of the original exception. + More...

+ +

#include <tbb_exception.h>

+ + + + + + + + +

+Public Member Functions

void destroy () throw ()
 Destroys this objects. More...
 
+void throw_self ()
 Throws the contained exception .
 
+ + + + + + + + +

+Static Public Member Functions

+static tbb_exception_ptrallocate ()
 
+static tbb_exception_ptrallocate (const tbb_exception &tag)
 
+static tbb_exception_ptrallocate (captured_exception &src)
 This overload uses move semantics (i.e. it empties src)
 
+

Detailed Description

+

Exception container that preserves the exact copy of the original exception.

+

This class can be used only when the appropriate runtime support (mandated by C++11) is present

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + +
void tbb::internal::tbb_exception_ptr::destroy ()
throw (
)
+
+ +

Destroys this objects.

+

Note that objects of this type can be created only by the allocate() method.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00162.html b/doc/html/a00162.html new file mode 100644 index 0000000..13a5da1 --- /dev/null +++ b/doc/html/a00162.html @@ -0,0 +1,185 @@ + + + + + + +tbb::internal::tbb_thread_v3 Class Reference + + + + + + + +
+ +
+
tbb::internal::tbb_thread_v3 Class Reference
+
+
+ +

Versioned thread class. + More...

+ +

#include <tbb_thread.h>

+ + + + +

+Classes

class  id
 
+ + + + + +

+Public Types

+typedef HANDLE native_handle_type
 
+typedef pthread_t native_handle_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

tbb_thread_v3 (const tbb_thread_v3 &)
 
tbb_thread_v3 () __TBB_NOEXCEPT(true)
 Constructs a thread object that does not represent a thread of execution.
 
+template<class F >
 tbb_thread_v3 (F f)
 Constructs an object and executes f() in a new thread.
 
+template<class F , class X >
 tbb_thread_v3 (F f, X x)
 Constructs an object and executes f(x) in a new thread.
 
+template<class F , class X , class Y >
 tbb_thread_v3 (F f, X x, Y y)
 Constructs an object and executes f(x,y) in a new thread.
 
+tbb_thread_v3operator= (tbb_thread_v3 &x)
 
+void swap (tbb_thread_v3 &t) __TBB_NOEXCEPT(true)
 
+bool joinable () const __TBB_NOEXCEPT(true)
 
+void __TBB_EXPORTED_METHOD join ()
 The completion of the thread represented by *this happens before join() returns.
 
+void __TBB_EXPORTED_METHOD detach ()
 When detach() returns, *this no longer represents the possibly continuing thread of execution.
 
+id get_id () const __TBB_NOEXCEPT(true)
 
+native_handle_type native_handle ()
 
+ + + + +

+Static Public Member Functions

static unsigned __TBB_EXPORTED_FUNC hardware_concurrency () __TBB_NOEXCEPT(true)
 The number of hardware thread contexts. More...
 
+ + + +

+Public Attributes

+tbb_thread_v3(tbb_thread_v3
+&&x) __TBB_NOEXCEPT(true)
+tbb_thread_v3
operator= (tbb_thread_v3 &&x) __TBB_NOEXCEPT(true)
 
+ + + + + +

+Friends

+void __TBB_EXPORTED_FUNC move_v3 (tbb_thread_v3 &t1, tbb_thread_v3 &t2)
 
+void tbb::swap (tbb_thread_v3 &t1, tbb_thread_v3 &t2) __TBB_NOEXCEPT(true)
 
+

Detailed Description

+

Versioned thread class.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static unsigned __TBB_EXPORTED_FUNC tbb::internal::tbb_thread_v3::hardware_concurrency ()
+
+static
+
+ +

The number of hardware thread contexts.

+

Before TBB 3.0 U4 this methods returned the number of logical CPU in the system. Currently on Windows, Linux and FreeBSD it returns the number of logical CPUs available to the current process in accordance with its affinity mask.

+

NOTE: The return value of this method never changes after its first invocation. This means that changes in the process affinity mask that took place after this method was first invoked will not affect the number of worker threads in the TBB worker threads pool.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • tbb_thread.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00163.html b/doc/html/a00163.html new file mode 100644 index 0000000..3224ff3 --- /dev/null +++ b/doc/html/a00163.html @@ -0,0 +1,160 @@ + + + + + + +tbb::thread_bound_filter Class Reference + + + + + + + +
+ +
+
tbb::thread_bound_filter Class Reference
+
+
+ +

A stage in a pipeline served by a user thread. + More...

+ +

#include <pipeline.h>

+
+Inheritance diagram for tbb::thread_bound_filter:
+
+
+ + +tbb::filter + +
+ + + + +

+Public Types

enum  result_type { success, +item_not_available, +end_of_stream + }
 
+ + + + + + + +

+Public Member Functions

result_type __TBB_EXPORTED_METHOD try_process_item ()
 If a data item is available, invoke operator() on that item. More...
 
result_type __TBB_EXPORTED_METHOD process_item ()
 Wait until a data item becomes available, and invoke operator() on that item. More...
 
+ + + +

+Protected Member Functions

thread_bound_filter (mode filter_mode)
 
+ + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Protected Attributes inherited from tbb::filter
+static const unsigned char filter_is_serial = 0x1
 The lowest bit 0 is for parallel vs. serial.
 
static const unsigned char filter_is_out_of_order = 0x1<<4
 4th bit distinguishes ordered vs unordered filters. More...
 
+static const unsigned char filter_is_bound = 0x1<<5
 5th bit distinguishes thread-bound and regular filters.
 
+static const unsigned char filter_may_emit_null = 0x1<<6
 6th bit marks input filters emitting small objects
 
static const unsigned char exact_exception_propagation
 7th bit defines exception propagation mode expected by the application. More...
 
+

Detailed Description

+

A stage in a pipeline served by a user thread.

+

Member Function Documentation

+ +
+
+ + + + + + + +
result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::process_item ()
+
+ +

Wait until a data item becomes available, and invoke operator() on that item.

+

This interface is blocking. Returns 'success' if an item was processed. Returns 'end_of_stream' if there are no more items to process. Never returns 'item_not_available', as it blocks until another return condition applies.

+ +
+
+ +
+
+ + + + + + + +
result_type __TBB_EXPORTED_METHOD tbb::thread_bound_filter::try_process_item ()
+
+ +

If a data item is available, invoke operator() on that item.

+

This interface is non-blocking. Returns 'success' if an item was processed. Returns 'item_not_available' if no item can be processed now but more may arrive in the future, or if token limit is reached. Returns 'end_of_stream' if there are no more items to process.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • pipeline.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00163.png b/doc/html/a00163.png new file mode 100644 index 0000000000000000000000000000000000000000..7eab1d5112ca5b7d7067137bdd3c71a2d17e0a60 GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0vp^6M?vcgBeI(xc}1$NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~wRpNXhEy=Vo%?XoDgz!jf4eznfA9b3 z>Y%~x_T*7snmXU{tms?Lv!?BzF>@(Xak;;Xk?E_-WF)-TxaNfTc8QHf_ ztvt+lVL}T zw1d_q$-8+sr(BZ!>U46-CrQSX#Y!v!!G=s7D7Y!?sMAoQ{A3(>!Xa{@5zc*_N?mnm%MAgv*+4NJx}+Y zO8s^9SNFZ&>YKK`+IP~uMfa2@i3GbL@MY=J*z2iG4}|tH1Wi2m;xr5%i8Q}^7ZPYA@=sKjY2M)Z4A+~ZRZP)Hhyw=iRe5lsWt0fMn2o5 zEB5o*zHJe_myfKNnRz3ND zeb22U_4C{>u97{yxb)H9GmCpKe&1`>zj@cvo7vv4@5M!*o8x}(oz&LqxBUBE+pgqX uV@a6rZ2Q`m8|-MH+l%e5ojD`)k)KR)#N literal 0 HcmV?d00001 diff --git a/doc/html/a00164.html b/doc/html/a00164.html new file mode 100644 index 0000000..937c49c --- /dev/null +++ b/doc/html/a00164.html @@ -0,0 +1,96 @@ + + + + + + +tbb::internal::thread_closure_0< F > Struct Template Reference + + + + + + + +
+ +
+
tbb::internal::thread_closure_0< F > Struct Template Reference
+
+
+
+Inheritance diagram for tbb::internal::thread_closure_0< F >:
+
+
+ + +tbb::internal::thread_closure_base + +
+ + + + + + + + + +

+Public Member Functions

thread_closure_0 (const F &f)
 
- Public Member Functions inherited from tbb::internal::thread_closure_base
+void * operator new (size_t size)
 
+void operator delete (void *ptr)
 
+ + + +

+Static Public Member Functions

+static __TBB_NATIVE_THREAD_ROUTINE start_routine (void *c)
 
+ + + +

+Public Attributes

+F function
 
+
The documentation for this struct was generated from the following file:
    +
  • tbb_thread.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00164.png b/doc/html/a00164.png new file mode 100644 index 0000000000000000000000000000000000000000..ca33e7fe184cb31e2bdd96f46b569d3fabe4e756 GIT binary patch literal 794 zcmeAS@N?(olHy`uVBq!ia0vp^*MK;HgBeH$U8%kaq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0R(iTPhEy=Vo%=fPi2_fnz2B03|CQfA zVY;C<)AQEVGRKfPlOA~2^t}CfdXvuSiiC+vE*fNd2ICdU-emN~_KcD+8s`Na(^;^4A&#a5R zlb#50yv9k_2vY3jX@wb!SGTwi`~S9ptghVA>c&#u*7h%OXz^ET&`l1D z^n!J=m;*5Q7^={fJaG5WT>8<0NrD%q!g1l(TdyWh-R{r8=o)dCVa|eyb{?;-9x`n1 z+sOXlL+7=#=l=^wtxmhJ&*wg3aS+pGbz2d6L z>i-5RQ58{UHTR?1-U&yw3%BpJTAz{Hz36LOn9d=I(#wkJb7vKQ{(utH|DJ7Q*nBSk z^!HvevGS7dG|x*IlzR>;OXk;vd$@?2>?-c Bfam}K literal 0 HcmV?d00001 diff --git a/doc/html/a00165.html b/doc/html/a00165.html new file mode 100644 index 0000000..746a908 --- /dev/null +++ b/doc/html/a00165.html @@ -0,0 +1,110 @@ + + + + + + +tbb::internal::thread_closure_1< F, X > Struct Template Reference + + + + + + + +
+ +
+
tbb::internal::thread_closure_1< F, X > Struct Template Reference
+
+
+ +

Structure used to pass user function with 1 argument to thread. + More...

+ +

#include <tbb_thread.h>

+
+Inheritance diagram for tbb::internal::thread_closure_1< F, X >:
+
+
+ + +tbb::internal::thread_closure_base + +
+ + + + + + + + + +

+Public Member Functions

thread_closure_1 (const F &f, const X &x)
 
- Public Member Functions inherited from tbb::internal::thread_closure_base
+void * operator new (size_t size)
 
+void operator delete (void *ptr)
 
+ + + + +

+Static Public Member Functions

+static __TBB_NATIVE_THREAD_ROUTINE start_routine (void *c)
 Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll.
 
+ + + + + +

+Public Attributes

+F function
 
+X arg1
 
+

Detailed Description

+

template<class F, class X>
+struct tbb::internal::thread_closure_1< F, X >

+ +

Structure used to pass user function with 1 argument to thread.

+

The documentation for this struct was generated from the following file:
    +
  • tbb_thread.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00165.png b/doc/html/a00165.png new file mode 100644 index 0000000000000000000000000000000000000000..961925b53400cd0df57f3333002868179b5c8a9f GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|`zk>Eakt!T5IW&Ab)^9#?<8p#T3TTQjF@ zJRDUT=&P02c*M+dCQVxMLu$b!5l`ljNlKagCTFkzN@?4z?pdTY*|bL` zcg1X5v;VW6iaY4nJ^SCVY)V{X-2ZzYpG9x}@csAggrDa9BCAt1tW6TrWPQKDu>}~aFZOq%#yVjM3cz!!|IBnO=9HA|;M|Mx|y}5mw%Ie9N zzV5TzFe&B9sjpX7S%3LoEwY+9Ab!`?yG_$(%spD3 zb|rV0=dm(3>&LMdY`?F&wsxz^*IhMk>!-eBz3@AI%jq}U=LOy`t<||)>MOgJ*C=|X zs9Egxb8=;O&5qPv*R3ww{n{%?7+)_OIh_P=BGhKwh3-v6kya_h-o^{fx4);tJE)G#pfT0~$P}7BEaSabQ%+Y+!P^ z#K79Igpo_YlUYPz5}JZKFU_T2SSB(&%7!Uq`nBuo^0IyPOa;I&<~h)|>!!8zU2A>b ztI;_}Y?$}%SP;*+)x-MS`-y8ONS6FuI8%A;_OyrZzyH*Jy*%ym)hx+Ve7-YOOTL}h zUM6^TtKaph+uoU%z2qtB%*uP36@RUC>tdBRQ`^s$7-vr3B6wtXd5r3*z}{_TwJ(3Y zsFPGND0*6zbyc?NccRCaBJ~ZbFJIrh=5TkC^@8k(#Y>lcci8N{(Td^g(%Z!%i<_C> z)w_rNzAafgJ8#m)xfjn>h?kuItFV~C?Od+);%_~%T6eh@d_SKt{ibyKm1UW)dw#8Z zy}SA4u4TKfvCUk2hHLh^=yd+wdD4%nu5W!Jt|j%r{?(L6{0`6gF8}|=ob$TraOD;a nNmh$1u)ygTe~DWM4f%rbtL literal 0 HcmV?d00001 diff --git a/doc/html/a00166.html b/doc/html/a00166.html new file mode 100644 index 0000000..eb71e8a --- /dev/null +++ b/doc/html/a00166.html @@ -0,0 +1,103 @@ + + + + + + +tbb::internal::thread_closure_2< F, X, Y > Struct Template Reference + + + + + + + +
+ +
+
tbb::internal::thread_closure_2< F, X, Y > Struct Template Reference
+
+
+
+Inheritance diagram for tbb::internal::thread_closure_2< F, X, Y >:
+
+
+ + +tbb::internal::thread_closure_base + +
+ + + + + + + + + +

+Public Member Functions

thread_closure_2 (const F &f, const X &x, const Y &y)
 
- Public Member Functions inherited from tbb::internal::thread_closure_base
+void * operator new (size_t size)
 
+void operator delete (void *ptr)
 
+ + + + +

+Static Public Member Functions

+static __TBB_NATIVE_THREAD_ROUTINE start_routine (void *c)
 Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll.
 
+ + + + + + + +

+Public Attributes

+F function
 
+X arg1
 
+Y arg2
 
+
The documentation for this struct was generated from the following file:
    +
  • tbb_thread.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00166.png b/doc/html/a00166.png new file mode 100644 index 0000000000000000000000000000000000000000..aa52099a9d5bbc6b96933a805511a865e9ce5c50 GIT binary patch literal 857 zcmeAS@N?(olHy`uVBq!ia0vp^zkoP^gBeJ&Z=KN&q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0UU<4VhEy=Vo%^=vi53s*?8mG2{8zsJ zk)4h6!;PIcQ#LCd?aUQua`X5+JvDOLjHHQ6I%d6?B;qR^J898N-Ktx+KBn!OZSGlQ z#ojIL`D%saUbFvmmM*zu*Iifq@P5y{psJm9f1|^1$cdi%wO8uR|84UwXT3iqtYtp? ztfjL3tH0A%rvCU*cKLJMp3R>WJ(=%z{gT`C$0GV~;hQb*LMP?!yv-Bd94heJ@6VUd zD~?^8WOCsy_xrs+mrhYpE?)qA!5 zSKN8C?sLzd72gAvO?$ZMd)2QAU)ieOAGx*Sz2fQq%~$1*`@N16+V(WhIEMF@Zt0vK zFL__ReELeR{NmYP-wyr$`sbKO!V|rp(W{qL+-Oz2cq;bZsdn$Lj$V@TPjAdyAkQuN zcBX;Td1JrT+$Hr7r8i9y6>nYidG^!wj&_gR1Irr?8DG2aHI!S_zs#Cxx{1Tps+qaP z%cM(Zuimcrhxg0#o%dY!|6C~h{Fn5Xymi01-oNf!`Qe$L+)<0@nYQ7g`+DNSe%xwZ z`(f^pb^Uk#PWkD=Xz(h9?ZEnA`#%iMe;Iy>?OCSB%u|wlNd3hBnJbuWuE2tO + + + + + +tbb::internal::thread_closure_base Struct Reference + + + + + + + +
+ +
+
tbb::internal::thread_closure_base Struct Reference
+
+
+
+Inheritance diagram for tbb::internal::thread_closure_base:
+
+
+ + +tbb::internal::thread_closure_0< F > +tbb::internal::thread_closure_1< F, X > +tbb::internal::thread_closure_2< F, X, Y > + +
+ + + + + + +

+Public Member Functions

+void * operator new (size_t size)
 
+void operator delete (void *ptr)
 
+
The documentation for this struct was generated from the following file:
    +
  • tbb_thread.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00167.png b/doc/html/a00167.png new file mode 100644 index 0000000000000000000000000000000000000000..0324577e724e80dc1c635675c7fc1bf9494f27bb GIT binary patch literal 1409 zcmaJ>c~H|w6yAg&ghCLC29N=YNfiu7B4{{NTm2 zC>WHnpg>SdkYbXbU_>z-Q>}7|Q7QpJNPl6bGxm>mXLk1;-@Nbbn{PIsLHE(q zG1UP8=uv#V`~lEF!Zt%&13oLIq)GTPX6z2|R;g65IXqS8|NJ(L7um21m({S;aJo%`@$t1Ss_EQ$+f5Un=U*~E#hDM(bE^L;vE4ir zV?M#jeAuBN3bzMMPlUXanCk;qm}Sf#8+?8yaj5Z2L_`1SUs!Y04oTvc@^nV#g~9Yv zsmKY!z~x(UtT)e1%(E);{0@r`1yXsZh`PTSRal1|Q+K;hMfB^Hcp*)w`LXCT`G)+fC(NnEler!Dg1HV~{N7vk0_C>D2;uubB zx;IwL-n;3{LVB6v>?5G-9@V3B`0kJO&0J~|p|$)}*;Nm0XMI}Xpr84ZMVB@qDLk@a z_F%r_1*=-@P1_Z!Z|@qa33rv9aBcaJ30|ZQA|Bb%0Ce{oxY4Gs##*4BcJ|lP?r_j0 zA{@XfnbU5t3IY#041oh6mVX}&AdvH5#c8#MOyQuxEfm~bFaeg$Y9qKfKuOf;ohxAm z%>RF3OTtq}zatgbt;v8miyk*a^|D%CIm5H?7&U|YW5r_#h%AV##R2Zj%NjIb>CnT% zgVn}z$Pj23B{0zd^-v8*{wMtY%>;+@ql={L@n)Stug%C>37B1!0$-7mZDb&qRcXYD z@l3R@zuP?}Tv_%$1tz3H&i#7n7x{`H;_w%CO+oD3ts-1f)RE$D{IQ=rn5Z{21` zlZ_?|iA&k2X=jl#gwr**O)Dj{YHP&H{DH*g{kd#Ufi&jMshW`GK>Zh;3+pR}l|J|x zbalARRXKjfq&m|Z+4h(`fh@fEG`4LnPcbyVSI>s;cwqO@(ziazYwKQKsucuw**FiX zO6_LGs^xD5{N;Pk(jJeeuv+xfqXV#>arhFU$_puJ*zD$eqi#@E7g%02Ci#QMA>DAR z{wStdkuN}(@Xk}M^9~ZLF6|RvSQHc$M!$X@Ex`dHxNn4sE(drMyE+yH|Y%}=6 zM}@6RyQZZ1L{t{pQ)QCs-W^x;gw6Yd7IW?kJNdcCZstvB=9YysoK!1T&C-VbZ_Y*r_)wJtigoP0mr4jnKM4*PKy|1Qw*@-> z^0S@xCh6$YP~#44T6CFE<%|6I!|e?3rHga>xK+WGTJwFwX9eVfjqFa6sOLCeiX9L+ zhFJL-VYIsG>|`<<(#px`lRs%soi<*~>WkA?2rP1{T&eyYEEI0SKEV<}Sz?Ob8kf}c zUVDYX9pko?K!nM#E1VkhJ+8j~-61imJvqw{e&S2-f5^!YiP|8GDI_~l57uH6>heEA qa{srGj636tC<5gu`TTeBn1{0#(SuibR|QD*M+zw3bgxDaX7=BA!)Z+b literal 0 HcmV?d00001 diff --git a/doc/html/a00168.html b/doc/html/a00168.html new file mode 100644 index 0000000..eb08103 --- /dev/null +++ b/doc/html/a00168.html @@ -0,0 +1,101 @@ + + + + + + +tbb::tick_count Class Reference + + + + + + + + +
+ +

Absolute timestamp. + More...

+ +

#include <tick_count.h>

+ + + + + +

+Classes

class  interval_t
 Relative time interval. More...
 
+ + + + +

+Public Member Functions

tick_count ()
 Construct an absolute timestamp initialized to zero.
 
+ + + + + + + +

+Static Public Member Functions

+static tick_count now ()
 Return current time.
 
+static double resolution ()
 Return the resolution of the clock in seconds per tick.
 
+ + + + +

+Friends

+interval_t operator- (const tick_count &t1, const tick_count &t0)
 Subtract two timestamps to get the time interval between.
 
+

Detailed Description

+

Absolute timestamp.

+

The documentation for this class was generated from the following file:
    +
  • tick_count.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00169.html b/doc/html/a00169.html new file mode 100644 index 0000000..332bf60 --- /dev/null +++ b/doc/html/a00169.html @@ -0,0 +1,172 @@ + + + + + + +tbb::flow::interface10::internal::untyped_receiver Class Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::internal::untyped_receiver Class Referenceabstract
+
+
+
+Inheritance diagram for tbb::flow::interface10::internal::untyped_receiver:
+
+
+ + +tbb::flow::interface10::receiver< continue_msg > +tbb::flow::interface10::receiver< T > +tbb::flow::interface10::continue_receiver + +
+ + + + + + + + + +

+Public Types

+typedef untyped_sender predecessor_type
 The predecessor type for this node.
 
+typedef
+internal::edge_container
+< predecessor_type
built_predecessors_type
 
+typedef
+built_predecessors_type::edge_list_type 
predecessor_list_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual ~untyped_receiver ()
 Destructor.
 
+template<typename X >
bool try_put (const X &t)
 Put an item to the receiver.
 
+virtual bool register_predecessor (predecessor_type &)
 Add a predecessor to the node.
 
+virtual bool remove_predecessor (predecessor_type &)
 Remove a predecessor from the node.
 
+virtual built_predecessors_typebuilt_predecessors ()=0
 
+virtual void internal_add_built_predecessor (predecessor_type &)=0
 
+virtual void internal_delete_built_predecessor (predecessor_type &)=0
 
+virtual void copy_predecessors (predecessor_list_type &)=0
 
+virtual size_t predecessor_count ()=0
 
+ + + + + + + + + + + + + +

+Protected Member Functions

+template<typename X >
task * try_put_task (const X &t)
 
+virtual task * try_put_task_wrapper (const void *p, bool is_async)=0
 
+virtual graphgraph_reference ()=0
 
+virtual void reset_receiver (reset_flags f=rf_reset_protocol)=0
 put receiver back in initial state
 
+virtual bool is_continue_receiver ()
 
+ + + + + + + + + + + + + + + + + + + +

+Friends

+template<typename , typename >
class run_and_put_task
 
+template<typename >
class limiter_node
 
+template<typename , typename >
class internal::broadcast_cache
 
+template<typename , typename >
class internal::round_robin_cache
 
+template<typename , typename >
class internal::successor_cache
 
+template<typename , typename >
class proxy_dependency_receiver
 
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00169.png b/doc/html/a00169.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c246f61c1c88275a7fc12e894bcf2469655537 GIT binary patch literal 2153 zcmcJRYg7|w8po56aI01qm3l$Y8cL$v1mq$@qJS|V*Vx4sBveHO3@9lH5~2)ssnSB+ z5Wog&kXY~>g$Pn05)v*)B66*1xg;T=i4ZO!h(JIt*-5+GJ^Q7nA9m-QdEaN|eP-sF zdH(<3nOk8Yxb^1S%^?uTdi*i}2nYm*1>>8hM&Rff`(O^7wuT))5un%W!B9OlpUP;t z4MxB2O-)URTXGxl(DciQ5CQ~DGHk!RJmCU?m@MM`51&YbYKDeVxB`o#ufH6e=7 zurEF4&8rG{)^3?a-}F4?(doyy^3dXY?&yRl^9?S&KcPYq6ckpAzQKvM;%ddk=b5oog_5i0aeWNrWeP2RKqHC%dT>I_-FskRut7!dH?eYg@s`13R zZ;N20oJqn<+Clo-sb!4Q7IV+izo`EK|CpLs=g|5_QZ+ki`*=@S{u$}ISytD_K?6wx zU8RA$(m1x<>(i}t?}Iy@S(e0T>Pd>)c8!3aG2Fd8M#)izTa$bIe7dQ0YuKgp>?qQv z;mYQ|35wwpC`B8~G;OWaFj(_#J@$@No;|vFY%k~fOlsh+t+UImbEuY??^)PC?Bc&V ztV-cW=XAVHxe7C1JP>_96DABagCp*~PIvgKBy$rB8`iYVcLfc`JOb=6)DBHA$s`!g zq62rKMmF1S+P}?x(92#Jr! z^uQA2wlJ72o@0T+8{5N9Cy7@h-&6Thjy1Z2qQV&bt1pCCypno%V(^OdbQaR92Mt_{ zv%+LAtpqW7E*9$ds$75?oM%Ied0Wi=tldnQsM2m$i^cDzoHqczk#p}byo;&tYI|kR z-{M>cHLo;nv-^qPiTRvl;iyn%B5Evd?9;G1M)2&j{cBZuadFE~>9+nz0mr)AbS_G{ zD28>BlZDb-TIk>U1pn5&&5!gM+lM9fLg}vxqeR36QZS60cAvUm8VQh1}0*Bgmo>luo> zL$oKfPx2CV!ojw0h90H)8fmCk@tEtojaHv{ULzPwSxUuM)P2o|C+J*?j-XBI_t;tJ zF{ysuZ97>dknjQrq~~n}64ziuz2FO+u@!Lp5X1Fa1^Fi>-}O9BjQHD6XW|5gDInX!xJd#P2CKFi=rjK#9?|17-2-oOpJb&kVW#2o#Y~ zU~od~{3&D5C+%@ z+w(va8{UcwGSc7$6cBq1{8T<5LLxvXFu-Mjr8>oXS|pt;8u~klQ%(%xA;&?~TX_sP z+2Mt4Mc##2XB7*}u}i-6;y21G!$W2HNa7FRJ)ICAL&Q;Z(Vz>mc)?_n{*YY-N}uj zpJnWYQOP}@@`ogJMmJVw$&*XX zYBV*v6j2${s{|}apZp)bV=UGCk4o-);PV}e57@RtZ8xr4vNVu=T}{xs2Gx@_PYzJK zPmwF!7GGqR|64_f^ao5ofHFT4XXcH<(1G;osae^>8ybIECjr*XaoMOYjGA^z#(nc6 zB(*NB(s_rMZ%=WDZh{Qzb)fd7iM&(cE>~4|se_vn#?ZhBjgVeGH3k9L|U(28Z&#=qJ%}^r + + + + + +tbb::flow::interface10::internal::untyped_sender Class Reference + + + + + + +
+ + + + + +
+
+ +
+
tbb::flow::interface10::internal::untyped_sender Class Referenceabstract
+
+
+
+Inheritance diagram for tbb::flow::interface10::internal::untyped_sender:
+
+
+ + +tbb::flow::interface10::sender< T > + +
+ + + + + + + + + + +

+Public Types

+typedef untyped_receiver successor_type
 The successor type for this node.
 
+typedef
+internal::edge_container
+< successor_type
built_successors_type
 interface to record edges for traversal & deletion
 
+typedef
+built_successors_type::edge_list_type 
successor_list_type
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool register_successor (successor_type &r)=0
 Add a new successor to this node.
 
+virtual bool remove_successor (successor_type &r)=0
 Removes a successor from this node.
 
+virtual bool try_release ()
 Releases the reserved item.
 
+virtual bool try_consume ()
 Consumes the reserved item.
 
+virtual built_successors_typebuilt_successors ()=0
 
+virtual void internal_add_built_successor (successor_type &)=0
 
+virtual void internal_delete_built_successor (successor_type &)=0
 
+virtual void copy_successors (successor_list_type &)=0
 
+virtual size_t successor_count ()=0
 
+ + + + + + + + + + + + + +

+Protected Member Functions

+template<typename X >
bool try_get (X &t)
 Request an item from the sender.
 
+template<typename X >
bool try_reserve (X &t)
 Reserves an item in the sender.
 
+virtual bool try_get_wrapper (void *p, bool is_async)=0
 
+virtual bool try_reserve_wrapper (void *p, bool is_async)=0
 
+ + + + + + + +

+Friends

+template<typename , typename >
class internal::predecessor_cache
 
+template<typename , typename >
class internal::reservable_predecessor_cache
 
+
The documentation for this class was generated from the following file: +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00170.png b/doc/html/a00170.png new file mode 100644 index 0000000000000000000000000000000000000000..e63720592a3f48c8008a41deb131c539bfe0fdaf GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0y~yU=#$h12~w0B&X%ZgFs3mz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op_E z$98XPTDs{Ti@o>NO9B7Ad_Qisiw-;{HBni=RB83@cgkB0!vy0buD_nQ#=YXPp4+KK z+ZP@4)s>of?cVo0Sv4ui0-bXzUoL-e{?L**H}@89$$s>t_MMLj@3A8cn-o6X zEf-LBk1MOLvRQig(B|u#`*P3OyQSRLDZN>`d@cX2PVcZ+!kqOFlp9J2t=K&!K-kAC{eaKcORk-N6^NI(GfvC)*UAJ>78Pop(D+ znPPuL|Kr%p^G$1)ZC=W=IjVfqy5k34tjRoneCG7GcNJ%@Pj`{noVc&%nv4C%UN@Ep z>rJDD4w%1D?l|&-xoO%K$uj-}owZC8?JAjT?%E|^XZSM(5w5^MzS{{3^R3(ubl5_V}Aew|>uy?(NUvQJU!4_3BTlU9J8%8`YOxd-s8(de#*a31Q|FO()9l z+qp%(dGjpcU(U<2|4ftPRX62M+t&2fIRE5_o9iO2OWtSO?M{7vX}?PBhWYA2b?$~j zz-WG_wCMbr-4UM-{*UkZ!6tWR!~Y%U%g(mi2^Zt z^oP_u)2|7fm6yNA)L-*3`g + + + + + +tbb::interface5::internal::use_element_copy_constructor< T, C > Struct Template Reference + + + + + + + +
+ +
+
tbb::interface5::internal::use_element_copy_constructor< T, C > Struct Template Reference
+
+
+ + + + + + +

+Public Types

+typedef tbb::internal::true_type type
 
+typedef tbb::internal::true_type type
 
+
The documentation for this struct was generated from the following file:
    +
  • concurrent_priority_queue.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00172.html b/doc/html/a00172.html new file mode 100644 index 0000000..b675417 --- /dev/null +++ b/doc/html/a00172.html @@ -0,0 +1,66 @@ + + + + + + +tbb::interface5::internal::use_element_copy_constructor< T, false > Struct Template Reference + + + + + + + +
+ +
+
tbb::interface5::internal::use_element_copy_constructor< T, false > Struct Template Reference
+
+
+ + + + +

+Public Types

+typedef tbb::internal::false_type type
 
+
The documentation for this struct was generated from the following file:
    +
  • concurrent_priority_queue.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00173.html b/doc/html/a00173.html new file mode 100644 index 0000000..1d21806 --- /dev/null +++ b/doc/html/a00173.html @@ -0,0 +1,81 @@ + + + + + + +tbb::user_abort Class Reference + + + + + + + +
+ +
+
tbb::user_abort Class Reference
+
+
+ +

Exception for user-initiated abort. + More...

+ +

#include <tbb_exception.h>

+
+Inheritance diagram for tbb::user_abort:
+
+
+ + + +
+ + + + +

+Public Member Functions

+const char * what () const __TBB_override throw ()
 
+

Detailed Description

+

Exception for user-initiated abort.

+

The documentation for this class was generated from the following file:
    +
  • tbb_exception.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00173.png b/doc/html/a00173.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f23345c2fa666d8d20a82a156062980529dae0 GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^2|ygc!3-oX+B7T&QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;(_kWU+81WOu9aPcm*PF0pg1wGLX}H&YA&*Ov?M;^sURHT*vF}Xt z)Qxub_hNh|MfI_4&D#4XVbXpeN6L@oYrC&zZ~AdvPu}*XkLyLR+|cK&S-nH_$ZmB{ z-j8Cw?KKa1^0@tWXYBc@w@Y`zlG=BoHA@{Pt-H)RN#qk}( z2Ru7(x`g|mqj)K!gO4~vO9`Wc2MTpUoD1YqhEFe;8YZ0QJhj1&@lMk6w3%<6n{I7* z`i*1lPg8?`_2;s_ZEbrt%QUg-*184jlH{g^Zq>K8Pgol%#JBB4YOdN1J@$g@#Vfsc zY0NOokJ=%A<-%{K`>b&r)>;bZoO__TXSXYR`Udrk-5KZBOZraE+4jQlWU$k1R|d&F uS~KjwF)04c<`THX%Aol5a8}y1qx{Sa7XMyw_mu&ofWgz%&t;ucLK6U>hr>?* literal 0 HcmV?d00001 diff --git a/doc/html/a00174.html b/doc/html/a00174.html new file mode 100644 index 0000000..60ae9c2 --- /dev/null +++ b/doc/html/a00174.html @@ -0,0 +1,133 @@ + + + + + + +tbb::zero_allocator< T, Allocator > Class Template Reference + + + + + + + +
+ +
+
tbb::zero_allocator< T, Allocator > Class Template Reference
+
+
+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. + More...

+ +

#include <tbb_allocator.h>

+
+Inheritance diagram for tbb::zero_allocator< T, Allocator >:
+
+
+ + + +
+ + + + +

+Classes

struct  rebind
 
+ + + + + + + + + + + + + + + + + +

+Public Types

+typedef Allocator< T > base_allocator_type
 
+typedef
+base_allocator_type::value_type 
value_type
 
+typedef
+base_allocator_type::pointer 
pointer
 
+typedef
+base_allocator_type::const_pointer 
const_pointer
 
+typedef
+base_allocator_type::reference 
reference
 
+typedef
+base_allocator_type::const_reference 
const_reference
 
+typedef
+base_allocator_type::size_type 
size_type
 
+typedef
+base_allocator_type::difference_type 
difference_type
 
+ + + + + + + + +

+Public Member Functions

zero_allocator (const zero_allocator &a) throw ()
 
+template<typename U >
 zero_allocator (const zero_allocator< U > &a) throw ()
 
+pointer allocate (const size_type n, const void *hint=0)
 
+

Detailed Description

+

template<typename T, template< typename X > class Allocator = tbb_allocator>
+class tbb::zero_allocator< T, Allocator >

+ +

Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.

+

The class is an adapter over an actual allocator that fills the allocation using memset function with template argument C as the value. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.

+

The documentation for this class was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00174.png b/doc/html/a00174.png new file mode 100644 index 0000000000000000000000000000000000000000..f03aec2f32170173a41127ef3c3e9c637b353f95 GIT binary patch literal 638 zcmeAS@N?(olHy`uVBq!ia0vp^=YcqYgBeJ6=3o2`q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0cs*SlLn;{G&b^uU+JJ|(UElKm|Kq%` zT)Q*XuzR^xgV{Y`kWU!=P<)~_{il(0b40cN-ynitqQLSYF8iOqTfC=PDMjmIV?51CP zx`UW4Tz^U}NVLB*Y2voM`mMj;+xb1Vnfu!=_}RbMH9Ix3EzI@z-d3G^dwJuuywJe7 zdk^itS<0@vJzw)oP|0k2-hfxBPQLZ)SJ>;fKHgkrBfO6L#=PxkTMP?c@<&TA$k&>` zbvJj&`E}>(cAR^$`241;r#Iem%lf`~mc!jG+bXZ`KPyme7q_GL;&i)nakBHx^B3B` z^RL~vpSOIA{n@`S+YT&vc + + + + + +tbb::zero_allocator< void, Allocator > Class Template Reference + + + + + + + +
+ +
+
tbb::zero_allocator< void, Allocator > Class Template Reference
+
+
+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. + More...

+ +

#include <tbb_allocator.h>

+
+Inheritance diagram for tbb::zero_allocator< void, Allocator >:
+
+
+ + + +
+ + + + +

+Classes

struct  rebind
 
+ + + + + + + + + +

+Public Types

+typedef Allocator< void > base_allocator_type
 
+typedef
+base_allocator_type::value_type 
value_type
 
+typedef
+base_allocator_type::pointer 
pointer
 
+typedef
+base_allocator_type::const_pointer 
const_pointer
 
+

Detailed Description

+

template<template< typename T > class Allocator>
+class tbb::zero_allocator< void, Allocator >

+ +

Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.

+

The documentation for this class was generated from the following file:
    +
  • tbb_allocator.h
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00175.png b/doc/html/a00175.png new file mode 100644 index 0000000000000000000000000000000000000000..f97e606d73f34771792a992f3bb005438d9cd609 GIT binary patch literal 679 zcmeAS@N?(olHy`uVBq!ia0vp^4}ds;gBeJgTXrr3QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;yA2;j&|Hq|W zQVtuorIzzf_FI2LF{X&+k+zbOF?V3-+;GMft6oKd31x=Khl}1u#?DLPmHBywox#g1 zgXKZ{$5pFrdD&y`*_@A$OrCDLBVl9W%XeuF)k(*0WNi8(Tw%G3W6L?lCG~eQH$`W|rKVV0+-b;C{9<-Y*z8Y;=9S;6FXpkl{q2pEZ>g`A3qE0 z2ZzkfAAV^FbY-m3W?-}-0lRs*q@*b_eAa?$%Vv*}+Ra?yZ6>wgLh9~sUtT_c{?D8# z=h*t6wfr;UBu+p5sW1JdX7ZAEx>b9(Gk7O(pO)G!bN;Z^C7Zf5JLa0p|2H(9Ov_&N zcH_DI_r)!vYF3|YkG{;OGjCpR&GG#PE4ROBWN2LW>Tjgfl~}ViGxkh=nSEeied`aQ zg4;aXy0exS9o@|GY2DuSr}ldW>?&uB{>Of#yP@~0&HY7Z_q-OZ;hZsl;_83t+7WXO zW^u7_)fTZyt3P>A$ot{U{$jS*TD#7MhXw9FzbZp(-C3>aXFfe_s9oD49%^#mkoD;9 ze{WB5eW*7zSnkg_fBF735)8>Em%h!@<}mPJH?-J N22WQ%mvv4FO#r(vCr1DP literal 0 HcmV?d00001 diff --git a/doc/html/a00193.html b/doc/html/a00193.html new file mode 100644 index 0000000..140921c --- /dev/null +++ b/doc/html/a00193.html @@ -0,0 +1,190 @@ + + + + + + +flow_graph.h File Reference + + + + + + + +
+ +
+
flow_graph.h File Reference
+
+
+ +

The graph related classes and functions. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  tbb::flow::interface10::internal::successor_cache< T, M >
 
class  tbb::flow::interface10::internal::broadcast_cache< T, M >
 
class  tbb::flow::interface10::internal::round_robin_cache< T, M >
 
class  tbb::flow::interface10::internal::predecessor_cache< T, M >
 
class  tbb::flow::interface10::internal::reservable_predecessor_cache< T, M >
 
struct  tbb::flow::interface10::null_type
 
class  tbb::flow::interface10::continue_msg
 An empty class used for messages that mean "I'm done". More...
 
class  tbb::flow::interface10::sender< T >
 Pure virtual template class that defines a sender of messages of type T. More...
 
class  tbb::flow::interface10::receiver< T >
 Pure virtual template class that defines a receiver of messages of type T. More...
 
class  tbb::flow::interface10::limiter_node< T >
 
class  tbb::flow::interface10::run_and_put_task< R, B >
 
class  tbb::flow::interface10::internal::edge_container< C >
 
class  tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
 
class  tbb::flow::interface10::graph
 The graph class. More...
 
class  tbb::flow::interface10::async_msg< T >
 
class  tbb::flow::interface10::internal::async_storage< T >
 
struct  tbb::flow::interface10::internal::async_helpers< T, typename >
 
struct  tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >
 
class  tbb::flow::interface10::internal::untyped_sender
 
class  tbb::flow::interface10::internal::untyped_receiver
 
class  tbb::flow::interface10::sender< T >
 Pure virtual template class that defines a sender of messages of type T. More...
 
class  tbb::flow::interface10::receiver< T >
 Pure virtual template class that defines a receiver of messages of type T. More...
 
class  tbb::flow::interface10::sender< T >
 Pure virtual template class that defines a sender of messages of type T. More...
 
class  tbb::flow::interface10::receiver< T >
 Pure virtual template class that defines a receiver of messages of type T. More...
 
class  tbb::flow::interface10::continue_receiver
 Base class for receivers of completion messages. More...
 
+ + + + +

+Namespaces

 tbb
 The namespace tbb contains all components of the library.
 
+ + + + +

+Constant Groups

 tbb
 The namespace tbb contains all components of the library.
 
+ + + + + + +

+Enumerations

enum  concurrency { unlimited = 0, +serial = 1 + }
 An enumeration the provides the two most common concurrency levels: unlimited and serial.
 
enum  reset_flags { rf_reset_protocol = 0, +rf_reset_bodies = 1<<0, +rf_clear_edges = 1<<1 + }
 
+ + + + + + + + + + + + + + + + + + + + + +

+Functions

+void tbb::flow::interface10::internal::activate_graph (graph &g)
 
+void tbb::flow::interface10::internal::deactivate_graph (graph &g)
 
+bool tbb::flow::interface10::internal::is_graph_active (graph &g)
 
+void tbb::flow::interface10::internal::spawn_in_graph_arena (graph &g, tbb::task &arena_task)
 Spawns a task inside graph arena.
 
+void tbb::flow::interface10::internal::add_task_to_graph_reset_list (graph &g, task *tp)
 
+template<typename F >
void tbb::flow::interface10::internal::execute_in_graph_arena (graph &g, F &f)
 Executes custom functor inside graph arena.
 
+static tbb::task * tbb::flow::interface10::combine_tasks (graph &g, tbb::task *left, tbb::task *right)
 
+template<typename K , typename T >
tbb::flow::key_from_message (const T &t)
 
+ + + +

+Variables

+static tbb::task *const tbb::flow::internal::SUCCESSFULLY_ENQUEUED = (task *)-1
 
+

Detailed Description

+

The graph related classes and functions.

+

There are some applications that best express dependencies as messages passed between nodes in a graph. These messages may contain data or simply act as signals that a predecessors has completed. The graph class and its associated node classes can be used to express such applications.

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00198.html b/doc/html/a00198.html new file mode 100644 index 0000000..1886f00 --- /dev/null +++ b/doc/html/a00198.html @@ -0,0 +1,99 @@ + + + + + + +memory_pool.h File Reference + + + + + + + +
+ +
+
memory_pool.h File Reference
+
+
+ + + + + + + + + + + + + + + + + +

+Classes

class  tbb::interface6::memory_pool_allocator< T, P >
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
struct  tbb::interface6::memory_pool_allocator< T, P >::rebind< U >
 
class  tbb::interface6::memory_pool_allocator< void, P >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
struct  tbb::interface6::memory_pool_allocator< void, P >::rebind< U >
 
class  tbb::interface6::memory_pool< Alloc >
 Thread-safe growable pool allocator for variable-size requests. More...
 
class  tbb::interface6::fixed_pool
 
+ + + + +

+Namespaces

 tbb
 The namespace tbb contains all components of the library.
 
+ + + + +

+Constant Groups

 tbb
 The namespace tbb contains all components of the library.
 
+ + + + + + + +

+Functions

+template<typename T , typename U , typename P >
bool tbb::interface6::operator== (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)
 
+template<typename T , typename U , typename P >
bool tbb::interface6::operator!= (const memory_pool_allocator< T, P > &a, const memory_pool_allocator< U, P > &b)
 
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00217.html b/doc/html/a00217.html new file mode 100644 index 0000000..73c7991 --- /dev/null +++ b/doc/html/a00217.html @@ -0,0 +1,194 @@ + + + + + + +scalable_allocator.h File Reference + + + + + + + +
+ +
+
scalable_allocator.h File Reference
+
+
+ + + + + + + + + + + + + + +

+Classes

struct  rml::MemPoolPolicy
 
class  tbb::scalable_allocator< T >
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
struct  tbb::scalable_allocator< T >::rebind< U >
 
class  tbb::scalable_allocator< void >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
struct  tbb::scalable_allocator< void >::rebind< U >
 
+ + + + + + + +

+Namespaces

 rml
 The namespace rml contains components of low-level memory pool interface.
 
 tbb
 The namespace tbb contains all components of the library.
 
+ + + + + + + +

+Constant Groups

 rml
 The namespace rml contains components of low-level memory pool interface.
 
 tbb
 The namespace tbb contains all components of the library.
 
+ + + + + +

+Typedefs

+typedef void *(* rml::rawAllocType )(intptr_t pool_id, size_t &bytes)
 
+typedef int(* rml::rawFreeType )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)
 
+ + + + + + + + + +

+Enumerations

enum  ScalableAllocationResult {
+  TBBMALLOC_OK, +TBBMALLOC_INVALID_PARAM, +TBBMALLOC_UNSUPPORTED, +TBBMALLOC_NO_MEMORY, +
+  TBBMALLOC_NO_EFFECT +
+ }
 
enum  AllocationModeParam { TBBMALLOC_USE_HUGE_PAGES, +USE_HUGE_PAGES = TBBMALLOC_USE_HUGE_PAGES, +TBBMALLOC_SET_SOFT_HEAP_LIMIT + }
 
enum  ScalableAllocationCmd { TBBMALLOC_CLEAN_ALL_BUFFERS, +TBBMALLOC_CLEAN_THREAD_BUFFERS + }
 
enum  MemPoolError {
+  POOL_OK = TBBMALLOC_OK, +INVALID_POLICY = TBBMALLOC_INVALID_PARAM, +UNSUPPORTED_POLICY = TBBMALLOC_UNSUPPORTED, +NO_MEMORY = TBBMALLOC_NO_MEMORY, +
+  NO_EFFECT = TBBMALLOC_NO_EFFECT +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void *__TBB_EXPORTED_FUNC scalable_malloc (size_t size)
 
void __TBB_EXPORTED_FUNC scalable_free (void *ptr)
 
void *__TBB_EXPORTED_FUNC scalable_realloc (void *ptr, size_t size)
 
void *__TBB_EXPORTED_FUNC scalable_calloc (size_t nobj, size_t size)
 
int __TBB_EXPORTED_FUNC scalable_posix_memalign (void **memptr, size_t alignment, size_t size)
 
void *__TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size, size_t alignment)
 
void *__TBB_EXPORTED_FUNC scalable_aligned_realloc (void *ptr, size_t size, size_t alignment)
 
void __TBB_EXPORTED_FUNC scalable_aligned_free (void *ptr)
 
size_t __TBB_EXPORTED_FUNC scalable_msize (void *ptr)
 
int __TBB_EXPORTED_FUNC scalable_allocation_mode (int param, intptr_t value)
 
int __TBB_EXPORTED_FUNC scalable_allocation_command (int cmd, void *param)
 
+MemPoolError rml::pool_create_v1 (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)
 
+bool rml::pool_destroy (MemoryPool *memPool)
 
+void * rml::pool_malloc (MemoryPool *memPool, size_t size)
 
+void * rml::pool_realloc (MemoryPool *memPool, void *object, size_t size)
 
+void * rml::pool_aligned_malloc (MemoryPool *mPool, size_t size, size_t alignment)
 
+void * rml::pool_aligned_realloc (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)
 
+bool rml::pool_reset (MemoryPool *memPool)
 
+bool rml::pool_free (MemoryPool *memPool, void *object)
 
+MemoryPool * rml::pool_identify (void *object)
 
+template<typename T , typename U >
bool tbb::operator== (const scalable_allocator< T > &, const scalable_allocator< U > &)
 
+template<typename T , typename U >
bool tbb::operator!= (const scalable_allocator< T > &, const scalable_allocator< U > &)
 
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00236.html b/doc/html/a00236.html new file mode 100644 index 0000000..970c6f6 --- /dev/null +++ b/doc/html/a00236.html @@ -0,0 +1,116 @@ + + + + + + +rml Namespace Reference + + + + + + + +
+ +
+
rml Namespace Reference
+
+
+ +

The namespace rml contains components of low-level memory pool interface. +More...

+ + + + +

+Classes

struct  MemPoolPolicy
 
+ + + + + +

+Typedefs

+typedef void *(* rawAllocType )(intptr_t pool_id, size_t &bytes)
 
+typedef int(* rawFreeType )(intptr_t pool_id, void *raw_ptr, size_t raw_bytes)
 
+ + + +

+Enumerations

enum  MemPoolError {
+  POOL_OK = TBBMALLOC_OK, +INVALID_POLICY = TBBMALLOC_INVALID_PARAM, +UNSUPPORTED_POLICY = TBBMALLOC_UNSUPPORTED, +NO_MEMORY = TBBMALLOC_NO_MEMORY, +
+  NO_EFFECT = TBBMALLOC_NO_EFFECT +
+ }
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

+MemPoolError pool_create_v1 (intptr_t pool_id, const MemPoolPolicy *policy, rml::MemoryPool **pool)
 
+bool pool_destroy (MemoryPool *memPool)
 
+void * pool_malloc (MemoryPool *memPool, size_t size)
 
+void * pool_realloc (MemoryPool *memPool, void *object, size_t size)
 
+void * pool_aligned_malloc (MemoryPool *mPool, size_t size, size_t alignment)
 
+void * pool_aligned_realloc (MemoryPool *mPool, void *ptr, size_t size, size_t alignment)
 
+bool pool_reset (MemoryPool *memPool)
 
+bool pool_free (MemoryPool *memPool, void *object)
 
+MemoryPool * pool_identify (void *object)
 
+

Detailed Description

+

The namespace rml contains components of low-level memory pool interface.

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00239.html b/doc/html/a00239.html new file mode 100644 index 0000000..df843ee --- /dev/null +++ b/doc/html/a00239.html @@ -0,0 +1,686 @@ + + + + + + +tbb Namespace Reference + + + + + + + +
+ +
+
tbb Namespace Reference
+
+
+ +

The namespace tbb contains all components of the library. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  aligned_space
 Block of space aligned sufficiently to construct an array T with N elements. More...
 
struct  atomic
 Primary template for atomic. More...
 
struct  atomic< void * >
 Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->. More...
 
class  blocked_range
 A range over which to iterate. More...
 
class  blocked_range2d
 A 2-dimensional range that models the Range concept. More...
 
class  blocked_range3d
 A 3-dimensional range that models the Range concept. More...
 
class  cache_aligned_allocator
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  cache_aligned_allocator< void >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  combinable
 Thread-local storage with optional reduction. More...
 
class  concurrent_bounded_queue
 A high-performance thread-safe blocking concurrent bounded queue. More...
 
class  concurrent_vector
 Concurrent vector container. More...
 
class  mutex
 Wrapper around the platform's native lock. More...
 
class  null_mutex
 A mutex which does nothing. More...
 
class  null_rw_mutex
 A rw mutex which does nothing. More...
 
struct  task_group_context
 
struct  pre_scan_tag
 Used to indicate that the initial scan is being performed. More...
 
struct  final_scan_tag
 Used to indicate that the final scan is being performed. More...
 
class  parallel_while
 Parallel iteration over a stream, with optional addition of more work. More...
 
class  filter
 A stage in a pipeline. More...
 
class  thread_bound_filter
 A stage in a pipeline served by a user thread. More...
 
class  pipeline
 A processing pipeline that applies filters to items. More...
 
class  queuing_mutex
 Queuing mutex with local-only spinning. More...
 
class  queuing_rw_mutex
 Queuing reader-writer mutex with local-only spinning. More...
 
class  recursive_mutex
 
class  scalable_allocator
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  scalable_allocator< void >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  spin_mutex
 A lock that occupies a single byte. More...
 
class  spin_rw_mutex_v3
 Fast, unfair, spinning reader-writer lock with backoff and writer-preference. More...
 
class  task_handle
 
class  task_group
 
class  structured_task_group
 
class  task_scheduler_init
 Class delimiting the scope of task scheduler activity. More...
 
class  tbb_allocator
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  tbb_allocator< void >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  zero_allocator
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  zero_allocator< void, Allocator >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  bad_last_alloc
 Exception for concurrent containers. More...
 
class  improper_lock
 Exception for PPL locks. More...
 
class  user_abort
 Exception for user-initiated abort. More...
 
class  missing_wait
 Exception for missing wait on structured_task_group. More...
 
class  invalid_multiple_scheduling
 Exception for repeated scheduling of the same task_handle. More...
 
class  tbb_exception
 Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. More...
 
class  captured_exception
 This class is used by TBB to propagate information about unhandled exceptions into the root thread. More...
 
class  movable_exception
 Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. More...
 
class  tick_count
 Absolute timestamp. More...
 
+ + + + + + + + + + + + + + + +

+Typedefs

+typedef
+internal::critical_section_v4 
critical_section
 
typedef
+interface7::internal::padded_mutex
+< interface7::internal::x86_eliding_mutex,
+false > 
speculative_spin_mutex
 A cross-platform spin mutex with speculative lock acquisition. More...
 
+typedef spin_rw_mutex_v3 spin_rw_mutex
 
+typedef std::size_t stack_size_type
 
+typedef
+tbb::internal::task_scheduler_observer_v3 
task_scheduler_observer
 
+typedef internal::tbb_thread_v3 tbb_thread
 Users reference thread class by name tbb_thread.
 
+ + + + + + + + + +

+Enumerations

enum  memory_semantics { full_fence, +acquire, +release, +relaxed + }
 Specifies memory semantics. More...
 
enum  ets_key_usage_type { ets_key_per_instance, +ets_no_key + }
 enum for selecting between single key and key-per-instance versions
 
enum  task_group_status { not_complete, +complete, +canceled + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

__TBB_DECL_ATOMIC (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) __TBB_DECL_ATOMIC_ALT(unsigned
 
+size_t __TBB_DECL_ATOMIC_ALT (int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template< typename T > struct atomic< T * >
 Specialization for atomic<T*> with arithmetic and operator->.
 
+template<memory_semantics M, typename T >
load (const atomic< T > &a)
 
+template<memory_semantics M, typename T >
void store (atomic< T > &a, T value)
 
+template<typename T , typename U >
bool operator== (const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
 
+template<typename T , typename U >
bool operator!= (const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
 
+template<typename Key , typename T , typename HashCompare , typename A1 , typename A2 >
bool operator== (const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)
 
+template<typename Key , typename T , typename HashCompare , typename A1 , typename A2 >
bool operator!= (const concurrent_hash_map< Key, T, HashCompare, A1 > &a, const concurrent_hash_map< Key, T, HashCompare, A2 > &b)
 
+template<typename Key , typename T , typename HashCompare , typename A >
void swap (concurrent_hash_map< Key, T, HashCompare, A > &a, concurrent_hash_map< Key, T, HashCompare, A > &b)
 
+template<typename T , class A1 , class A2 >
bool operator== (const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)
 
+template<typename T , class A1 , class A2 >
bool operator!= (const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)
 
+template<typename T , class A1 , class A2 >
bool operator< (const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)
 
+template<typename T , class A1 , class A2 >
bool operator> (const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)
 
+template<typename T , class A1 , class A2 >
bool operator<= (const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)
 
+template<typename T , class A1 , class A2 >
bool operator>= (const concurrent_vector< T, A1 > &a, const concurrent_vector< T, A2 > &b)
 
+template<typename T , class A >
void swap (concurrent_vector< T, A > &a, concurrent_vector< T, A > &b)
 
+template<typename T , typename U >
bool operator== (const scalable_allocator< T > &, const scalable_allocator< U > &)
 
+template<typename T , typename U >
bool operator!= (const scalable_allocator< T > &, const scalable_allocator< U > &)
 
+bool is_current_task_group_canceling ()
 
+template<class F >
task_handle< typename
+internal::strip< F >::type > 
make_task (F &&f)
 
+template<class F >
task_handle< F > make_task (const F &f)
 
+template<typename T , typename U >
bool operator== (const tbb_allocator< T > &, const tbb_allocator< U > &)
 
+template<typename T , typename U >
bool operator!= (const tbb_allocator< T > &, const tbb_allocator< U > &)
 
+template<typename T1 , template< typename X1 > class B1, typename T2 , template< typename X2 > class B2>
bool operator== (const zero_allocator< T1, B1 > &a, const zero_allocator< T2, B2 > &b)
 
+template<typename T1 , template< typename X1 > class B1, typename T2 , template< typename X2 > class B2>
bool operator!= (const zero_allocator< T1, B1 > &a, const zero_allocator< T2, B2 > &b)
 
int __TBB_EXPORTED_FUNC TBB_runtime_interface_version ()
 The function returns the interface version of the TBB shared library being used. More...
 
+void swap (internal::tbb_thread_v3 &t1, internal::tbb_thread_v3 &t2) __TBB_NOEXCEPT(true)
 
+void move (tbb_thread &t1, tbb_thread &t2)
 
+tick_count::interval_t operator- (const tick_count &t1, const tick_count &t0)
 
parallel_for

See also requirements on Range and parallel_for Body.

+
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body)
 Parallel iteration over range with default partitioner. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, const simple_partitioner &partitioner)
 Parallel iteration over range with simple partitioner. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, const auto_partitioner &partitioner)
 Parallel iteration over range with auto_partitioner. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, const static_partitioner &partitioner)
 Parallel iteration over range with static_partitioner. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, affinity_partitioner &partitioner)
 Parallel iteration over range with affinity_partitioner. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, task_group_context &context)
 Parallel iteration over range with default partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with simple partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with auto_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, const static_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with static_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_for (const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with affinity_partitioner and user-supplied context. More...
 
parallel_for_each
template<typename Iterator , typename Function >
void parallel_for_each (Iterator first, Iterator last, const Function &f, task_group_context &context)
 Calls function f for all items from [first, last) interval using user-supplied context. More...
 
template<typename Range , typename Function >
void parallel_for_each (Range &rng, const Function &f, task_group_context &context)
 Calls function f for all items from rng using user-supplied context. More...
 
template<typename Range , typename Function >
void parallel_for_each (const Range &rng, const Function &f, task_group_context &context)
 Calls function f for all items from const rng user-supplied context. More...
 
+template<typename Iterator , typename Function >
void parallel_for_each (Iterator first, Iterator last, const Function &f)
 Uses default context.
 
+template<typename Range , typename Function >
void parallel_for_each (Range &rng, const Function &f)
 Uses default context.
 
+template<typename Range , typename Function >
void parallel_for_each (const Range &rng, const Function &f)
 Uses default context.
 
parallel_invoke
template<typename F0 , typename F1 , typename... F>
void parallel_invoke (F0 &&f0, F1 &&f1, F &&...f)
 Executes a list of tasks in parallel and waits for all tasks to complete. More...
 
+template<typename F0 , typename F1 >
void parallel_invoke (const F0 &f0, const F1 &f1, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 >
void parallel_invoke (const F0 &f0, const F1 &f1)
 
+template<typename F0 , typename F1 , typename F2 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 >
void parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)
 
parallel_reduce

See also requirements on Range and parallel_reduce Body.

+
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body)
 Parallel iteration with reduction and default partitioner. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, const simple_partitioner &partitioner)
 Parallel iteration with reduction and simple_partitioner. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, const auto_partitioner &partitioner)
 Parallel iteration with reduction and auto_partitioner. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, const static_partitioner &partitioner)
 Parallel iteration with reduction and static_partitioner. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, affinity_partitioner &partitioner)
 Parallel iteration with reduction and affinity_partitioner. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, simple partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, auto_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, const static_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, static_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_reduce (const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, affinity_partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)
 Parallel iteration with reduction and default partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)
 Parallel iteration with reduction and simple_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)
 Parallel iteration with reduction and auto_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner)
 Parallel iteration with reduction and static_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)
 Parallel iteration with reduction and affinity_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, simple partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, auto_partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, static_partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, affinity_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void parallel_deterministic_reduce (const Range &range, Body &body)
 Parallel iteration with deterministic reduction and default partitioner. More...
 
template<typename Range , typename Body >
void parallel_deterministic_reduce (const Range &range, Body &body, task_group_context &context)
 Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_deterministic_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)
 Parallel iteration with deterministic reduction and default partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value parallel_deterministic_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, task_group_context &context)
 Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. More...
 
parallel_scan

See also requirements on Range and parallel_scan Body.

+
template<typename Range , typename Body >
void parallel_scan (const Range &range, Body &body)
 Parallel prefix with default partitioner. More...
 
template<typename Range , typename Body >
void parallel_scan (const Range &range, Body &body, const simple_partitioner &partitioner)
 Parallel prefix with simple_partitioner. More...
 
template<typename Range , typename Body >
void parallel_scan (const Range &range, Body &body, const auto_partitioner &partitioner)
 Parallel prefix with auto_partitioner. More...
 
parallel_sort

See also requirements on iterators for parallel_sort.

+
template<typename RandomAccessIterator , typename Compare >
void parallel_sort (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)
 Sorts the data in [begin,end) using the given comparator. More...
 
template<typename RandomAccessIterator >
void parallel_sort (RandomAccessIterator begin, RandomAccessIterator end)
 Sorts the data in [begin,end) with a default comparator std::less<RandomAccessIterator> More...
 
template<typename Range , typename Compare >
void parallel_sort (Range &rng, const Compare &comp)
 Sorts the data in rng using the given comparator. More...
 
template<typename Range , typename Compare >
void parallel_sort (const Range &rng, const Compare &comp)
 Sorts the data in const rng using the given comparator. More...
 
template<typename Range >
void parallel_sort (Range &rng)
 Sorts the data in rng with a default comparator std::less<RandomAccessIterator> More...
 
template<typename Range >
void parallel_sort (const Range &rng)
 Sorts the data in const rng with a default comparator std::less<RandomAccessIterator> More...
 
template<typename T >
void parallel_sort (T *begin, T *end)
 Sorts the data in the range [begin,end) with a default comparator std::less<T> More...
 
+

Detailed Description

+

The namespace tbb contains all components of the library.

+

Enumeration Type Documentation

+ +
+
+ + + + +
enum tbb::memory_semantics
+
+ +

Specifies memory semantics.

+ + + + + +
Enumerator
full_fence  +

Sequential consistency.

+
acquire  +

Acquire.

+
release  +

Release.

+
relaxed  +

No ordering.

+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + +
int __TBB_EXPORTED_FUNC tbb::TBB_runtime_interface_version ()
+
+ +

The function returns the interface version of the TBB shared library being used.

+

The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time.

+ +
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00260.html b/doc/html/a00260.html new file mode 100644 index 0000000..e93c97d --- /dev/null +++ b/doc/html/a00260.html @@ -0,0 +1,2187 @@ + + + + + + +Algorithms + + + + + + + +
+ +
+
Algorithms
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  tbb::blocked_range< Value >
 A range over which to iterate. More...
 
class  tbb::blocked_range2d< RowValue, ColValue >
 A 2-dimensional range that models the Range concept. More...
 
class  tbb::blocked_range3d< PageValue, RowValue, ColValue >
 A 3-dimensional range that models the Range concept. More...
 
struct  tbb::pre_scan_tag
 Used to indicate that the initial scan is being performed. More...
 
struct  tbb::final_scan_tag
 Used to indicate that the final scan is being performed. More...
 
class  tbb::parallel_while< Body >
 Parallel iteration over a stream, with optional addition of more work. More...
 
class  tbb::filter
 A stage in a pipeline. More...
 
class  tbb::thread_bound_filter
 A stage in a pipeline served by a user thread. More...
 
class  tbb::pipeline
 A processing pipeline that applies filters to items. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+parallel_for

See also requirements on Range and parallel_for Body.

+
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body)
 Parallel iteration over range with default partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, const simple_partitioner &partitioner)
 Parallel iteration over range with simple partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, const auto_partitioner &partitioner)
 Parallel iteration over range with auto_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, const static_partitioner &partitioner)
 Parallel iteration over range with static_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, affinity_partitioner &partitioner)
 Parallel iteration over range with affinity_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, task_group_context &context)
 Parallel iteration over range with default partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with simple partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with auto_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, const static_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with static_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_for (const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)
 Parallel iteration over range with affinity_partitioner and user-supplied context. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+parallel_for_each

template<typename Iterator , typename Function >
void tbb::parallel_for_each (Iterator first, Iterator last, const Function &f, task_group_context &context)
 Calls function f for all items from [first, last) interval using user-supplied context. More...
 
template<typename Range , typename Function >
void tbb::parallel_for_each (Range &rng, const Function &f, task_group_context &context)
 Calls function f for all items from rng using user-supplied context. More...
 
template<typename Range , typename Function >
void tbb::parallel_for_each (const Range &rng, const Function &f, task_group_context &context)
 Calls function f for all items from const rng user-supplied context. More...
 
+template<typename Iterator , typename Function >
void tbb::parallel_for_each (Iterator first, Iterator last, const Function &f)
 Uses default context.
 
+template<typename Range , typename Function >
void tbb::parallel_for_each (Range &rng, const Function &f)
 Uses default context.
 
+template<typename Range , typename Function >
void tbb::parallel_for_each (const Range &rng, const Function &f)
 Uses default context.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+parallel_invoke

template<typename F0 , typename F1 , typename... F>
void tbb::parallel_invoke (F0 &&f0, F1 &&f1, F &&...f)
 Executes a list of tasks in parallel and waits for all tasks to complete. More...
 
+template<typename F0 , typename F1 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9, tbb::task_group_context &context)
 
+template<typename F0 , typename F1 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1)
 
+template<typename F0 , typename F1 , typename F2 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8)
 
+template<typename F0 , typename F1 , typename F2 , typename F3 , typename F4 , typename F5 , typename F6 , typename F7 , typename F8 , typename F9 >
void tbb::parallel_invoke (const F0 &f0, const F1 &f1, const F2 &f2, const F3 &f3, const F4 &f4, const F5 &f5, const F6 &f6, const F7 &f7, const F8 &f8, const F9 &f9)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+parallel_reduce

See also requirements on Range and parallel_reduce Body.

+
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body)
 Parallel iteration with reduction and default partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, const simple_partitioner &partitioner)
 Parallel iteration with reduction and simple_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, const auto_partitioner &partitioner)
 Parallel iteration with reduction and auto_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, const static_partitioner &partitioner)
 Parallel iteration with reduction and static_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, affinity_partitioner &partitioner)
 Parallel iteration with reduction and affinity_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, simple partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, auto_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, const static_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, static_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_reduce (const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, affinity_partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)
 Parallel iteration with reduction and default partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner)
 Parallel iteration with reduction and simple_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)
 Parallel iteration with reduction and auto_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner)
 Parallel iteration with reduction and static_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)
 Parallel iteration with reduction and affinity_partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, simple partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, auto_partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const static_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, static_partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)
 Parallel iteration with reduction, affinity_partitioner and user-supplied context. More...
 
template<typename Range , typename Body >
void tbb::parallel_deterministic_reduce (const Range &range, Body &body)
 Parallel iteration with deterministic reduction and default partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_deterministic_reduce (const Range &range, Body &body, task_group_context &context)
 Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_deterministic_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction)
 Parallel iteration with deterministic reduction and default partitioner. More...
 
template<typename Range , typename Value , typename RealBody , typename Reduction >
Value tbb::parallel_deterministic_reduce (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, task_group_context &context)
 Parallel iteration with deterministic reduction, simple partitioner and user-supplied context. More...
 
+ + + + + + + + + + + + + + +

+parallel_scan

See also requirements on Range and parallel_scan Body.

+
template<typename Range , typename Body >
void tbb::parallel_scan (const Range &range, Body &body)
 Parallel prefix with default partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_scan (const Range &range, Body &body, const simple_partitioner &partitioner)
 Parallel prefix with simple_partitioner. More...
 
template<typename Range , typename Body >
void tbb::parallel_scan (const Range &range, Body &body, const auto_partitioner &partitioner)
 Parallel prefix with auto_partitioner. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+parallel_sort

See also requirements on iterators for parallel_sort.

+
template<typename RandomAccessIterator , typename Compare >
void tbb::parallel_sort (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)
 Sorts the data in [begin,end) using the given comparator. More...
 
template<typename RandomAccessIterator >
void tbb::parallel_sort (RandomAccessIterator begin, RandomAccessIterator end)
 Sorts the data in [begin,end) with a default comparator std::less<RandomAccessIterator> More...
 
template<typename Range , typename Compare >
void tbb::parallel_sort (Range &rng, const Compare &comp)
 Sorts the data in rng using the given comparator. More...
 
template<typename Range , typename Compare >
void tbb::parallel_sort (const Range &rng, const Compare &comp)
 Sorts the data in const rng using the given comparator. More...
 
template<typename Range >
void tbb::parallel_sort (Range &rng)
 Sorts the data in rng with a default comparator std::less<RandomAccessIterator> More...
 
template<typename Range >
void tbb::parallel_sort (const Range &rng)
 Sorts the data in const rng with a default comparator std::less<RandomAccessIterator> More...
 
template<typename T >
void tbb::parallel_sort (T *begin, T *end)
 Sorts the data in the range [begin,end) with a default comparator std::less<T> More...
 
+

Detailed Description

+

Function Documentation

+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_deterministic_reduce (const Range & range,
Body & body 
)
+
+ +

Parallel iteration with deterministic reduction and default partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_deterministic_reduce (const Range & range,
Body & body,
task_group_context & context 
)
+
+ +

Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_deterministic_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction 
)
+
+ +

Parallel iteration with deterministic reduction and default partitioner.

+

parallel_reduce overloads that work with anonymous function objects (see also requirements on parallel_reduce anonymous function objects).

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_deterministic_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
task_group_context & context 
)
+
+ +

Parallel iteration with deterministic reduction, simple partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body 
)
+
+ +

Parallel iteration over range with default partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
const simple_partitioner & partitioner 
)
+
+ +

Parallel iteration over range with simple partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
const auto_partitioner & partitioner 
)
+
+ +

Parallel iteration over range with auto_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
const static_partitioner & partitioner 
)
+
+ +

Parallel iteration over range with static_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
affinity_partitioner & partitioner 
)
+
+ +

Parallel iteration over range with affinity_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
task_group_context & context 
)
+
+ +

Parallel iteration over range with default partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
const simple_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration over range with simple partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
const auto_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration over range with auto_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
const static_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration over range with static_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for (const Range & range,
const Body & body,
affinity_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration over range with affinity_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Iterator , typename Function >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for_each (Iterator first,
Iterator last,
const Function & f,
task_group_context & context 
)
+
+ +

Calls function f for all items from [first, last) interval using user-supplied context.

+ +

Referenced by tbb::parallel_for_each().

+ +
+
+ +
+
+
+template<typename Range , typename Function >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for_each (Range & rng,
const Function & f,
task_group_context & context 
)
+
+ +

Calls function f for all items from rng using user-supplied context.

+ +

References tbb::parallel_for_each().

+ +
+
+ +
+
+
+template<typename Range , typename Function >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_for_each (const Range & rng,
const Function & f,
task_group_context & context 
)
+
+ +

Calls function f for all items from const rng user-supplied context.

+ +

References tbb::parallel_for_each().

+ +
+
+ +
+
+
+template<typename F0 , typename F1 , typename... F>
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_invoke (F0 && f0,
F1 && f1,
F &&... f 
)
+
+ +

Executes a list of tasks in parallel and waits for all tasks to complete.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body 
)
+
+ +

Parallel iteration with reduction and default partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
const simple_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and simple_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
const auto_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and auto_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
const static_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and static_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
affinity_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and affinity_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
const simple_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, simple partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
const auto_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, auto_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
const static_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, static_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_reduce (const Range & range,
Body & body,
affinity_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, affinity_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction 
)
+
+ +

Parallel iteration with reduction and default partitioner.

+

parallel_reduce overloads that work with anonymous function objects (see also requirements on parallel_reduce anonymous function objects).

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
const simple_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and simple_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
const auto_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and auto_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
const static_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and static_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
affinity_partitioner & partitioner 
)
+
+ +

Parallel iteration with reduction and affinity_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
const simple_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, simple partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
const auto_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, auto_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
const static_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, static_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Value , typename RealBody , typename Reduction >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Value tbb::parallel_reduce (const Range & range,
const Value & identity,
const RealBody & real_body,
const Reduction & reduction,
affinity_partitioner & partitioner,
task_group_context & context 
)
+
+ +

Parallel iteration with reduction, affinity_partitioner and user-supplied context.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_scan (const Range & range,
Body & body 
)
+
+ +

Parallel prefix with default partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_scan (const Range & range,
Body & body,
const simple_partitioner & partitioner 
)
+
+ +

Parallel prefix with simple_partitioner.

+ +
+
+ +
+
+
+template<typename Range , typename Body >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_scan (const Range & range,
Body & body,
const auto_partitioner & partitioner 
)
+
+ +

Parallel prefix with auto_partitioner.

+ +
+
+ +
+
+
+template<typename RandomAccessIterator , typename Compare >
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tbb::parallel_sort (RandomAccessIterator begin,
RandomAccessIterator end,
const Compare & comp 
)
+
+ +

Sorts the data in [begin,end) using the given comparator.

+

The compare function object is used for all comparisons between elements during sorting. The compare object must define a bool operator() function.

+ +

Referenced by tbb::parallel_sort().

+ +
+
+ +
+
+
+template<typename RandomAccessIterator >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_sort (RandomAccessIterator begin,
RandomAccessIterator end 
)
+
+inline
+
+ +

Sorts the data in [begin,end) with a default comparator std::less<RandomAccessIterator>

+ +

References tbb::parallel_sort().

+ +
+
+ +
+
+
+template<typename Range , typename Compare >
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_sort (Range & rng,
const Compare & comp 
)
+
+ +

Sorts the data in rng using the given comparator.

+ +

References tbb::parallel_sort().

+ +
+
+ +
+
+
+template<typename Range , typename Compare >
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_sort (const Range & rng,
const Compare & comp 
)
+
+ +

Sorts the data in const rng using the given comparator.

+ +

References tbb::parallel_sort().

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + + + + +
void tbb::parallel_sort (Range & rng)
+
+ +

Sorts the data in rng with a default comparator std::less<RandomAccessIterator>

+ +

References tbb::parallel_sort().

+ +
+
+ +
+
+
+template<typename Range >
+ + + + + + + + +
void tbb::parallel_sort (const Range & rng)
+
+ +

Sorts the data in const rng with a default comparator std::less<RandomAccessIterator>

+ +

References tbb::parallel_sort().

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void tbb::parallel_sort (T * begin,
T * end 
)
+
+inline
+
+ +

Sorts the data in the range [begin,end) with a default comparator std::less<T>

+ +

References tbb::parallel_sort().

+ +
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00261.html b/doc/html/a00261.html new file mode 100644 index 0000000..7c6445a --- /dev/null +++ b/doc/html/a00261.html @@ -0,0 +1,67 @@ + + + + + + +Containers + + + + + + + +
+ +
+
Containers
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Classes

class  tbb::combinable< T >
 Thread-local storage with optional reduction. More...
 
class  tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
 Unordered map from Key to T. More...
 
class  tbb::strict_ppl::concurrent_queue< T, A >
 A high-performance thread-safe non-blocking concurrent queue. More...
 
class  tbb::concurrent_bounded_queue< T, A >
 A high-performance thread-safe blocking concurrent bounded queue. More...
 
class  tbb::concurrent_vector< T, A >
 Concurrent vector container. More...
 
class  tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
 The enumerable_thread_specific container. More...
 
+

Detailed Description

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00262.html b/doc/html/a00262.html new file mode 100644 index 0000000..a106dcb --- /dev/null +++ b/doc/html/a00262.html @@ -0,0 +1,382 @@ + + + + + + +Memory Allocation + + + + + + + +
+ +
+
Memory Allocation
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  tbb::aligned_space< T, N >
 Block of space aligned sufficiently to construct an array T with N elements. More...
 
class  tbb::cache_aligned_allocator< T >
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  tbb::cache_aligned_allocator< void >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  tbb::interface6::memory_pool_allocator< T, P >
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  tbb::interface6::memory_pool_allocator< void, P >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  tbb::scalable_allocator< T >
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  tbb::scalable_allocator< void >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  tbb::tbb_allocator< T >
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  tbb::tbb_allocator< void >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
class  tbb::zero_allocator< T, Allocator >
 Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. More...
 
class  tbb::zero_allocator< void, Allocator >
 Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void *__TBB_EXPORTED_FUNC scalable_malloc (size_t size)
 
void __TBB_EXPORTED_FUNC scalable_free (void *ptr)
 
void *__TBB_EXPORTED_FUNC scalable_realloc (void *ptr, size_t size)
 
void *__TBB_EXPORTED_FUNC scalable_calloc (size_t nobj, size_t size)
 
int __TBB_EXPORTED_FUNC scalable_posix_memalign (void **memptr, size_t alignment, size_t size)
 
void *__TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size, size_t alignment)
 
void *__TBB_EXPORTED_FUNC scalable_aligned_realloc (void *ptr, size_t size, size_t alignment)
 
void __TBB_EXPORTED_FUNC scalable_aligned_free (void *ptr)
 
size_t __TBB_EXPORTED_FUNC scalable_msize (void *ptr)
 
int __TBB_EXPORTED_FUNC scalable_allocation_mode (int param, intptr_t value)
 
int __TBB_EXPORTED_FUNC scalable_allocation_command (int cmd, void *param)
 
+

Detailed Description

+

Function Documentation

+ +
+
+ + + + + + + + +
void __TBB_EXPORTED_FUNC scalable_aligned_free (void * ptr)
+
+

The "_aligned_free" analogue.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void* __TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size,
size_t alignment 
)
+
+

The "_aligned_malloc" analogue.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void* __TBB_EXPORTED_FUNC scalable_aligned_realloc (void * ptr,
size_t size,
size_t alignment 
)
+
+

The "_aligned_realloc" analogue.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int __TBB_EXPORTED_FUNC scalable_allocation_command (int cmd,
void * param 
)
+
+

Call TBB allocator-specific commands.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int __TBB_EXPORTED_FUNC scalable_allocation_mode (int param,
intptr_t value 
)
+
+

Set TBB allocator-specific allocation modes.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void* __TBB_EXPORTED_FUNC scalable_calloc (size_t nobj,
size_t size 
)
+
+

The "calloc" analogue complementing scalable_malloc.

+ +
+
+ +
+
+ + + + + + + + +
void __TBB_EXPORTED_FUNC scalable_free (void * ptr)
+
+

The "free" analogue to discard a previously allocated piece of memory.

+ +

Referenced by tbb::scalable_allocator< T >::deallocate().

+ +
+
+ +
+
+ + + + + + + + +
void* __TBB_EXPORTED_FUNC scalable_malloc (size_t size)
+
+

The "malloc" analogue to allocate block of memory of size bytes.

+ +

Referenced by tbb::scalable_allocator< T >::allocate().

+ +
+
+ +
+
+ + + + + + + + +
size_t __TBB_EXPORTED_FUNC scalable_msize (void * ptr)
+
+

The analogue of msize/malloc_size/malloc_usable_size. Returns the usable size of a memory block previously allocated by scalable*, or 0 (zero) if ptr does not point to such a block.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int __TBB_EXPORTED_FUNC scalable_posix_memalign (void ** memptr,
size_t alignment,
size_t size 
)
+
+

The "posix_memalign" analogue.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void* __TBB_EXPORTED_FUNC scalable_realloc (void * ptr,
size_t size 
)
+
+

The "realloc" analogue complementing scalable_malloc.

+ +
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00263.html b/doc/html/a00263.html new file mode 100644 index 0000000..21b05f1 --- /dev/null +++ b/doc/html/a00263.html @@ -0,0 +1,125 @@ + + + + + + +Synchronization + + + + + + + +
+ +
+
Synchronization
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  tbb::atomic< T >
 Primary template for atomic. More...
 
class  tbb::mutex
 Wrapper around the platform's native lock. More...
 
class  tbb::null_mutex
 A mutex which does nothing. More...
 
class  tbb::null_rw_mutex
 A rw mutex which does nothing. More...
 
class  tbb::queuing_mutex
 Queuing mutex with local-only spinning. More...
 
class  tbb::queuing_rw_mutex
 Queuing reader-writer mutex with local-only spinning. More...
 
class  tbb::interface5::reader_writer_lock
 Writer-preference reader-writer lock with local-only spinning on readers. More...
 
class  tbb::recursive_mutex
 
class  tbb::spin_mutex
 A lock that occupies a single byte. More...
 
class  tbb::spin_rw_mutex_v3
 Fast, unfair, spinning reader-writer lock with backoff and writer-preference. More...
 
+ + + + + + + +

+Typedefs

typedef
+interface7::internal::padded_mutex
+< interface7::internal::x86_eliding_mutex,
+false > 
tbb::speculative_spin_mutex
 A cross-platform spin mutex with speculative lock acquisition. More...
 
typedef
+interface7::internal::padded_mutex
+< tbb::interface8::internal::x86_rtm_rw_mutex,
+true > 
tbb::interface8::speculative_spin_rw_mutex
 A cross-platform spin reader/writer mutex with speculative lock acquisition. More...
 
+

Detailed Description

+

Typedef Documentation

+ +
+
+ + + + +
typedef interface7::internal::padded_mutex< spin_mutex, false > tbb::speculative_spin_mutex
+
+ +

A cross-platform spin mutex with speculative lock acquisition.

+

On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a spin_mutex. It should be used for locking short critical sections where the lock is contended but the data it protects are not. If zero-initialized, the mutex is considered unheld.

+ +
+
+ +
+
+ + + + +
typedef interface7::internal::padded_mutex< tbb::spin_rw_mutex, true > tbb::interface8::speculative_spin_rw_mutex
+
+ +

A cross-platform spin reader/writer mutex with speculative lock acquisition.

+

On platforms with proper HW support, this lock may speculatively execute its critical sections, using HW mechanisms to detect real data races and ensure atomicity of the critical sections. In particular, it uses Intel(R) Transactional Synchronization Extensions (Intel(R) TSX). Without such HW support, it behaves like a spin_rw_mutex. It should be used for locking short critical sections where the lock is contended but the data it protects are not.

+ +
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00264.html b/doc/html/a00264.html new file mode 100644 index 0000000..7a73373 --- /dev/null +++ b/doc/html/a00264.html @@ -0,0 +1,52 @@ + + + + + + +Timing + + + + + + + +
+ +
+
Timing
+
+
+ + + + + +

+Classes

class  tbb::tick_count
 Absolute timestamp. More...
 
+

Detailed Description

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00265.html b/doc/html/a00265.html new file mode 100644 index 0000000..9efb37e --- /dev/null +++ b/doc/html/a00265.html @@ -0,0 +1,52 @@ + + + + + + +Task Scheduling + + + + + + + +
+ +
+
Task Scheduling
+
+
+ + + + + +

+Classes

class  tbb::task_scheduler_init
 Class delimiting the scope of task scheduler activity. More...
 
+

Detailed Description

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00267.html b/doc/html/a00267.html new file mode 100644 index 0000000..c3b8876 --- /dev/null +++ b/doc/html/a00267.html @@ -0,0 +1,53 @@ + + + + + + +Member List + + + + + + + +
+
+
__TBB_malloc_proxy_caller Member List
+
+
+ +

This is the complete list of members for __TBB_malloc_proxy_caller, including all inherited members.

+ + +
__TBB_malloc_proxy_caller() (defined in __TBB_malloc_proxy_caller)__TBB_malloc_proxy_callerinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00268.html b/doc/html/a00268.html new file mode 100644 index 0000000..aaa0b8b --- /dev/null +++ b/doc/html/a00268.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
rml::MemPoolPolicy Member List
+
+
+ +

This is the complete list of members for rml::MemPoolPolicy, including all inherited members.

+ + + + + + + + + + +
fixedPool (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
granularity (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
keepAllMemory (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_, size_t granularity_=0, bool fixedPool_=false, bool keepAllMemory_=false) (defined in rml::MemPoolPolicy)rml::MemPoolPolicyinline
pAlloc (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
pFree (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
reserved (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
TBBMALLOC_POOL_VERSION enum value (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
version (defined in rml::MemPoolPolicy)rml::MemPoolPolicy
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00269.html b/doc/html/a00269.html new file mode 100644 index 0000000..aeb600e --- /dev/null +++ b/doc/html/a00269.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::aligned_space< T, N > Member List
+
+
+ +

This is the complete list of members for tbb::aligned_space< T, N >, including all inherited members.

+ + + +
begin() const tbb::aligned_space< T, N >inline
end() const tbb::aligned_space< T, N >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00270.html b/doc/html/a00270.html new file mode 100644 index 0000000..d0f5a57 --- /dev/null +++ b/doc/html/a00270.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::atomic< T > Member List
+
+
+ +

This is the complete list of members for tbb::atomic< T >, including all inherited members.

+ + + + + +
atomic()=default (defined in tbb::atomic< T >)tbb::atomic< T >
atomic(T arg) (defined in tbb::atomic< T >)tbb::atomic< T >inline
operator=(T rhs) (defined in tbb::atomic< T >)tbb::atomic< T >inline
operator=(const atomic< T > &rhs) (defined in tbb::atomic< T >)tbb::atomic< T >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00271.html b/doc/html/a00271.html new file mode 100644 index 0000000..460b3b6 --- /dev/null +++ b/doc/html/a00271.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::atomic< void * > Member List
+
+
+ +

This is the complete list of members for tbb::atomic< void * >, including all inherited members.

+ + + + + +
atomic()=default (defined in tbb::atomic< void * >)tbb::atomic< void * >
atomic(void *arg) (defined in tbb::atomic< void * >)tbb::atomic< void * >inline
operator=(void *rhs) (defined in tbb::atomic< void * >)tbb::atomic< void * >inline
operator=(const atomic< void * > &rhs) (defined in tbb::atomic< void * >)tbb::atomic< void * >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00272.html b/doc/html/a00272.html new file mode 100644 index 0000000..bca4834 --- /dev/null +++ b/doc/html/a00272.html @@ -0,0 +1,71 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::blocked_range< Value > Member List
+
+
+ +

This is the complete list of members for tbb::blocked_range< Value >, including all inherited members.

+ + + + + + + + + + + + + + + + +
begin() const tbb::blocked_range< Value >inline
blocked_range()tbb::blocked_range< Value >inline
blocked_range(Value begin_, Value end_, size_type grainsize_=1)tbb::blocked_range< Value >inline
blocked_range(blocked_range &r, split)tbb::blocked_range< Value >inline
blocked_range(blocked_range &r, proportional_split &proportion)tbb::blocked_range< Value >inline
blocked_range2d (defined in tbb::blocked_range< Value >)tbb::blocked_range< Value >friend
blocked_range3d (defined in tbb::blocked_range< Value >)tbb::blocked_range< Value >friend
const_iterator typedeftbb::blocked_range< Value >
empty() const tbb::blocked_range< Value >inline
end() const tbb::blocked_range< Value >inline
grainsize() const tbb::blocked_range< Value >inline
is_divisible() const tbb::blocked_range< Value >inline
is_splittable_in_proportiontbb::blocked_range< Value >static
size() const tbb::blocked_range< Value >inline
size_type typedeftbb::blocked_range< Value >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00273.html b/doc/html/a00273.html new file mode 100644 index 0000000..f69cfbe --- /dev/null +++ b/doc/html/a00273.html @@ -0,0 +1,67 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::blocked_range2d< RowValue, ColValue > Member List
+
+
+ +

This is the complete list of members for tbb::blocked_range2d< RowValue, ColValue >, including all inherited members.

+ + + + + + + + + + + + +
blocked_range2d(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in tbb::blocked_range2d< RowValue, ColValue >)tbb::blocked_range2d< RowValue, ColValue >inline
blocked_range2d(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in tbb::blocked_range2d< RowValue, ColValue >)tbb::blocked_range2d< RowValue, ColValue >inline
blocked_range2d(blocked_range2d &r, split) (defined in tbb::blocked_range2d< RowValue, ColValue >)tbb::blocked_range2d< RowValue, ColValue >inline
blocked_range2d(blocked_range2d &r, proportional_split &proportion) (defined in tbb::blocked_range2d< RowValue, ColValue >)tbb::blocked_range2d< RowValue, ColValue >inline
col_range_type typedef (defined in tbb::blocked_range2d< RowValue, ColValue >)tbb::blocked_range2d< RowValue, ColValue >
cols() const tbb::blocked_range2d< RowValue, ColValue >inline
empty() const tbb::blocked_range2d< RowValue, ColValue >inline
is_divisible() const tbb::blocked_range2d< RowValue, ColValue >inline
is_splittable_in_proportiontbb::blocked_range2d< RowValue, ColValue >static
row_range_type typedeftbb::blocked_range2d< RowValue, ColValue >
rows() const tbb::blocked_range2d< RowValue, ColValue >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00274.html b/doc/html/a00274.html new file mode 100644 index 0000000..f8eb3fe --- /dev/null +++ b/doc/html/a00274.html @@ -0,0 +1,69 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List
+
+
+ +

This is the complete list of members for tbb::blocked_range3d< PageValue, RowValue, ColValue >, including all inherited members.

+ + + + + + + + + + + + + + +
blocked_range3d(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in tbb::blocked_range3d< PageValue, RowValue, ColValue >)tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
blocked_range3d(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in tbb::blocked_range3d< PageValue, RowValue, ColValue >)tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
blocked_range3d(blocked_range3d &r, split) (defined in tbb::blocked_range3d< PageValue, RowValue, ColValue >)tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
blocked_range3d(blocked_range3d &r, proportional_split &proportion) (defined in tbb::blocked_range3d< PageValue, RowValue, ColValue >)tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
col_range_type typedef (defined in tbb::blocked_range3d< PageValue, RowValue, ColValue >)tbb::blocked_range3d< PageValue, RowValue, ColValue >
cols() const tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
empty() const tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
is_divisible() const tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
is_splittable_in_proportiontbb::blocked_range3d< PageValue, RowValue, ColValue >static
page_range_type typedeftbb::blocked_range3d< PageValue, RowValue, ColValue >
pages() const tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
row_range_type typedef (defined in tbb::blocked_range3d< PageValue, RowValue, ColValue >)tbb::blocked_range3d< PageValue, RowValue, ColValue >
rows() const tbb::blocked_range3d< PageValue, RowValue, ColValue >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00275.html b/doc/html/a00275.html new file mode 100644 index 0000000..68dc4bc --- /dev/null +++ b/doc/html/a00275.html @@ -0,0 +1,75 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::cache_aligned_allocator< T > Member List
+
+
+ +

This is the complete list of members for tbb::cache_aligned_allocator< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
address(reference x) const (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >inline
address(const_reference x) const (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >inline
allocate(size_type n, const void *hint=0)tbb::cache_aligned_allocator< T >inline
cache_aligned_allocator() (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >inline
cache_aligned_allocator(const cache_aligned_allocator &) (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >inline
cache_aligned_allocator(const cache_aligned_allocator< U > &) (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >inline
const_pointer typedef (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >
const_reference typedef (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >
construct(U *p, Args &&...args)tbb::cache_aligned_allocator< T >inline
construct(pointer p, value_type &&value) (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >inline
construct(pointer p, const value_type &value) (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >inline
deallocate(pointer p, size_type)tbb::cache_aligned_allocator< T >inline
destroy(pointer p)tbb::cache_aligned_allocator< T >inline
difference_type typedef (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >
max_size() const tbb::cache_aligned_allocator< T >inline
pointer typedef (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >
reference typedef (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >
size_type typedef (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >
value_type typedef (defined in tbb::cache_aligned_allocator< T >)tbb::cache_aligned_allocator< T >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00276.html b/doc/html/a00276.html new file mode 100644 index 0000000..edacc76 --- /dev/null +++ b/doc/html/a00276.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::cache_aligned_allocator< T >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::cache_aligned_allocator< T >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::cache_aligned_allocator< T >::rebind< U >)tbb::cache_aligned_allocator< T >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00277.html b/doc/html/a00277.html new file mode 100644 index 0000000..7ce955d --- /dev/null +++ b/doc/html/a00277.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::cache_aligned_allocator< void > Member List
+
+
+ +

This is the complete list of members for tbb::cache_aligned_allocator< void >, including all inherited members.

+ + + + +
const_pointer typedef (defined in tbb::cache_aligned_allocator< void >)tbb::cache_aligned_allocator< void >
pointer typedef (defined in tbb::cache_aligned_allocator< void >)tbb::cache_aligned_allocator< void >
value_type typedef (defined in tbb::cache_aligned_allocator< void >)tbb::cache_aligned_allocator< void >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00278.html b/doc/html/a00278.html new file mode 100644 index 0000000..8d84298 --- /dev/null +++ b/doc/html/a00278.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::cache_aligned_allocator< void >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::cache_aligned_allocator< void >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::cache_aligned_allocator< void >::rebind< U >)tbb::cache_aligned_allocator< void >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00279.html b/doc/html/a00279.html new file mode 100644 index 0000000..33aceb7 --- /dev/null +++ b/doc/html/a00279.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::combinable< T > Member List
+
+
+ +

This is the complete list of members for tbb::combinable< T >, including all inherited members.

+ + + + + + + + + + + + + +
clear() (defined in tbb::combinable< T >)tbb::combinable< T >inline
combinable() (defined in tbb::combinable< T >)tbb::combinable< T >inline
combinable(finit _finit) (defined in tbb::combinable< T >)tbb::combinable< T >inlineexplicit
combinable(const combinable &other) (defined in tbb::combinable< T >)tbb::combinable< T >inline
combinable(combinable &&other) (defined in tbb::combinable< T >)tbb::combinable< T >inline
combine(combine_func_t f_combine) (defined in tbb::combinable< T >)tbb::combinable< T >inline
combine_each(combine_func_t f_combine) (defined in tbb::combinable< T >)tbb::combinable< T >inline
local() (defined in tbb::combinable< T >)tbb::combinable< T >inline
local(bool &exists) (defined in tbb::combinable< T >)tbb::combinable< T >inline
operator=(const combinable &other) (defined in tbb::combinable< T >)tbb::combinable< T >inline
operator=(combinable &&other) (defined in tbb::combinable< T >)tbb::combinable< T >inline
~combinable()tbb::combinable< T >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00280.html b/doc/html/a00280.html new file mode 100644 index 0000000..313d970 --- /dev/null +++ b/doc/html/a00280.html @@ -0,0 +1,90 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::concurrent_bounded_queue< T, A > Member List
+
+
+ +

This is the complete list of members for tbb::concurrent_bounded_queue< T, A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abort()tbb::concurrent_bounded_queue< T, A >inline
allocator_type typedeftbb::concurrent_bounded_queue< T, A >
capacity() const tbb::concurrent_bounded_queue< T, A >inline
clear()tbb::concurrent_bounded_queue< T, A >
concurrent_bounded_queue(const allocator_type &a=allocator_type())tbb::concurrent_bounded_queue< T, A >inlineexplicit
concurrent_bounded_queue(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())tbb::concurrent_bounded_queue< T, A >inline
concurrent_bounded_queue(concurrent_bounded_queue &&src)tbb::concurrent_bounded_queue< T, A >inline
concurrent_bounded_queue(concurrent_bounded_queue &&src, const allocator_type &a) (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >inline
concurrent_bounded_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())tbb::concurrent_bounded_queue< T, A >inline
const_iterator typedef (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >
const_reference typedeftbb::concurrent_bounded_queue< T, A >
difference_type typedeftbb::concurrent_bounded_queue< T, A >
emplace(Arguments &&...args) (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >inline
empty() const tbb::concurrent_bounded_queue< T, A >inline
get_allocator() const tbb::concurrent_bounded_queue< T, A >inline
internal::concurrent_queue_iterator (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >friend
iterator typedef (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >
pop(T &destination)tbb::concurrent_bounded_queue< T, A >inline
push(const T &source)tbb::concurrent_bounded_queue< T, A >inline
push(T &&source)tbb::concurrent_bounded_queue< T, A >inline
reference typedeftbb::concurrent_bounded_queue< T, A >
set_capacity(size_type new_capacity)tbb::concurrent_bounded_queue< T, A >inline
size() const tbb::concurrent_bounded_queue< T, A >inline
size_type typedeftbb::concurrent_bounded_queue< T, A >
try_emplace(Arguments &&...args) (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >inline
try_pop(T &destination)tbb::concurrent_bounded_queue< T, A >inline
try_push(const T &source)tbb::concurrent_bounded_queue< T, A >inline
try_push(T &&source)tbb::concurrent_bounded_queue< T, A >inline
unsafe_begin() (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >inline
unsafe_begin() const (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >inline
unsafe_end() (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >inline
unsafe_end() const (defined in tbb::concurrent_bounded_queue< T, A >)tbb::concurrent_bounded_queue< T, A >inline
value_type typedeftbb::concurrent_bounded_queue< T, A >
~concurrent_bounded_queue()tbb::concurrent_bounded_queue< T, A >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00281.html b/doc/html/a00281.html new file mode 100644 index 0000000..ea20da5 --- /dev/null +++ b/doc/html/a00281.html @@ -0,0 +1,134 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::concurrent_vector< T, A > Member List
+
+
+ +

This is the complete list of members for tbb::concurrent_vector< T, A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
assign(size_type n, const_reference t)tbb::concurrent_vector< T, A >inline
assign(I first, I last)tbb::concurrent_vector< T, A >inline
assign(std::initializer_list< T > init_list)tbb::concurrent_vector< T, A >inline
at(size_type index)tbb::concurrent_vector< T, A >inline
at(size_type index) const tbb::concurrent_vector< T, A >inline
back()tbb::concurrent_vector< T, A >inline
back() const tbb::concurrent_vector< T, A >inline
begin()tbb::concurrent_vector< T, A >inline
begin() const tbb::concurrent_vector< T, A >inline
capacity() const tbb::concurrent_vector< T, A >inline
cbegin() const tbb::concurrent_vector< T, A >inline
cend() const tbb::concurrent_vector< T, A >inline
clear()tbb::concurrent_vector< T, A >inline
concurrent_vector(const allocator_type &a=allocator_type())tbb::concurrent_vector< T, A >inlineexplicit
concurrent_vector(std::initializer_list< T > init_list, const allocator_type &a=allocator_type())tbb::concurrent_vector< T, A >inline
concurrent_vector(const concurrent_vector &vector, const allocator_type &a=allocator_type())tbb::concurrent_vector< T, A >inline
concurrent_vector(concurrent_vector &&source)tbb::concurrent_vector< T, A >inline
concurrent_vector(concurrent_vector &&source, const allocator_type &a) (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >inline
concurrent_vector(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())tbb::concurrent_vector< T, A >inline
concurrent_vector(size_type n)tbb::concurrent_vector< T, A >inlineexplicit
concurrent_vector(size_type n, const_reference t, const allocator_type &a=allocator_type())tbb::concurrent_vector< T, A >inline
concurrent_vector(I first, I last, const allocator_type &a=allocator_type())tbb::concurrent_vector< T, A >inline
const_iterator typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
const_pointer typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
const_range_type typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
const_reference typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
const_reverse_iterator typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
const_reverse_iterator typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
copy_range(void *dst, const void *p_type_erased_iterator, size_type n) (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
crbegin() const tbb::concurrent_vector< T, A >inline
crend() const tbb::concurrent_vector< T, A >inline
difference_type typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
emplace_back(Args &&...args)tbb::concurrent_vector< T, A >inline
empty() const tbb::concurrent_vector< T, A >inline
end()tbb::concurrent_vector< T, A >inline
end() const tbb::concurrent_vector< T, A >inline
front()tbb::concurrent_vector< T, A >inline
front() const tbb::concurrent_vector< T, A >inline
get_allocator() const tbb::concurrent_vector< T, A >inline
grow_by(size_type delta)tbb::concurrent_vector< T, A >inline
grow_by(size_type delta, const_reference t)tbb::concurrent_vector< T, A >inline
grow_by(I first, I last)tbb::concurrent_vector< T, A >inline
grow_by(std::initializer_list< T > init_list)tbb::concurrent_vector< T, A >inline
grow_to_at_least(size_type n)tbb::concurrent_vector< T, A >inline
grow_to_at_least(size_type n, const_reference t)tbb::concurrent_vector< T, A >inline
internal::vector_iterator (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >friend
internal_vector_base() const (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >inline
iterator typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
max_size() const tbb::concurrent_vector< T, A >inline
operator=(const concurrent_vector &vector)tbb::concurrent_vector< T, A >inline
operator=(concurrent_vector &&other)tbb::concurrent_vector< T, A >inline
operator=(const concurrent_vector< T, M > &vector)tbb::concurrent_vector< T, A >inline
operator=(std::initializer_list< T > init_list)tbb::concurrent_vector< T, A >inline
operator[](size_type index)tbb::concurrent_vector< T, A >inline
operator[](size_type index) const tbb::concurrent_vector< T, A >inline
pointer typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
push_back(const_reference item)tbb::concurrent_vector< T, A >inline
push_back(T &&item)tbb::concurrent_vector< T, A >inline
range(size_t grainsize=1)tbb::concurrent_vector< T, A >inline
range(size_t grainsize=1) const tbb::concurrent_vector< T, A >inline
range_type typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
rbegin()tbb::concurrent_vector< T, A >inline
rbegin() const tbb::concurrent_vector< T, A >inline
reference typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
rend()tbb::concurrent_vector< T, A >inline
rend() const tbb::concurrent_vector< T, A >inline
reserve(size_type n)tbb::concurrent_vector< T, A >inline
resize(size_type n)tbb::concurrent_vector< T, A >inline
resize(size_type n, const_reference t)tbb::concurrent_vector< T, A >inline
reverse_iterator typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
reverse_iterator typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
shrink_to_fit()tbb::concurrent_vector< T, A >
size() const tbb::concurrent_vector< T, A >inline
size_type typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
swap(concurrent_vector &vector)tbb::concurrent_vector< T, A >inline
value_type typedef (defined in tbb::concurrent_vector< T, A >)tbb::concurrent_vector< T, A >
~concurrent_vector()tbb::concurrent_vector< T, A >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00282.html b/doc/html/a00282.html new file mode 100644 index 0000000..df6fa1c --- /dev/null +++ b/doc/html/a00282.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::concurrent_vector< T, A >::push_back_helper::element_construction_guard Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00283.html b/doc/html/a00283.html new file mode 100644 index 0000000..d5cf881 --- /dev/null +++ b/doc/html/a00283.html @@ -0,0 +1,73 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::mutex Member List
+
+
+ +

This is the complete list of members for tbb::mutex, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
DESTROYED enum value (defined in tbb::mutex)tbb::mutex
HELD enum value (defined in tbb::mutex)tbb::mutex
INITIALIZED enum value (defined in tbb::mutex)tbb::mutex
is_fair_mutex (defined in tbb::mutex)tbb::mutexstatic
is_recursive_mutex (defined in tbb::mutex)tbb::mutexstatic
is_rw_mutex (defined in tbb::mutex)tbb::mutexstatic
lock()tbb::mutexinline
mutex()tbb::mutexinline
native_handle() (defined in tbb::mutex)tbb::mutexinline
native_handle_type typedeftbb::mutex
native_handle_type typedef (defined in tbb::mutex)tbb::mutex
scoped_lock (defined in tbb::mutex)tbb::mutexfriend
set_state(state_t to)tbb::mutexinline
state_t enum name (defined in tbb::mutex)tbb::mutex
try_lock()tbb::mutexinline
unlock()tbb::mutexinline
~mutex() (defined in tbb::mutex)tbb::mutexinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00284.html b/doc/html/a00284.html new file mode 100644 index 0000000..b5a7cdb --- /dev/null +++ b/doc/html/a00284.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::mutex::scoped_lock Member List
+
+
+ +

This is the complete list of members for tbb::mutex::scoped_lock, including all inherited members.

+ + + + + + + + +
acquire(mutex &mutex)tbb::mutex::scoped_lockinline
mutex (defined in tbb::mutex::scoped_lock)tbb::mutex::scoped_lockfriend
release()tbb::mutex::scoped_lockinline
scoped_lock()tbb::mutex::scoped_lockinline
scoped_lock(mutex &mutex)tbb::mutex::scoped_lockinline
try_acquire(mutex &mutex)tbb::mutex::scoped_lockinline
~scoped_lock()tbb::mutex::scoped_lockinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00285.html b/doc/html/a00285.html new file mode 100644 index 0000000..7d54a17 --- /dev/null +++ b/doc/html/a00285.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::null_mutex Member List
+
+
+ +

This is the complete list of members for tbb::null_mutex, including all inherited members.

+ + + + + +
is_fair_mutex (defined in tbb::null_mutex)tbb::null_mutexstatic
is_recursive_mutex (defined in tbb::null_mutex)tbb::null_mutexstatic
is_rw_mutex (defined in tbb::null_mutex)tbb::null_mutexstatic
null_mutex() (defined in tbb::null_mutex)tbb::null_mutexinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00286.html b/doc/html/a00286.html new file mode 100644 index 0000000..eece25d --- /dev/null +++ b/doc/html/a00286.html @@ -0,0 +1,62 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::null_mutex::scoped_lock Member List
+
+
+ +

This is the complete list of members for tbb::null_mutex::scoped_lock, including all inherited members.

+ + + + + + + +
acquire(null_mutex &) (defined in tbb::null_mutex::scoped_lock)tbb::null_mutex::scoped_lockinline
release() (defined in tbb::null_mutex::scoped_lock)tbb::null_mutex::scoped_lockinline
scoped_lock() (defined in tbb::null_mutex::scoped_lock)tbb::null_mutex::scoped_lockinline
scoped_lock(null_mutex &) (defined in tbb::null_mutex::scoped_lock)tbb::null_mutex::scoped_lockinline
try_acquire(null_mutex &) (defined in tbb::null_mutex::scoped_lock)tbb::null_mutex::scoped_lockinline
~scoped_lock() (defined in tbb::null_mutex::scoped_lock)tbb::null_mutex::scoped_lockinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00287.html b/doc/html/a00287.html new file mode 100644 index 0000000..8c5b5be --- /dev/null +++ b/doc/html/a00287.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::null_rw_mutex Member List
+
+
+ +

This is the complete list of members for tbb::null_rw_mutex, including all inherited members.

+ + + + + +
is_fair_mutex (defined in tbb::null_rw_mutex)tbb::null_rw_mutexstatic
is_recursive_mutex (defined in tbb::null_rw_mutex)tbb::null_rw_mutexstatic
is_rw_mutex (defined in tbb::null_rw_mutex)tbb::null_rw_mutexstatic
null_rw_mutex() (defined in tbb::null_rw_mutex)tbb::null_rw_mutexinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00288.html b/doc/html/a00288.html new file mode 100644 index 0000000..1d2fbf1 --- /dev/null +++ b/doc/html/a00288.html @@ -0,0 +1,64 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::null_rw_mutex::scoped_lock Member List
+
+
+ +

This is the complete list of members for tbb::null_rw_mutex::scoped_lock, including all inherited members.

+ + + + + + + + + +
acquire(null_rw_mutex &, bool=true) (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
downgrade_to_reader() (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
release() (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
scoped_lock() (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
scoped_lock(null_rw_mutex &, bool=true) (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
try_acquire(null_rw_mutex &, bool=true) (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
upgrade_to_writer() (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
~scoped_lock() (defined in tbb::null_rw_mutex::scoped_lock)tbb::null_rw_mutex::scoped_lockinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00289.html b/doc/html/a00289.html new file mode 100644 index 0000000..751f052 --- /dev/null +++ b/doc/html/a00289.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::pre_scan_tag Member List
+
+
+ +

This is the complete list of members for tbb::pre_scan_tag, including all inherited members.

+ + +
is_final_scan() (defined in tbb::pre_scan_tag)tbb::pre_scan_taginlinestatic
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00290.html b/doc/html/a00290.html new file mode 100644 index 0000000..79a913f --- /dev/null +++ b/doc/html/a00290.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::final_scan_tag Member List
+
+
+ +

This is the complete list of members for tbb::final_scan_tag, including all inherited members.

+ + +
is_final_scan() (defined in tbb::final_scan_tag)tbb::final_scan_taginlinestatic
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00291.html b/doc/html/a00291.html new file mode 100644 index 0000000..a5a48e5 --- /dev/null +++ b/doc/html/a00291.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::parallel_while< Body > Member List
+
+
+ +

This is the complete list of members for tbb::parallel_while< Body >, including all inherited members.

+ + + + + + +
add(const value_type &item)tbb::parallel_while< Body >
parallel_while()tbb::parallel_while< Body >inline
run(Stream &stream, const Body &body)tbb::parallel_while< Body >
value_type typedeftbb::parallel_while< Body >
~parallel_while()tbb::parallel_while< Body >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00292.html b/doc/html/a00292.html new file mode 100644 index 0000000..a21e035 --- /dev/null +++ b/doc/html/a00292.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::filter Member List
+
+
+ +

This is the complete list of members for tbb::filter, including all inherited members.

+ + + + + + +
exact_exception_propagationtbb::filterprotectedstatic
filter_is_boundtbb::filterprotectedstatic
filter_is_out_of_ordertbb::filterprotectedstatic
filter_is_serialtbb::filterprotectedstatic
filter_may_emit_nulltbb::filterprotectedstatic
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00293.html b/doc/html/a00293.html new file mode 100644 index 0000000..79d917d --- /dev/null +++ b/doc/html/a00293.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::thread_bound_filter Member List
+
+
+ +

This is the complete list of members for tbb::thread_bound_filter, including all inherited members.

+ + + + + + + + + + + + + +
end_of_stream enum value (defined in tbb::thread_bound_filter)tbb::thread_bound_filter
exact_exception_propagationtbb::filterprotectedstatic
filter_is_boundtbb::filterprotectedstatic
filter_is_out_of_ordertbb::filterprotectedstatic
filter_is_serialtbb::filterprotectedstatic
filter_may_emit_nulltbb::filterprotectedstatic
item_not_available enum value (defined in tbb::thread_bound_filter)tbb::thread_bound_filter
process_item()tbb::thread_bound_filter
result_type enum name (defined in tbb::thread_bound_filter)tbb::thread_bound_filter
success enum value (defined in tbb::thread_bound_filter)tbb::thread_bound_filter
thread_bound_filter(mode filter_mode) (defined in tbb::thread_bound_filter)tbb::thread_bound_filterinlineexplicitprotected
try_process_item()tbb::thread_bound_filter
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00294.html b/doc/html/a00294.html new file mode 100644 index 0000000..31730ac --- /dev/null +++ b/doc/html/a00294.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::pipeline Member List
+
+
+ +

This is the complete list of members for tbb::pipeline, including all inherited members.

+ + + + + + + + + + + + + +
add_filter(filter &filter_)tbb::pipeline
clear()tbb::pipeline
filter (defined in tbb::pipeline)tbb::pipelinefriend
internal::pipeline_cleaner (defined in tbb::pipeline)tbb::pipelinefriend
internal::pipeline_root_task (defined in tbb::pipeline)tbb::pipelinefriend
internal::stage_task (defined in tbb::pipeline)tbb::pipelinefriend
pipeline()tbb::pipeline
run(size_t max_number_of_live_tokens)tbb::pipeline
run(size_t max_number_of_live_tokens, tbb::task_group_context &context)tbb::pipeline
tbb::interface6::internal::pipeline_proxy (defined in tbb::pipeline)tbb::pipelinefriend
thread_bound_filter (defined in tbb::pipeline)tbb::pipelinefriend
~pipeline()tbb::pipelinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00295.html b/doc/html/a00295.html new file mode 100644 index 0000000..f33375a --- /dev/null +++ b/doc/html/a00295.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::queuing_mutex Member List
+
+
+ +

This is the complete list of members for tbb::queuing_mutex, including all inherited members.

+ + + + + + +
internal_construct() (defined in tbb::queuing_mutex)tbb::queuing_mutex
is_fair_mutex (defined in tbb::queuing_mutex)tbb::queuing_mutexstatic
is_recursive_mutex (defined in tbb::queuing_mutex)tbb::queuing_mutexstatic
is_rw_mutex (defined in tbb::queuing_mutex)tbb::queuing_mutexstatic
queuing_mutex()tbb::queuing_mutexinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00296.html b/doc/html/a00296.html new file mode 100644 index 0000000..ff2c8f0 --- /dev/null +++ b/doc/html/a00296.html @@ -0,0 +1,62 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::queuing_mutex::scoped_lock Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00297.html b/doc/html/a00297.html new file mode 100644 index 0000000..308cc6a --- /dev/null +++ b/doc/html/a00297.html @@ -0,0 +1,62 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::queuing_rw_mutex Member List
+
+
+ +

This is the complete list of members for tbb::queuing_rw_mutex, including all inherited members.

+ + + + + + + +
internal_construct() (defined in tbb::queuing_rw_mutex)tbb::queuing_rw_mutex
is_fair_mutex (defined in tbb::queuing_rw_mutex)tbb::queuing_rw_mutexstatic
is_recursive_mutex (defined in tbb::queuing_rw_mutex)tbb::queuing_rw_mutexstatic
is_rw_mutex (defined in tbb::queuing_rw_mutex)tbb::queuing_rw_mutexstatic
queuing_rw_mutex()tbb::queuing_rw_mutexinline
~queuing_rw_mutex()tbb::queuing_rw_mutexinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00298.html b/doc/html/a00298.html new file mode 100644 index 0000000..e130606 --- /dev/null +++ b/doc/html/a00298.html @@ -0,0 +1,64 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::queuing_rw_mutex::scoped_lock Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00299.html b/doc/html/a00299.html new file mode 100644 index 0000000..1b29017 --- /dev/null +++ b/doc/html/a00299.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::recursive_mutex Member List
+
+
+ +

This is the complete list of members for tbb::recursive_mutex, including all inherited members.

+ + + + + + + + + + + + + +
is_fair_mutex (defined in tbb::recursive_mutex)tbb::recursive_mutexstatic
is_recursive_mutex (defined in tbb::recursive_mutex)tbb::recursive_mutexstatic
is_rw_mutex (defined in tbb::recursive_mutex)tbb::recursive_mutexstatic
lock()tbb::recursive_mutexinline
native_handle() (defined in tbb::recursive_mutex)tbb::recursive_mutexinline
native_handle_type typedeftbb::recursive_mutex
native_handle_type typedef (defined in tbb::recursive_mutex)tbb::recursive_mutex
recursive_mutex()tbb::recursive_mutexinline
scoped_lock (defined in tbb::recursive_mutex)tbb::recursive_mutexfriend
try_lock()tbb::recursive_mutexinline
unlock()tbb::recursive_mutexinline
~recursive_mutex() (defined in tbb::recursive_mutex)tbb::recursive_mutexinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00300.html b/doc/html/a00300.html new file mode 100644 index 0000000..4478854 --- /dev/null +++ b/doc/html/a00300.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::recursive_mutex::scoped_lock Member List
+
+
+ +

This is the complete list of members for tbb::recursive_mutex::scoped_lock, including all inherited members.

+ + + + + + + + +
acquire(recursive_mutex &mutex)tbb::recursive_mutex::scoped_lockinline
recursive_mutex (defined in tbb::recursive_mutex::scoped_lock)tbb::recursive_mutex::scoped_lockfriend
release()tbb::recursive_mutex::scoped_lockinline
scoped_lock()tbb::recursive_mutex::scoped_lockinline
scoped_lock(recursive_mutex &mutex)tbb::recursive_mutex::scoped_lockinline
try_acquire(recursive_mutex &mutex)tbb::recursive_mutex::scoped_lockinline
~scoped_lock()tbb::recursive_mutex::scoped_lockinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00301.html b/doc/html/a00301.html new file mode 100644 index 0000000..f907aba --- /dev/null +++ b/doc/html/a00301.html @@ -0,0 +1,75 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::scalable_allocator< T > Member List
+
+
+ +

This is the complete list of members for tbb::scalable_allocator< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
address(reference x) const (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
address(const_reference x) const (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
allocate(size_type n, const void *=0)tbb::scalable_allocator< T >inline
const_pointer typedef (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >
const_reference typedef (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >
construct(U *p, Args &&...args) (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
construct(pointer p, value_type &&value) (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
construct(pointer p, const value_type &value) (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
deallocate(pointer p, size_type)tbb::scalable_allocator< T >inline
destroy(pointer p) (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
difference_type typedef (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >
max_size() const tbb::scalable_allocator< T >inline
pointer typedef (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >
reference typedef (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >
scalable_allocator() (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
scalable_allocator(const scalable_allocator &) (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
scalable_allocator(const scalable_allocator< U > &) (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >inline
size_type typedef (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >
value_type typedef (defined in tbb::scalable_allocator< T >)tbb::scalable_allocator< T >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00302.html b/doc/html/a00302.html new file mode 100644 index 0000000..bfc4f92 --- /dev/null +++ b/doc/html/a00302.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::scalable_allocator< T >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::scalable_allocator< T >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::scalable_allocator< T >::rebind< U >)tbb::scalable_allocator< T >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00303.html b/doc/html/a00303.html new file mode 100644 index 0000000..79560bb --- /dev/null +++ b/doc/html/a00303.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::scalable_allocator< void > Member List
+
+
+ +

This is the complete list of members for tbb::scalable_allocator< void >, including all inherited members.

+ + + + +
const_pointer typedef (defined in tbb::scalable_allocator< void >)tbb::scalable_allocator< void >
pointer typedef (defined in tbb::scalable_allocator< void >)tbb::scalable_allocator< void >
value_type typedef (defined in tbb::scalable_allocator< void >)tbb::scalable_allocator< void >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00304.html b/doc/html/a00304.html new file mode 100644 index 0000000..f7063c1 --- /dev/null +++ b/doc/html/a00304.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::scalable_allocator< void >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::scalable_allocator< void >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::scalable_allocator< void >::rebind< U >)tbb::scalable_allocator< void >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00305.html b/doc/html/a00305.html new file mode 100644 index 0000000..db8756c --- /dev/null +++ b/doc/html/a00305.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::spin_mutex Member List
+
+
+ +

This is the complete list of members for tbb::spin_mutex, including all inherited members.

+ + + + + + + + + + +
internal_construct()tbb::spin_mutex
is_fair_mutex (defined in tbb::spin_mutex)tbb::spin_mutexstatic
is_recursive_mutex (defined in tbb::spin_mutex)tbb::spin_mutexstatic
is_rw_mutex (defined in tbb::spin_mutex)tbb::spin_mutexstatic
lock()tbb::spin_mutexinline
scoped_lock (defined in tbb::spin_mutex)tbb::spin_mutexfriend
spin_mutex()tbb::spin_mutexinline
try_lock()tbb::spin_mutexinline
unlock()tbb::spin_mutexinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00306.html b/doc/html/a00306.html new file mode 100644 index 0000000..1ce14c6 --- /dev/null +++ b/doc/html/a00306.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::spin_mutex::scoped_lock Member List
+
+
+ +

This is the complete list of members for tbb::spin_mutex::scoped_lock, including all inherited members.

+ + + + + + + + +
acquire(spin_mutex &m)tbb::spin_mutex::scoped_lockinline
release()tbb::spin_mutex::scoped_lockinline
scoped_lock()tbb::spin_mutex::scoped_lockinline
scoped_lock(spin_mutex &m)tbb::spin_mutex::scoped_lockinline
spin_mutex (defined in tbb::spin_mutex::scoped_lock)tbb::spin_mutex::scoped_lockfriend
try_acquire(spin_mutex &m)tbb::spin_mutex::scoped_lockinline
~scoped_lock()tbb::spin_mutex::scoped_lockinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00307.html b/doc/html/a00307.html new file mode 100644 index 0000000..34ec4a0 --- /dev/null +++ b/doc/html/a00307.html @@ -0,0 +1,73 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::spin_rw_mutex_v3 Member List
+
+
+ +

This is the complete list of members for tbb::spin_rw_mutex_v3, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
BUSY (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3protectedstatic
is_fair_mutex (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3static
is_recursive_mutex (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3static
is_rw_mutex (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3static
lock()tbb::spin_rw_mutex_v3inline
lock_read()tbb::spin_rw_mutex_v3inline
ONE_READER (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3protectedstatic
READERS (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3protectedstatic
spin_rw_mutex_v3()tbb::spin_rw_mutex_v3inline
statetbb::spin_rw_mutex_v3protected
state_t typedef (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3protected
try_lock()tbb::spin_rw_mutex_v3inline
try_lock_read()tbb::spin_rw_mutex_v3inline
unlock()tbb::spin_rw_mutex_v3inline
WRITER (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3protectedstatic
WRITER_PENDING (defined in tbb::spin_rw_mutex_v3)tbb::spin_rw_mutex_v3protectedstatic
~spin_rw_mutex_v3()tbb::spin_rw_mutex_v3inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00308.html b/doc/html/a00308.html new file mode 100644 index 0000000..93db5e0 --- /dev/null +++ b/doc/html/a00308.html @@ -0,0 +1,67 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::spin_rw_mutex_v3::scoped_lock Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00309.html b/doc/html/a00309.html new file mode 100644 index 0000000..ffbc9dd --- /dev/null +++ b/doc/html/a00309.html @@ -0,0 +1,62 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::task_handle< F > Member List
+
+
+ +

This is the complete list of members for tbb::task_handle< F >, including all inherited members.

+ + + + + + + +
internal::task_handle_task (defined in tbb::task_handle< F >)tbb::task_handle< F >friend
operator()() const (defined in tbb::task_handle< F >)tbb::task_handle< F >inline
structured_task_group (defined in tbb::task_handle< F >)tbb::task_handle< F >friend
task_group (defined in tbb::task_handle< F >)tbb::task_handle< F >friend
task_handle(const F &f) (defined in tbb::task_handle< F >)tbb::task_handle< F >inline
task_handle(F &&f) (defined in tbb::task_handle< F >)tbb::task_handle< F >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00310.html b/doc/html/a00310.html new file mode 100644 index 0000000..7415df9 --- /dev/null +++ b/doc/html/a00310.html @@ -0,0 +1,72 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::task_group Member List
+
+
+ +

This is the complete list of members for tbb::task_group, including all inherited members.

+ + + + + + + + + + + + + + + + + +
cancel() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
internal_run(__TBB_FORWARDING_REF(F) f) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
internal_run_and_wait(F &f) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
is_canceling() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
my_context (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseprotected
my_root (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseprotected
owner() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
run(task_handle< F > &h) (defined in tbb::task_group)tbb::task_groupinline
run(F &&f) (defined in tbb::task_group)tbb::task_groupinline
run(const F &f) (defined in tbb::task_group)tbb::task_groupinline
run_and_wait(const F &f) (defined in tbb::task_group)tbb::task_groupinline
run_and_wait(task_handle< F > &h) (defined in tbb::task_group)tbb::task_groupinline
task_group() (defined in tbb::task_group)tbb::task_groupinline
task_group_base(uintptr_t traits=0) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
wait() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
~task_group_base() __TBB_NOEXCEPT(false) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00311.html b/doc/html/a00311.html new file mode 100644 index 0000000..b09376b --- /dev/null +++ b/doc/html/a00311.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::structured_task_group Member List
+
+
+ +

This is the complete list of members for tbb::structured_task_group, including all inherited members.

+ + + + + + + + + + + + + +
cancel() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
internal_run(__TBB_FORWARDING_REF(F) f) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
internal_run_and_wait(F &f) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
is_canceling() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
my_context (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseprotected
my_root (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseprotected
owner() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
run(task_handle< F > &h) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
run_and_wait(task_handle< F > &h) (defined in tbb::structured_task_group)tbb::structured_task_groupinline
task_group_base(uintptr_t traits=0) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
wait() (defined in tbb::structured_task_group)tbb::structured_task_groupinline
~task_group_base() __TBB_NOEXCEPT(false) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00312.html b/doc/html/a00312.html new file mode 100644 index 0000000..1176e67 --- /dev/null +++ b/doc/html/a00312.html @@ -0,0 +1,67 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::task_scheduler_init Member List
+
+
+ +

This is the complete list of members for tbb::task_scheduler_init, including all inherited members.

+ + + + + + + + + + + + +
automatictbb::task_scheduler_initstatic
blocking_terminate()tbb::task_scheduler_initinline
blocking_terminate(const std::nothrow_t &) __TBB_NOEXCEPT(true)tbb::task_scheduler_initinline
default_num_threads()tbb::task_scheduler_initstatic
deferredtbb::task_scheduler_initstatic
initialize(int number_of_threads=automatic)tbb::task_scheduler_init
initialize(int number_of_threads, stack_size_type thread_stack_size)tbb::task_scheduler_init
is_active() const tbb::task_scheduler_initinline
task_scheduler_init(int number_of_threads=automatic, stack_size_type thread_stack_size=0)tbb::task_scheduler_initinline
terminate()tbb::task_scheduler_init
~task_scheduler_init()tbb::task_scheduler_initinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00313.html b/doc/html/a00313.html new file mode 100644 index 0000000..cf5c5cb --- /dev/null +++ b/doc/html/a00313.html @@ -0,0 +1,79 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::tbb_allocator< T > Member List
+
+
+ +

This is the complete list of members for tbb::tbb_allocator< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
address(reference x) const (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >inline
address(const_reference x) const (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >inline
allocate(size_type n, const void *=0)tbb::tbb_allocator< T >inline
allocator_type()tbb::tbb_allocator< T >inlinestatic
const_pointer typedef (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
const_reference typedef (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
construct(U *p, Args &&...args)tbb::tbb_allocator< T >inline
construct(pointer p, value_type &&value) (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >inline
construct(pointer p, const value_type &value) (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >inline
deallocate(pointer p, size_type)tbb::tbb_allocator< T >inline
destroy(pointer p)tbb::tbb_allocator< T >inline
difference_type typedef (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
malloc_type enum nametbb::tbb_allocator< T >
max_size() const tbb::tbb_allocator< T >inline
pointer typedef (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
reference typedef (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
scalable enum value (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
size_type typedef (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
standard enum value (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
tbb_allocator() (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >inline
tbb_allocator(const tbb_allocator &) (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >inline
tbb_allocator(const tbb_allocator< U > &) (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >inline
value_type typedef (defined in tbb::tbb_allocator< T >)tbb::tbb_allocator< T >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00314.html b/doc/html/a00314.html new file mode 100644 index 0000000..43f9686 --- /dev/null +++ b/doc/html/a00314.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::tbb_allocator< T >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::tbb_allocator< T >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::tbb_allocator< T >::rebind< U >)tbb::tbb_allocator< T >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00315.html b/doc/html/a00315.html new file mode 100644 index 0000000..5200ce7 --- /dev/null +++ b/doc/html/a00315.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::tbb_allocator< void > Member List
+
+
+ +

This is the complete list of members for tbb::tbb_allocator< void >, including all inherited members.

+ + + + +
const_pointer typedef (defined in tbb::tbb_allocator< void >)tbb::tbb_allocator< void >
pointer typedef (defined in tbb::tbb_allocator< void >)tbb::tbb_allocator< void >
value_type typedef (defined in tbb::tbb_allocator< void >)tbb::tbb_allocator< void >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00316.html b/doc/html/a00316.html new file mode 100644 index 0000000..32f8308 --- /dev/null +++ b/doc/html/a00316.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::tbb_allocator< void >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::tbb_allocator< void >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::tbb_allocator< void >::rebind< U >)tbb::tbb_allocator< void >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00317.html b/doc/html/a00317.html new file mode 100644 index 0000000..19eb866 --- /dev/null +++ b/doc/html/a00317.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::zero_allocator< T, Allocator > Member List
+
+
+ +

This is the complete list of members for tbb::zero_allocator< T, Allocator >, including all inherited members.

+ + + + + + + + + + + + + +
allocate(const size_type n, const void *hint=0) (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >inline
base_allocator_type typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
const_pointer typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
const_reference typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
difference_type typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
pointer typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
reference typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
size_type typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
value_type typedef (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >
zero_allocator() (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >inline
zero_allocator(const zero_allocator &a) (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >inline
zero_allocator(const zero_allocator< U > &a) (defined in tbb::zero_allocator< T, Allocator >)tbb::zero_allocator< T, Allocator >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00318.html b/doc/html/a00318.html new file mode 100644 index 0000000..ee1a7cd --- /dev/null +++ b/doc/html/a00318.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::zero_allocator< T, Allocator >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::zero_allocator< T, Allocator >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::zero_allocator< T, Allocator >::rebind< U >)tbb::zero_allocator< T, Allocator >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00319.html b/doc/html/a00319.html new file mode 100644 index 0000000..0eae1f0 --- /dev/null +++ b/doc/html/a00319.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::zero_allocator< void, Allocator > Member List
+
+
+ +

This is the complete list of members for tbb::zero_allocator< void, Allocator >, including all inherited members.

+ + + + + +
base_allocator_type typedef (defined in tbb::zero_allocator< void, Allocator >)tbb::zero_allocator< void, Allocator >
const_pointer typedef (defined in tbb::zero_allocator< void, Allocator >)tbb::zero_allocator< void, Allocator >
pointer typedef (defined in tbb::zero_allocator< void, Allocator >)tbb::zero_allocator< void, Allocator >
value_type typedef (defined in tbb::zero_allocator< void, Allocator >)tbb::zero_allocator< void, Allocator >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00320.html b/doc/html/a00320.html new file mode 100644 index 0000000..e2b4f37 --- /dev/null +++ b/doc/html/a00320.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::zero_allocator< void, Allocator >::rebind< U > Member List
+
+
+ +

This is the complete list of members for tbb::zero_allocator< void, Allocator >::rebind< U >, including all inherited members.

+ + +
other typedef (defined in tbb::zero_allocator< void, Allocator >::rebind< U >)tbb::zero_allocator< void, Allocator >::rebind< U >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00321.html b/doc/html/a00321.html new file mode 100644 index 0000000..9956af7 --- /dev/null +++ b/doc/html/a00321.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::bad_last_alloc Member List
+
+
+ +

This is the complete list of members for tbb::bad_last_alloc, including all inherited members.

+ + + +
what() const __TBB_override (defined in tbb::bad_last_alloc)tbb::bad_last_alloc
~bad_last_alloc() __TBB_override (defined in tbb::bad_last_alloc)tbb::bad_last_allocinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00322.html b/doc/html/a00322.html new file mode 100644 index 0000000..d2c3a7d --- /dev/null +++ b/doc/html/a00322.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::improper_lock Member List
+
+
+ +

This is the complete list of members for tbb::improper_lock, including all inherited members.

+ + +
what() const __TBB_override (defined in tbb::improper_lock)tbb::improper_lock
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00323.html b/doc/html/a00323.html new file mode 100644 index 0000000..e82e13e --- /dev/null +++ b/doc/html/a00323.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::user_abort Member List
+
+
+ +

This is the complete list of members for tbb::user_abort, including all inherited members.

+ + +
what() const __TBB_override (defined in tbb::user_abort)tbb::user_abort
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00324.html b/doc/html/a00324.html new file mode 100644 index 0000000..fef9159 --- /dev/null +++ b/doc/html/a00324.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::missing_wait Member List
+
+
+ +

This is the complete list of members for tbb::missing_wait, including all inherited members.

+ + +
what() const __TBB_override (defined in tbb::missing_wait)tbb::missing_wait
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00325.html b/doc/html/a00325.html new file mode 100644 index 0000000..25f85a0 --- /dev/null +++ b/doc/html/a00325.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::invalid_multiple_scheduling Member List
+
+
+ +

This is the complete list of members for tbb::invalid_multiple_scheduling, including all inherited members.

+ + +
what() const __TBB_override (defined in tbb::invalid_multiple_scheduling)tbb::invalid_multiple_scheduling
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00326.html b/doc/html/a00326.html new file mode 100644 index 0000000..61752a9 --- /dev/null +++ b/doc/html/a00326.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::tbb_exception Member List
+
+
+ +

This is the complete list of members for tbb::tbb_exception, including all inherited members.

+ + + + + + + + +
destroy()=0tbb::tbb_exceptionpure virtual
move()=0tbb::tbb_exceptionpure virtual
name() const =0tbb::tbb_exceptionpure virtual
operator delete(void *p)tbb::tbb_exceptioninline
throw_self()=0tbb::tbb_exceptionpure virtual
what() const __TBB_override=0tbb::tbb_exceptionpure virtual
~tbb_exception() (defined in tbb::tbb_exception)tbb::tbb_exceptioninline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00327.html b/doc/html/a00327.html new file mode 100644 index 0000000..a658c85 --- /dev/null +++ b/doc/html/a00327.html @@ -0,0 +1,69 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::captured_exception Member List
+
+
+ +

This is the complete list of members for tbb::captured_exception, including all inherited members.

+ + + + + + + + + + + + + + +
captured_exception(const captured_exception &src) (defined in tbb::captured_exception)tbb::captured_exceptioninline
captured_exception(const char *name_, const char *info) (defined in tbb::captured_exception)tbb::captured_exceptioninline
clear() (defined in tbb::captured_exception)tbb::captured_exception
destroy() __TBB_overridetbb::captured_exceptionvirtual
move() __TBB_overridetbb::captured_exceptionvirtual
name() const __TBB_overridetbb::captured_exceptionvirtual
operator delete(void *p)tbb::tbb_exceptioninline
operator=(const captured_exception &src) (defined in tbb::captured_exception)tbb::captured_exceptioninline
set(const char *name, const char *info) (defined in tbb::captured_exception)tbb::captured_exception
throw_self() __TBB_overridetbb::captured_exceptioninlinevirtual
what() const __TBB_overridetbb::captured_exceptionvirtual
~captured_exception() (defined in tbb::captured_exception)tbb::captured_exception
~tbb_exception() (defined in tbb::tbb_exception)tbb::tbb_exceptioninline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00328.html b/doc/html/a00328.html new file mode 100644 index 0000000..b7643c7 --- /dev/null +++ b/doc/html/a00328.html @@ -0,0 +1,70 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::movable_exception< ExceptionData > Member List
+
+
+ +

This is the complete list of members for tbb::movable_exception< ExceptionData >, including all inherited members.

+ + + + + + + + + + + + + + + +
data() (defined in tbb::movable_exception< ExceptionData >)tbb::movable_exception< ExceptionData >inline
data() const (defined in tbb::movable_exception< ExceptionData >)tbb::movable_exception< ExceptionData >inline
destroy() __TBB_overridetbb::movable_exception< ExceptionData >inlinevirtual
movable_exception(const ExceptionData &data_) (defined in tbb::movable_exception< ExceptionData >)tbb::movable_exception< ExceptionData >inline
movable_exception(const movable_exception &src) (defined in tbb::movable_exception< ExceptionData >)tbb::movable_exception< ExceptionData >inline
move() __TBB_overridetbb::movable_exception< ExceptionData >inlinevirtual
my_exception_datatbb::movable_exception< ExceptionData >protected
name() const __TBB_overridetbb::movable_exception< ExceptionData >inlinevirtual
operator delete(void *p)tbb::tbb_exceptioninline
operator=(const movable_exception &src) (defined in tbb::movable_exception< ExceptionData >)tbb::movable_exception< ExceptionData >inline
throw_self() __TBB_overridetbb::movable_exception< ExceptionData >inlinevirtual
what() const __TBB_overridetbb::movable_exception< ExceptionData >inlinevirtual
~movable_exception() (defined in tbb::movable_exception< ExceptionData >)tbb::movable_exception< ExceptionData >inline
~tbb_exception() (defined in tbb::tbb_exception)tbb::tbb_exceptioninline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00329.html b/doc/html/a00329.html new file mode 100644 index 0000000..5fd494d --- /dev/null +++ b/doc/html/a00329.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::tick_count Member List
+
+
+ +

This is the complete list of members for tbb::tick_count, including all inherited members.

+ + + + + +
now()tbb::tick_countinlinestatic
operator-(const tick_count &t1, const tick_count &t0)tbb::tick_countfriend
resolution()tbb::tick_countinlinestatic
tick_count()tbb::tick_countinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00330.html b/doc/html/a00330.html new file mode 100644 index 0000000..8d9d330 --- /dev/null +++ b/doc/html/a00330.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::tick_count::interval_t Member List
+
+
+ +

This is the complete list of members for tbb::tick_count::interval_t, including all inherited members.

+ + + + + + + + + + +
interval_t()tbb::tick_count::interval_tinline
interval_t(double sec)tbb::tick_count::interval_tinlineexplicit
operator+(const interval_t &i, const interval_t &j)tbb::tick_count::interval_tfriend
operator+=(const interval_t &i)tbb::tick_count::interval_tinline
operator-(const tick_count &t1, const tick_count &t0)tbb::tick_count::interval_tfriend
operator-(const interval_t &i, const interval_t &j)tbb::tick_count::interval_tfriend
operator-=(const interval_t &i)tbb::tick_count::interval_tinline
seconds() const tbb::tick_count::interval_tinline
tbb::tick_count (defined in tbb::tick_count::interval_t)tbb::tick_count::interval_tfriend
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00331.html b/doc/html/a00331.html new file mode 100644 index 0000000..e4c83cb --- /dev/null +++ b/doc/html/a00331.html @@ -0,0 +1,81 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::sender< T > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::sender< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
built_successors()=0 (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >pure virtual
built_successors_type typedeftbb::flow::interface10::sender< T >
copy_successors(successor_list_type &)=0 (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >pure virtual
filtered_type typedef (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >
internal_add_built_successor(successor_type &)=0 (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >pure virtual
internal_delete_built_successor(successor_type &)=0 (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >pure virtual
output_type typedeftbb::flow::interface10::sender< T >
output_type typedeftbb::flow::interface10::sender< T >
register_successor(successor_type &r)=0tbb::flow::interface10::sender< T >pure virtual
remove_successor(successor_type &r)=0tbb::flow::interface10::sender< T >pure virtual
successor_count()=0 (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >pure virtual
successor_list_type typedef (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >
successor_type typedeftbb::flow::interface10::sender< T >
try_consume()tbb::flow::interface10::sender< T >inlinevirtual
try_get(T &)tbb::flow::interface10::sender< T >inlinevirtual
try_get(T &)tbb::flow::interface10::sender< T >inlinevirtual
tbb::flow::interface10::internal::untyped_sender::try_get(X &t)tbb::flow::interface10::internal::untyped_senderinlineprotected
try_get_wrapper(void *p, bool is_async) __TBB_override (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >inlineprotectedvirtual
try_release()tbb::flow::interface10::sender< T >inlinevirtual
try_reserve(T &)tbb::flow::interface10::sender< T >inlinevirtual
try_reserve(T &)tbb::flow::interface10::sender< T >inlinevirtual
tbb::flow::interface10::internal::untyped_sender::try_reserve(X &t)tbb::flow::interface10::internal::untyped_senderinlineprotected
try_reserve_wrapper(void *p, bool is_async) __TBB_override (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >inlineprotectedvirtual
~sender() (defined in tbb::flow::interface10::sender< T >)tbb::flow::interface10::sender< T >inlinevirtual
~untyped_sender() (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00332.html b/doc/html/a00332.html new file mode 100644 index 0000000..f44d161 --- /dev/null +++ b/doc/html/a00332.html @@ -0,0 +1,90 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::receiver< T > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::receiver< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
built_predecessors()=0 (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >pure virtual
built_predecessors_type typedef (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >
copy_predecessors(predecessor_list_type &)=0 (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >pure virtual
filtered_type typedef (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >
graph_reference()=0 (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >protectedpure virtual
input_type typedeftbb::flow::interface10::receiver< T >
input_type typedeftbb::flow::interface10::receiver< T >
internal::async_helpers (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >friend
internal::async_storage (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >friend
internal::broadcast_cache (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >friend
internal::round_robin_cache (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >friend
internal::successor_cache (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >friend
internal_add_built_predecessor(predecessor_type &)=0 (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >pure virtual
internal_delete_built_predecessor(predecessor_type &)=0 (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >pure virtual
is_continue_receiver() (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >inlineprotectedvirtual
limiter_node classtbb::flow::interface10::receiver< T >friend
predecessor_count()=0 (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >pure virtual
predecessor_list_type typedef (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >
predecessor_type typedeftbb::flow::interface10::receiver< T >
proxy_dependency_receiver (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >friend
register_predecessor(predecessor_type &)tbb::flow::interface10::receiver< T >inlinevirtual
remove_predecessor(predecessor_type &)tbb::flow::interface10::receiver< T >inlinevirtual
reset_receiver(reset_flags f=rf_reset_protocol)=0tbb::flow::interface10::receiver< T >protectedpure virtual
run_and_put_task classtbb::flow::interface10::receiver< T >friend
try_put(const typename internal::async_helpers< T >::filtered_type &t)tbb::flow::interface10::receiver< T >inline
try_put(const typename internal::async_helpers< T >::async_type &t) (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >inline
try_put(const T &t)tbb::flow::interface10::receiver< T >inline
tbb::flow::interface10::internal::untyped_receiver::try_put(const X &t)tbb::flow::interface10::internal::untyped_receiverinline
try_put_task(const T &t)=0tbb::flow::interface10::receiver< T >protectedpure virtual
try_put_task(const T &t)=0 (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >protectedpure virtual
try_put_task(const X &t) (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverinlineprotected
try_put_task_wrapper(const void *p, bool is_async) __TBB_override (defined in tbb::flow::interface10::receiver< T >)tbb::flow::interface10::receiver< T >inlineprotectedvirtual
~receiver()tbb::flow::interface10::receiver< T >inlinevirtual
~untyped_receiver()tbb::flow::interface10::internal::untyped_receiverinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00333.html b/doc/html/a00333.html new file mode 100644 index 0000000..c04c38d --- /dev/null +++ b/doc/html/a00333.html @@ -0,0 +1,73 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
const_reference typedef (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
graph (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >friend
graph_iterator()tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >inline
graph_iterator(const graph_iterator &other)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >inline
graph_node (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >friend
iterator_category typedef (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
operator!=(const graph_iterator &other) const tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >inline
operator*() const tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
operator++()tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >inline
operator++(int)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >inline
operator->() const tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
operator=(const graph_iterator &other)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >inline
operator==(const graph_iterator &other) const tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >inline
pointer typedef (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
reference typedef (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
size_type typedef (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
value_type typedef (defined in tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >)tbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00334.html b/doc/html/a00334.html new file mode 100644 index 0000000..d4084ea --- /dev/null +++ b/doc/html/a00334.html @@ -0,0 +1,88 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::graph Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::graph, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
begin()tbb::flow::interface10::graphinline
begin() const tbb::flow::interface10::graphinline
cbegin() const tbb::flow::interface10::graphinline
cend() const tbb::flow::interface10::graphinline
const_iterator typedef (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graph
decrement_wait_count() (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphinline
end()tbb::flow::interface10::graphinline
end() const tbb::flow::interface10::graphinline
exception_thrown() (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphinline
graph()tbb::flow::interface10::graph
graph(task_group_context &use_this_context)tbb::flow::interface10::graphexplicit
graph_iterator (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
graph_node (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
increment_wait_count() (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphinline
internal::activate_graph (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
internal::add_task_to_graph_reset_list (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
internal::deactivate_graph (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
internal::execute_in_graph_arena (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
internal::is_graph_active (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
internal::spawn_in_graph_arena (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graphfriend
is_cancelled()tbb::flow::interface10::graphinline
iterator typedef (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graph
release_wait() __TBB_overridetbb::flow::interface10::graphvirtual
reserve_wait() __TBB_overridetbb::flow::interface10::graphvirtual
reset(reset_flags f=rf_reset_protocol) (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graph
root_task()tbb::flow::interface10::graphinline
run(Receiver &r, Body body)tbb::flow::interface10::graphinline
run(Body body)tbb::flow::interface10::graphinline
set_name(const char *name) (defined in tbb::flow::interface10::graph)tbb::flow::interface10::graph
wait_for_all()tbb::flow::interface10::graphinline
~graph()tbb::flow::interface10::graphinline
~graph_proxy() (defined in tbb::flow::interface10::graph_proxy)tbb::flow::interface10::graph_proxyinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00335.html b/doc/html/a00335.html new file mode 100644 index 0000000..e3b8b73 --- /dev/null +++ b/doc/html/a00335.html @@ -0,0 +1,93 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::continue_receiver Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::continue_receiver, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
built_predecessors() __TBB_override (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverinlinevirtual
built_predecessors_type typedef (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiver
continue_receiver(int number_of_predecessors=0)tbb::flow::interface10::continue_receiverinlineexplicit
continue_receiver(const continue_receiver &src)tbb::flow::interface10::continue_receiverinline
copy_predecessors(predecessor_list_type &v) __TBB_override (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverinlinevirtual
execute()=0tbb::flow::interface10::continue_receiverprotectedpure virtual
filtered_type typedef (defined in tbb::flow::interface10::receiver< continue_msg >)tbb::flow::interface10::receiver< continue_msg >
graph_reference()=0 (defined in tbb::flow::interface10::receiver< continue_msg >)tbb::flow::interface10::receiver< continue_msg >protectedpure virtual
input_type typedeftbb::flow::interface10::continue_receiver
internal::broadcast_cache (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverfriend
internal::round_robin_cache (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverfriend
internal::successor_cache (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverfriend
internal_add_built_predecessor(predecessor_type &s) __TBB_override (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverinlinevirtual
internal_delete_built_predecessor(predecessor_type &s) __TBB_override (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverinlinevirtual
is_continue_receiver() __TBB_override (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverinlineprotectedvirtual
limiter_node (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverfriend
my_built_predecessors (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverprotected
my_current_count (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverprotected
my_initial_predecessor_count (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverprotected
my_mutex (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverprotected
my_predecessor_count (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverprotected
predecessor_count() __TBB_override (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverinlinevirtual
predecessor_list_type typedef (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiver
predecessor_type typedeftbb::flow::interface10::continue_receiver
register_predecessor(predecessor_type &) __TBB_overridetbb::flow::interface10::continue_receiverinlinevirtual
remove_predecessor(predecessor_type &) __TBB_overridetbb::flow::interface10::continue_receiverinlinevirtual
reset_receiver(reset_flags f) __TBB_overridetbb::flow::interface10::continue_receiverinlineprotectedvirtual
run_and_put_task (defined in tbb::flow::interface10::continue_receiver)tbb::flow::interface10::continue_receiverfriend
try_put(const typename internal::async_helpers< continue_msg >::filtered_type &t)tbb::flow::interface10::receiver< continue_msg >inline
try_put(const typename internal::async_helpers< continue_msg >::async_type &t) (defined in tbb::flow::interface10::receiver< continue_msg >)tbb::flow::interface10::receiver< continue_msg >inline
try_put(const continue_msg &t)tbb::flow::interface10::receiver< continue_msg >inline
tbb::flow::interface10::internal::untyped_receiver::try_put(const X &t)tbb::flow::interface10::internal::untyped_receiverinline
try_put_task(const input_type &) __TBB_overridetbb::flow::interface10::continue_receiverinlineprotectedvirtual
try_put_task(const X &t) (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverinlineprotected
try_put_task_wrapper(const void *p, bool is_async) __TBB_override (defined in tbb::flow::interface10::receiver< continue_msg >)tbb::flow::interface10::receiver< continue_msg >inlineprotectedvirtual
~receiver()tbb::flow::interface10::receiver< continue_msg >inlinevirtual
~untyped_receiver()tbb::flow::interface10::internal::untyped_receiverinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00336.html b/doc/html/a00336.html new file mode 100644 index 0000000..392089a --- /dev/null +++ b/doc/html/a00336.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::graph_proxy Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::graph_proxy, including all inherited members.

+ + + + +
release_wait()=0tbb::flow::interface10::graph_proxypure virtual
reserve_wait()=0tbb::flow::interface10::graph_proxypure virtual
~graph_proxy() (defined in tbb::flow::interface10::graph_proxy)tbb::flow::interface10::graph_proxyinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00337.html b/doc/html/a00337.html new file mode 100644 index 0000000..bdf657f --- /dev/null +++ b/doc/html/a00337.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::receiver_gateway< Input > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00338.html b/doc/html/a00338.html new file mode 100644 index 0000000..557c4d4 --- /dev/null +++ b/doc/html/a00338.html @@ -0,0 +1,71 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_factory< DeviceFilter > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_factory< DeviceFilter >, including all inherited members.

+ + + + + + + + + + + + + + + + +
async_msg_type typedef (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >
device_type typedef (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >
devices() (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
finalize(opencl_device device, FinalizeFn fn, Args &...args) (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
init(const opencl_device_list &device_list) (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
kernel_type typedef (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >
opencl_buffer_impl (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >friend
opencl_factory() (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
opencl_memory (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >friend
opencl_program (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >friend
range_type typedef (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >
send_data(opencl_device device, T &t, Rest &...args) (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
send_data(opencl_device) (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
send_kernel(opencl_device device, const kernel_type &kernel, const range_type &work_size, Args &...args) (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
~opencl_factory() (defined in tbb::flow::interface10::opencl_factory< DeviceFilter >)tbb::flow::interface10::opencl_factory< DeviceFilter >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00339.html b/doc/html/a00339.html new file mode 100644 index 0000000..85a5353 --- /dev/null +++ b/doc/html/a00339.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00340.html b/doc/html/a00340.html new file mode 100644 index 0000000..100966e --- /dev/null +++ b/doc/html/a00340.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_program< Factory > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_program< Factory >, including all inherited members.

+ + + + + + + + + + + + + +
get_kernel(const std::string &k) const (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
kernel_type typedef (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >
opencl_factory (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >friend
opencl_factory< DeviceFilter >::kernel (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >friend
opencl_program(Factory &factory, opencl_program_type type, const std::string &program_name) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
opencl_program(Factory &factory, const char *program_name) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
opencl_program(Factory &factory, const std::string &program_name) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
opencl_program(opencl_program_type type, const std::string &program_name) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
opencl_program(const char *program_name) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
opencl_program(const std::string &program_name) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
opencl_program(opencl_program_type type) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
opencl_program(const opencl_program &src) (defined in tbb::flow::interface10::opencl_program< Factory >)tbb::flow::interface10::opencl_program< Factory >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00341.html b/doc/html/a00341.html new file mode 100644 index 0000000..0b33944 --- /dev/null +++ b/doc/html/a00341.html @@ -0,0 +1,94 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_device Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_device, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
address_bits() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
available() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
built_in_kernel_available(const std::string &k) const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
built_in_kernels() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
command_queue() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
compiler_available() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
device_id() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
device_id_type typedef (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_device
extension_available(const std::string &ext) const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
extensions() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
host enum value (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_device
info(cl_device_info i, T &t) const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
linker_available() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
major_version() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
max_work_group_size() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
max_work_item_sizes() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
minor_version() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
name() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
opencl_buffer (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_devicefriend
opencl_device() (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
opencl_device(cl_device_id d_id) (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
opencl_device(cl_device_id cl_d_id, device_id_type device_id) (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
opencl_factory (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_devicefriend
opencl_memory (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_devicefriend
opencl_program (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_devicefriend
operator== (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_devicefriend
out_of_order_exec_mode_on_device_present() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
out_of_order_exec_mode_on_host_present() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
platform_extensions() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
platform_name() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
platform_profile() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
platform_vendor() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
platform_version() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
set_command_queue(cl_command_queue cmd_queue) (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
type() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
unknown enum value (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_device
vendor() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
version() const (defined in tbb::flow::interface10::opencl_device)tbb::flow::interface10::opencl_deviceinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00342.html b/doc/html/a00342.html new file mode 100644 index 0000000..61909ef --- /dev/null +++ b/doc/html/a00342.html @@ -0,0 +1,70 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_device_list Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_device_list, including all inherited members.

+ + + + + + + + + + + + + + + +
add(opencl_device d) (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
begin() (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
begin() const (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
cbegin() const (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
cend() const (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
const_iterator typedef (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_list
empty() const (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
end() (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
end() const (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
iterator typedef (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_list
opencl_device_list() (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
opencl_device_list(std::initializer_list< opencl_device > il) (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
size() const (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_listinline
size_type typedef (defined in tbb::flow::interface10::opencl_device_list)tbb::flow::interface10::opencl_device_list
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00343.html b/doc/html/a00343.html new file mode 100644 index 0000000..03ad4e5 --- /dev/null +++ b/doc/html/a00343.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::callback_base Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::callback_base, including all inherited members.

+ + + +
call()=0 (defined in tbb::flow::interface10::callback_base)tbb::flow::interface10::callback_basepure virtual
~callback_base() (defined in tbb::flow::interface10::callback_base)tbb::flow::interface10::callback_baseinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00344.html b/doc/html/a00344.html new file mode 100644 index 0000000..6f49cf0 --- /dev/null +++ b/doc/html/a00344.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::callback< Callback, T > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::callback< Callback, T >, including all inherited members.

+ + + + +
call() __TBB_override (defined in tbb::flow::interface10::callback< Callback, T >)tbb::flow::interface10::callback< Callback, T >inlinevirtual
callback(Callback c, const T &t) (defined in tbb::flow::interface10::callback< Callback, T >)tbb::flow::interface10::callback< Callback, T >inline
~callback_base() (defined in tbb::flow::interface10::callback_base)tbb::flow::interface10::callback_baseinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00345.html b/doc/html/a00345.html new file mode 100644 index 0000000..b02dcaa --- /dev/null +++ b/doc/html/a00345.html @@ -0,0 +1,73 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_async_msg< T, Factory > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_async_msg< T, Factory >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
clear_event() const (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
data(bool wait=true) (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
data(bool wait=true) const (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
finalize() const __TBB_override (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inlineprotected
get_event() const (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
opencl_async_msg() (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
opencl_async_msg(const T &data) (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inlineexplicit
opencl_async_msg(const T &data, cl_event event) (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
opencl_async_msg(const opencl_async_msg &dmsg) (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
opencl_async_msg(opencl_async_msg &&dmsg) (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
operator const T &() const (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
operator T &() (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
operator=(const opencl_async_msg &dmsg) (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
register_callback(Callback c) const (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
set_event(cl_event e) const (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
value_type typedef (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >
~opencl_async_msg() (defined in tbb::flow::interface10::opencl_async_msg< T, Factory >)tbb::flow::interface10::opencl_async_msg< T, Factory >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00346.html b/doc/html/a00346.html new file mode 100644 index 0000000..7d48d4f --- /dev/null +++ b/doc/html/a00346.html @@ -0,0 +1,72 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_memory< Factory > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_memory< Factory >, including all inherited members.

+ + + + + + + + + + + + + + + + + +
factory() const (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
get_cl_mem() const (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
get_host_ptr() (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
map_memory(opencl_device, opencl_async_msg< void *, Factory > &)=0 (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >pure virtual
my_cl_mem (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_curr_device_id (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_factory (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_host_ptr (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_sending_event (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_sending_event_present (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_sending_lock (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
opencl_memory() (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
opencl_memory(Factory &f) (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
receive(const cl_event *e) (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
send(opencl_device device, const cl_event *e) (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
~opencl_memory() (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00347.html b/doc/html/a00347.html new file mode 100644 index 0000000..913a71e --- /dev/null +++ b/doc/html/a00347.html @@ -0,0 +1,76 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_buffer_impl< Factory > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_buffer_impl< Factory >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
factory() const (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
get_cl_mem() const (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
get_host_ptr() (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
map_memory(opencl_device device, opencl_async_msg< void *, Factory > &dmsg) __TBB_override (defined in tbb::flow::interface10::opencl_buffer_impl< Factory >)tbb::flow::interface10::opencl_buffer_impl< Factory >inlinevirtual
my_cl_mem (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_curr_device_id (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_factory (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_host_ptr (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_sending_event (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_sending_event_present (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
my_sending_lock (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >protected
opencl_buffer (defined in tbb::flow::interface10::opencl_buffer_impl< Factory >)tbb::flow::interface10::opencl_buffer_impl< Factory >friend
opencl_buffer_impl(size_t size, Factory &f) (defined in tbb::flow::interface10::opencl_buffer_impl< Factory >)tbb::flow::interface10::opencl_buffer_impl< Factory >inline
opencl_buffer_impl(cl_mem m, size_t index, size_t size, Factory &f) (defined in tbb::flow::interface10::opencl_buffer_impl< Factory >)tbb::flow::interface10::opencl_buffer_impl< Factory >inline
opencl_memory() (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
opencl_memory(Factory &f) (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
receive(const cl_event *e) (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
send(opencl_device device, const cl_event *e) (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
size() const (defined in tbb::flow::interface10::opencl_buffer_impl< Factory >)tbb::flow::interface10::opencl_buffer_impl< Factory >inline
~opencl_memory() (defined in tbb::flow::interface10::opencl_memory< Factory >)tbb::flow::interface10::opencl_memory< Factory >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00348.html b/doc/html/a00348.html new file mode 100644 index 0000000..4687ce3 --- /dev/null +++ b/doc/html/a00348.html @@ -0,0 +1,76 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_subbuffer< T, Factory > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_subbuffer< T, Factory >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
access() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
begin() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
data() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
end() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
iterator typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
memory_object() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
memory_object_type typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
native_object() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
native_object_type typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
opencl_buffer() (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
opencl_buffer(size_t size) (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
opencl_buffer(Factory &f, size_t size) (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
opencl_factory_type typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
opencl_subbuffer() (defined in tbb::flow::interface10::opencl_subbuffer< T, Factory >)tbb::flow::interface10::opencl_subbuffer< T, Factory >inline
opencl_subbuffer(const opencl_buffer< T, Factory > &owner, size_t index, size_t size) (defined in tbb::flow::interface10::opencl_subbuffer< T, Factory >)tbb::flow::interface10::opencl_subbuffer< T, Factory >inline
operator[](ptrdiff_t k) (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
receive(const opencl_async_msg< opencl_buffer, Factory > &dependency) const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
send(opencl_device device, opencl_async_msg< opencl_buffer, Factory > &dependency) const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
size() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
subbuffer(size_t index, size_t size) const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00349.html b/doc/html/a00349.html new file mode 100644 index 0000000..43b5811 --- /dev/null +++ b/doc/html/a00349.html @@ -0,0 +1,77 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_buffer< T, Factory > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_buffer< T, Factory >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
access() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
begin() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
data() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
end() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
iterator typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
memory_object() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
memory_object_type typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
native_object() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
native_object_type typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
opencl_buffer() (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
opencl_buffer(size_t size) (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
opencl_buffer(Factory &f, size_t size) (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
opencl_factory (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >friend
opencl_factory_type typedef (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
opencl_subbuffer (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >friend
operator== (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >friend
operator[](ptrdiff_t k) (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
receive(const opencl_async_msg< opencl_buffer, Factory > &dependency) const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
send(opencl_device device, opencl_async_msg< opencl_buffer, Factory > &dependency) const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
size() const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >inline
subbuffer(size_t index, size_t size) const (defined in tbb::flow::interface10::opencl_buffer< T, Factory >)tbb::flow::interface10::opencl_buffer< T, Factory >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00350.html b/doc/html/a00350.html new file mode 100644 index 0000000..a46edbd --- /dev/null +++ b/doc/html/a00350.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_range Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_range, including all inherited members.

+ + + + + + +
global_range() const (defined in tbb::flow::interface10::opencl_range)tbb::flow::interface10::opencl_rangeinline
local_range() const (defined in tbb::flow::interface10::opencl_range)tbb::flow::interface10::opencl_rangeinline
nd_range_type typedef (defined in tbb::flow::interface10::opencl_range)tbb::flow::interface10::opencl_range
opencl_range(G &&global_work=std::initializer_list< int >({0}), L &&local_work=std::initializer_list< int >({0, 0, 0})) (defined in tbb::flow::interface10::opencl_range)tbb::flow::interface10::opencl_rangeinline
range_index_type typedef (defined in tbb::flow::interface10::opencl_range)tbb::flow::interface10::opencl_range
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00351.html b/doc/html/a00351.html new file mode 100644 index 0000000..c209782 --- /dev/null +++ b/doc/html/a00351.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_node< tuple< Ports...>, JP, Factory > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00352.html b/doc/html/a00352.html new file mode 100644 index 0000000..61a9d8e --- /dev/null +++ b/doc/html/a00352.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_node< tuple< Ports...>, JP > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >, including all inherited members.

+ + + + +
kernel_type typedef (defined in tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >)tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >
opencl_node(graph &g, const kernel_type &kernel) (defined in tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >)tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >inline
opencl_node(graph &g, const kernel_type &kernel, DeviceSelector d) (defined in tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >)tbb::flow::interface10::opencl_node< tuple< Ports...>, JP >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00353.html b/doc/html/a00353.html new file mode 100644 index 0000000..ed74600 --- /dev/null +++ b/doc/html/a00353.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::opencl_node< tuple< Ports...> > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_node< tuple< Ports...> >, including all inherited members.

+ + + + +
kernel_type typedef (defined in tbb::flow::interface10::opencl_node< tuple< Ports...> >)tbb::flow::interface10::opencl_node< tuple< Ports...> >
opencl_node(graph &g, const kernel_type &kernel) (defined in tbb::flow::interface10::opencl_node< tuple< Ports...> >)tbb::flow::interface10::opencl_node< tuple< Ports...> >inline
opencl_node(graph &g, const kernel_type &kernel, DeviceSelector d) (defined in tbb::flow::interface10::opencl_node< tuple< Ports...> >)tbb::flow::interface10::opencl_node< tuple< Ports...> >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00354.html b/doc/html/a00354.html new file mode 100644 index 0000000..8b290c8 --- /dev/null +++ b/doc/html/a00354.html @@ -0,0 +1,64 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::edge_container< C > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00355.html b/doc/html/a00355.html new file mode 100644 index 0000000..a1ce99b --- /dev/null +++ b/doc/html/a00355.html @@ -0,0 +1,64 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::async_helpers< T, typename > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::internal::async_helpers< T, typename >, including all inherited members.

+ + + + + + + + + +
async_type typedef (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >
filtered_type typedef (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >
from_void_ptr(const void *p) (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >inlinestatic
from_void_ptr(void *p) (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >inlinestatic
is_async_type (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >static
to_void_ptr(const T &t) (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >inlinestatic
to_void_ptr(T &t) (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >inlinestatic
try_put_task_wrapper_impl(receiver< T > *const this_recv, const void *p, bool is_async) (defined in tbb::flow::interface10::internal::async_helpers< T, typename >)tbb::flow::interface10::internal::async_helpers< T, typename >inlinestatic
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00356.html b/doc/html/a00356.html new file mode 100644 index 0000000..a51c3f3 --- /dev/null +++ b/doc/html/a00356.html @@ -0,0 +1,64 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >, including all inherited members.

+ + + + + + + + + +
async_type typedef (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >
filtered_type typedef (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >
from_void_ptr(const void *p) (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >inlinestatic
from_void_ptr(void *p) (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >inlinestatic
is_async_type (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >static
to_void_ptr(const T &t) (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >inlinestatic
to_void_ptr(T &t) (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >inlinestatic
try_put_task_wrapper_impl(receiver< T > *const this_recv, const void *p, bool is_async) (defined in tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >)tbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >inlinestatic
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00357.html b/doc/html/a00357.html new file mode 100644 index 0000000..90d618d --- /dev/null +++ b/doc/html/a00357.html @@ -0,0 +1,75 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::untyped_sender Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::internal::untyped_sender, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
built_successors()=0 (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderpure virtual
built_successors_type typedeftbb::flow::interface10::internal::untyped_sender
copy_successors(successor_list_type &)=0 (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderpure virtual
internal::predecessor_cache (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderfriend
internal::reservable_predecessor_cache (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderfriend
internal_add_built_successor(successor_type &)=0 (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderpure virtual
internal_delete_built_successor(successor_type &)=0 (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderpure virtual
register_successor(successor_type &r)=0tbb::flow::interface10::internal::untyped_senderpure virtual
remove_successor(successor_type &r)=0tbb::flow::interface10::internal::untyped_senderpure virtual
successor_count()=0 (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderpure virtual
successor_list_type typedef (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_sender
successor_type typedeftbb::flow::interface10::internal::untyped_sender
try_consume()tbb::flow::interface10::internal::untyped_senderinlinevirtual
try_get(X &t)tbb::flow::interface10::internal::untyped_senderinlineprotected
try_get_wrapper(void *p, bool is_async)=0 (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderprotectedpure virtual
try_release()tbb::flow::interface10::internal::untyped_senderinlinevirtual
try_reserve(X &t)tbb::flow::interface10::internal::untyped_senderinlineprotected
try_reserve_wrapper(void *p, bool is_async)=0 (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderprotectedpure virtual
~untyped_sender() (defined in tbb::flow::interface10::internal::untyped_sender)tbb::flow::interface10::internal::untyped_senderinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00358.html b/doc/html/a00358.html new file mode 100644 index 0000000..01c9a5a --- /dev/null +++ b/doc/html/a00358.html @@ -0,0 +1,79 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::internal::untyped_receiver Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::internal::untyped_receiver, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
built_predecessors()=0 (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverpure virtual
built_predecessors_type typedef (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiver
copy_predecessors(predecessor_list_type &)=0 (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverpure virtual
graph_reference()=0 (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverprotectedpure virtual
internal::broadcast_cache (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverfriend
internal::round_robin_cache (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverfriend
internal::successor_cache (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverfriend
internal_add_built_predecessor(predecessor_type &)=0 (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverpure virtual
internal_delete_built_predecessor(predecessor_type &)=0 (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverpure virtual
is_continue_receiver() (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverinlineprotectedvirtual
limiter_node (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverfriend
predecessor_count()=0 (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverpure virtual
predecessor_list_type typedef (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiver
predecessor_type typedeftbb::flow::interface10::internal::untyped_receiver
proxy_dependency_receiver (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverfriend
register_predecessor(predecessor_type &)tbb::flow::interface10::internal::untyped_receiverinlinevirtual
remove_predecessor(predecessor_type &)tbb::flow::interface10::internal::untyped_receiverinlinevirtual
reset_receiver(reset_flags f=rf_reset_protocol)=0tbb::flow::interface10::internal::untyped_receiverprotectedpure virtual
run_and_put_task (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverfriend
try_put(const X &t)tbb::flow::interface10::internal::untyped_receiverinline
try_put_task(const X &t) (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverinlineprotected
try_put_task_wrapper(const void *p, bool is_async)=0 (defined in tbb::flow::interface10::internal::untyped_receiver)tbb::flow::interface10::internal::untyped_receiverprotectedpure virtual
~untyped_receiver()tbb::flow::interface10::internal::untyped_receiverinlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00359.html b/doc/html/a00359.html new file mode 100644 index 0000000..317661b --- /dev/null +++ b/doc/html/a00359.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::opencl_info::default_device_selector< Factory > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00360.html b/doc/html/a00360.html new file mode 100644 index 0000000..ac21be1 --- /dev/null +++ b/doc/html/a00360.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::opencl_info::default_device_filter Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_info::default_device_filter, including all inherited members.

+ + +
operator()(const opencl_device_list &devices) (defined in tbb::flow::interface10::opencl_info::default_device_filter)tbb::flow::interface10::opencl_info::default_device_filterinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00361.html b/doc/html/a00361.html new file mode 100644 index 0000000..a3cefec --- /dev/null +++ b/doc/html/a00361.html @@ -0,0 +1,69 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::flow::interface10::opencl_info::default_opencl_factory Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface10::opencl_info::default_opencl_factory, including all inherited members.

+ + + + + + + + + + + + + + +
async_msg_type typedef (defined in tbb::flow::interface10::opencl_info::default_opencl_factory)tbb::flow::interface10::opencl_info::default_opencl_factory
default_factory (defined in tbb::flow::interface10::opencl_info::default_opencl_factory)tbb::flow::interface10::opencl_info::default_opencl_factoryfriend
device_type typedef (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >
devices() (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
finalize(opencl_device device, FinalizeFn fn, Args &...args) (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
init(const opencl_device_list &device_list) (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
kernel_type typedef (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >
opencl_factory() (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
range_type typedef (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >
send_data(opencl_device device, T &t, Rest &...args) (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
send_data(opencl_device) (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
send_kernel(opencl_device device, const kernel_type &kernel, const range_type &work_size, Args &...args) (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
~opencl_factory() (defined in tbb::flow::interface10::opencl_factory< default_device_filter >)tbb::flow::interface10::opencl_factory< default_device_filter >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00362.html b/doc/html/a00362.html new file mode 100644 index 0000000..4cdf82a --- /dev/null +++ b/doc/html/a00362.html @@ -0,0 +1,70 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface9::gfx_buffer< T > Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface9::gfx_buffer< T >, including all inherited members.

+ + + + + + + + + + + + + + + +
begin() (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
cbegin() const (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
cend() const (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
const_iterator typedef (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >
data() (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
data() const (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
end() (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
gfx_buffer() (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
gfx_buffer(size_type size) (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
iterator typedef (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >
operator[](size_type pos) (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
operator[](size_type pos) const (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
size() const (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >inline
size_type typedef (defined in tbb::flow::interface9::gfx_buffer< T >)tbb::flow::interface9::gfx_buffer< T >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00363.html b/doc/html/a00363.html new file mode 100644 index 0000000..3de2cec --- /dev/null +++ b/doc/html/a00363.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface9::gfx_async_msg< T > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00364.html b/doc/html/a00364.html new file mode 100644 index 0000000..6b0b5b6 --- /dev/null +++ b/doc/html/a00364.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface9::gfx_factory Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface9::gfx_factory, including all inherited members.

+ + + + + + + + +
async_msg_type typedef (defined in tbb::flow::interface9::gfx_factory)tbb::flow::interface9::gfx_factory
finalize(device_type, FinalizeFn fn, Args &...) (defined in tbb::flow::interface9::gfx_factory)tbb::flow::interface9::gfx_factoryinline
gfx_factory(tbb::flow::graph &g) (defined in tbb::flow::interface9::gfx_factory)tbb::flow::interface9::gfx_factoryinline
kernel_id_type typedef (defined in tbb::flow::interface9::gfx_factory)tbb::flow::interface9::gfx_factory
kernel_type typedef (defined in tbb::flow::interface9::gfx_factory)tbb::flow::interface9::gfx_factory
send_data(device_type, Args &...args) (defined in tbb::flow::interface9::gfx_factory)tbb::flow::interface9::gfx_factoryinline
send_kernel(device_type, const kernel_type &kernel, Args &...args) (defined in tbb::flow::interface9::gfx_factory)tbb::flow::interface9::gfx_factoryinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00365.html b/doc/html/a00365.html new file mode 100644 index 0000000..c571705 --- /dev/null +++ b/doc/html/a00365.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::flow::interface9::gfx_factory::dummy_device_selector Member List
+
+
+ +

This is the complete list of members for tbb::flow::interface9::gfx_factory::dummy_device_selector, including all inherited members.

+ + +
operator()(gfx_factory &) (defined in tbb::flow::interface9::gfx_factory::dummy_device_selector)tbb::flow::interface9::gfx_factory::dummy_device_selectorinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00366.html b/doc/html/a00366.html new file mode 100644 index 0000000..341a08b --- /dev/null +++ b/doc/html/a00366.html @@ -0,0 +1,143 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accessor_location (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
accessor_location (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
allocate_node_copy_construct(node_allocator_type &allocator, const Key &key, const T *t) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotectedstatic
allocate_node_default_construct(node_allocator_type &allocator, const Key &key, const T *) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotectedstatic
allocate_node_emplace_construct(node_allocator_type &allocator, Args &&...args) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotectedstatic
allocate_node_move_construct(node_allocator_type &allocator, const Key &key, const T *t) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotectedstatic
allocator_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
begin() (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
begin() const (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
bucket_count() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
clear()tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
concurrent_hash_map(const allocator_type &a=allocator_type())tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineexplicit
concurrent_hash_map(size_type n, const allocator_type &a=allocator_type())tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
concurrent_hash_map(const concurrent_hash_map &table, const allocator_type &a=allocator_type())tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
concurrent_hash_map(concurrent_hash_map &&table)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
concurrent_hash_map(concurrent_hash_map &&table, const allocator_type &a)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
concurrent_hash_map(I first, I last, const allocator_type &a=allocator_type())tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
concurrent_hash_map(std::initializer_list< value_type > il, const allocator_type &a=allocator_type())tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
const_accessor (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
const_iterator typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
const_pointer typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
const_range_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
const_reference typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
count(const Key &key) const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
delete_node(node_base *n) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotected
difference_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
do_not_allocate_node(node_allocator_type &, const Key &, const T *) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotectedstatic
emplace(const_accessor &result, Args &&...args)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
emplace(accessor &result, Args &&...args)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
emplace(Args &&...args)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
empty() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
end() (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
end() const (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
equal_range(const Key &key) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
equal_range(const Key &key) const (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
erase(const Key &key)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
erase(const_accessor &item_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
erase(accessor &item_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
exclude(const_accessor &item_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
find(const_accessor &result, const Key &key) const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
find(accessor &result, const Key &key)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
generic_emplace(Accessor &&result, Args &&...args) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotected
generic_move_insert(Accessor &&result, value_type &&value) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotected
get_allocator() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(const_accessor &result, const Key &key)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(accessor &result, const Key &key)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(const_accessor &result, const value_type &value)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(accessor &result, const value_type &value)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(const value_type &value)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(const_accessor &result, value_type &&value)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(accessor &result, value_type &&value)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(value_type &&value)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(I first, I last)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
insert(std::initializer_list< value_type > il)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
internal::hash_map_iterator (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
internal::hash_map_range (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
internal_copy(const concurrent_hash_map &source)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
internal_copy(I first, I last) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
internal_equal_range(const Key &key, I end) const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
internal_fast_find(const Key &key) const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotected
is_write_access_needed (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
is_write_access_needed (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
is_write_access_needed (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >friend
iterator typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
key_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
lookup(bool op_insert, const Key &key, const T *t, const_accessor *result, bool write, node *(*allocate_node)(node_allocator_type &, const Key &, const T *), node *tmp_n=0)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
mapped_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
max_size() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
my_allocator (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
my_hash_compare (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
node_allocator_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >protected
operator=(const concurrent_hash_map &table)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
operator=(concurrent_hash_map &&table)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
operator=(std::initializer_list< value_type > il)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
pointer typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
range(size_type grainsize=1) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
range(size_type grainsize=1) const (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
range_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
reference typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
rehash(size_type n=0)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
rehash_bucket(bucket *b_new, const hashcode_t h) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotected
search_bucket(const key_type &key, bucket *b) const (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inlineprotected
size() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
size_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
swap(concurrent_hash_map &table)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
value_type typedef (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >
~concurrent_hash_map()tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00367.html b/doc/html/a00367.html new file mode 100644 index 0000000..75b7e25 --- /dev/null +++ b/doc/html/a00367.html @@ -0,0 +1,66 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00368.html b/doc/html/a00368.html new file mode 100644 index 0000000..9bb7d6b --- /dev/null +++ b/doc/html/a00368.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00369.html b/doc/html/a00369.html new file mode 100644 index 0000000..b5ad608 --- /dev/null +++ b/doc/html/a00369.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::bucket_accessor Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00370.html b/doc/html/a00370.html new file mode 100644 index 0000000..123d3f6 --- /dev/null +++ b/doc/html/a00370.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00371.html b/doc/html/a00371.html new file mode 100644 index 0000000..9f10df1 --- /dev/null +++ b/doc/html/a00371.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor, including all inherited members.

+ + + + + + + + + + + + + +
accessor (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorfriend
concurrent_hash_map< Key, T, HashCompare, Allocator > (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorfriend
const_accessor()tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorinline
empty() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorinline
is_writer() (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorinlineprotected
my_hash (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorprotected
my_node (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorprotected
operator*() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorinline
operator->() const tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorinline
release()tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorinline
value_type typedeftbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor
~const_accessor()tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::const_accessorinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00372.html b/doc/html/a00372.html new file mode 100644 index 0000000..66690a0 --- /dev/null +++ b/doc/html/a00372.html @@ -0,0 +1,66 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node, including all inherited members.

+ + + + + + + + + + + +
item (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node
node(const Key &key) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
node(const Key &key, const T &t) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
node(const Key &key, T &&t) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
node(value_type &&i) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
node(Args &&...args) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
node(value_type &i) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
node(const value_type &i) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
operator delete(void *ptr, node_allocator_type &a) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
operator new(size_t, node_allocator_type &a) (defined in tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::node)tbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::nodeinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00373.html b/doc/html/a00373.html new file mode 100644 index 0000000..9a89b9d --- /dev/null +++ b/doc/html/a00373.html @@ -0,0 +1,84 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_priority_queue< T, Compare, A > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_priority_queue< T, Compare, A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedeftbb::interface5::concurrent_priority_queue< T, Compare, A >
assign(InputIterator begin, InputIterator end)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
assign(std::initializer_list< T > il)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
clear()tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
concurrent_priority_queue(const allocator_type &a=allocator_type())tbb::interface5::concurrent_priority_queue< T, Compare, A >inlineexplicit
concurrent_priority_queue(size_type init_capacity, const allocator_type &a=allocator_type())tbb::interface5::concurrent_priority_queue< T, Compare, A >inlineexplicit
concurrent_priority_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
concurrent_priority_queue(std::initializer_list< T > init_list, const allocator_type &a=allocator_type())tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
concurrent_priority_queue(const concurrent_priority_queue &src)tbb::interface5::concurrent_priority_queue< T, Compare, A >inlineexplicit
concurrent_priority_queue(const concurrent_priority_queue &src, const allocator_type &a)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
concurrent_priority_queue(concurrent_priority_queue &&src)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
concurrent_priority_queue(concurrent_priority_queue &&src, const allocator_type &a)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
const_reference typedeftbb::interface5::concurrent_priority_queue< T, Compare, A >
difference_type typedeftbb::interface5::concurrent_priority_queue< T, Compare, A >
emplace(Args &&...args)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
empty() const tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
get_allocator() const tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
operator=(const concurrent_priority_queue &src)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
operator=(concurrent_priority_queue &&src)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
operator=(std::initializer_list< T > il)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
push(const_reference elem)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
push(value_type &&elem)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
reference typedeftbb::interface5::concurrent_priority_queue< T, Compare, A >
size() const tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
size_type typedeftbb::interface5::concurrent_priority_queue< T, Compare, A >
swap(concurrent_priority_queue &q)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
try_pop(reference elem)tbb::interface5::concurrent_priority_queue< T, Compare, A >inline
value_type typedeftbb::interface5::concurrent_priority_queue< T, Compare, A >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00374.html b/doc/html/a00374.html new file mode 100644 index 0000000..65a58ee --- /dev/null +++ b/doc/html/a00374.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >, including all inherited members.

+ + + + + + + + + + +
allocator_type typedef (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >protected
allow_multimapping enum value (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >protected
concurrent_unordered_map_traits() (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >inlineprotected
concurrent_unordered_map_traits(const hash_compare &hc) (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >inlineprotected
get_key(const std::pair< Type1, Type2 > &value) (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >inlineprotectedstatic
hash_compare typedef (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >protected
key_type typedef (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >protected
my_hash_compare (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >protected
value_type typedef (defined in tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >protected
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00375.html b/doc/html/a00375.html new file mode 100644 index 0000000..bead535 --- /dev/null +++ b/doc/html/a00375.html @@ -0,0 +1,86 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
at(const key_type &key) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
at(const key_type &key) const (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_map(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_map(const Allocator &a) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_map(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_map(const concurrent_unordered_map &table) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_map(concurrent_unordered_map &&table) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_map(concurrent_unordered_map &&table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_map(const concurrent_unordered_map &table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
const_iterator typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
const_local_iterator typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
const_pointer typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
const_reference typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
difference_type typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
hasher typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
iterator typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
key_compare typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
key_equal typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
key_type typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
local_iterator typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
mapped_type typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
operator=(const concurrent_unordered_map &table) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
operator=(concurrent_unordered_map &&table) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
operator[](const key_type &key) (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >inline
pointer typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
reference typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
size_type typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
value_type typedef (defined in tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_map< Key, T, Hasher, Key_equality, Allocator >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00376.html b/doc/html/a00376.html new file mode 100644 index 0000000..e2e74a6 --- /dev/null +++ b/doc/html/a00376.html @@ -0,0 +1,83 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
concurrent_unordered_multimap(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_multimap(const Allocator &a) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multimap(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type())tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multimap(const concurrent_unordered_multimap &table) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multimap(concurrent_unordered_multimap &&table) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multimap(concurrent_unordered_multimap &&table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multimap(const concurrent_unordered_multimap &table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
const_iterator typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
const_local_iterator typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
const_pointer typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
const_reference typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
difference_type typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
hasher typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
iterator typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
key_compare typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
key_equal typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
key_type typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
local_iterator typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
mapped_type typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
operator=(const concurrent_unordered_multimap &table) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
operator=(concurrent_unordered_multimap &&table) (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >inline
pointer typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
reference typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
size_type typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
value_type typedef (defined in tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multimap< Key, T, Hasher, Key_equality, Allocator >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00377.html b/doc/html/a00377.html new file mode 100644 index 0000000..faaf4b3 --- /dev/null +++ b/doc/html/a00377.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >, including all inherited members.

+ + + + + + + + + + +
allocator_type typedef (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >protected
allow_multimapping enum value (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >protected
concurrent_unordered_set_traits() (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >inlineprotected
concurrent_unordered_set_traits(const hash_compare &hc) (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >inlineprotected
get_key(const value_type &value) (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >inlineprotectedstatic
hash_compare typedef (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >protected
key_type typedef (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >protected
my_hash_compare (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >protected
value_type typedef (defined in tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >)tbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >protected
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00378.html b/doc/html/a00378.html new file mode 100644 index 0000000..2f158b4 --- /dev/null +++ b/doc/html/a00378.html @@ -0,0 +1,83 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
concurrent_unordered_set(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_set(const Allocator &a) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_set(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_set(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_set(const concurrent_unordered_set &table) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_set(concurrent_unordered_set &&table) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_set(concurrent_unordered_set &&table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_set(const concurrent_unordered_set &table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
const_iterator typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
const_local_iterator typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
const_pointer typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
const_reference typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
difference_type typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
hasher typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
iterator typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
key_compare typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
key_equal typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
key_type typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
local_iterator typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
mapped_type typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
operator=(const concurrent_unordered_set &table) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
operator=(concurrent_unordered_set &&table) (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >inline
pointer typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
reference typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
size_type typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
value_type typedef (defined in tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_set< Key, Hasher, Key_equality, Allocator >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00379.html b/doc/html/a00379.html new file mode 100644 index 0000000..7f20f05 --- /dev/null +++ b/doc/html/a00379.html @@ -0,0 +1,83 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator > Member List
+
+
+ +

This is the complete list of members for tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
concurrent_unordered_multiset(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_multiset(const Allocator &a) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inlineexplicit
concurrent_unordered_multiset(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &a=allocator_type()) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multiset(std::initializer_list< value_type > il, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multiset(const concurrent_unordered_multiset &table) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multiset(concurrent_unordered_multiset &&table) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multiset(concurrent_unordered_multiset &&table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
concurrent_unordered_multiset(const concurrent_unordered_multiset &table, const Allocator &a) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
const_iterator typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
const_local_iterator typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
const_pointer typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
const_reference typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
difference_type typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
hasher typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
iterator typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
key_compare typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
key_equal typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
key_type typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
local_iterator typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
mapped_type typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
operator=(const concurrent_unordered_multiset &table) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
operator=(concurrent_unordered_multiset &&table) (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >inline
pointer typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
reference typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
size_type typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
value_type typedef (defined in tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >)tbb::interface5::concurrent_unordered_multiset< Key, Hasher, Key_equality, Allocator >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00380.html b/doc/html/a00380.html new file mode 100644 index 0000000..9258239 --- /dev/null +++ b/doc/html/a00380.html @@ -0,0 +1,70 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::reader_writer_lock Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00381.html b/doc/html/a00381.html new file mode 100644 index 0000000..9635862 --- /dev/null +++ b/doc/html/a00381.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::reader_writer_lock::scoped_lock Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00382.html b/doc/html/a00382.html new file mode 100644 index 0000000..6aeacac --- /dev/null +++ b/doc/html/a00382.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::reader_writer_lock::scoped_lock_read Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00383.html b/doc/html/a00383.html new file mode 100644 index 0000000..31932da --- /dev/null +++ b/doc/html/a00383.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::internal::use_element_copy_constructor< T, C > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00384.html b/doc/html/a00384.html new file mode 100644 index 0000000..c548638 --- /dev/null +++ b/doc/html/a00384.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface5::internal::use_element_copy_constructor< T, false > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00385.html b/doc/html/a00385.html new file mode 100644 index 0000000..42567fd --- /dev/null +++ b/doc/html/a00385.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::aggregator_operation Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00386.html b/doc/html/a00386.html new file mode 100644 index 0000000..fddb953 --- /dev/null +++ b/doc/html/a00386.html @@ -0,0 +1,59 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::aggregator_ext< handler_type > Member List
+
+
+ +

This is the complete list of members for tbb::interface6::aggregator_ext< handler_type >, including all inherited members.

+ + + + +
aggregator_ext(const handler_type &h) (defined in tbb::interface6::aggregator_ext< handler_type >)tbb::interface6::aggregator_ext< handler_type >inline
execute_impl(aggregator_operation &op)tbb::interface6::aggregator_ext< handler_type >inlineprotected
process(aggregator_operation *op)tbb::interface6::aggregator_ext< handler_type >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00387.html b/doc/html/a00387.html new file mode 100644 index 0000000..0245693 --- /dev/null +++ b/doc/html/a00387.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::aggregator Member List
+
+
+ +

This is the complete list of members for tbb::interface6::aggregator, including all inherited members.

+ + + + + + +
aggregator() (defined in tbb::interface6::aggregator)tbb::interface6::aggregatorinline
aggregator_ext(const internal::basic_handler &h) (defined in tbb::interface6::aggregator_ext< internal::basic_handler >)tbb::interface6::aggregator_ext< internal::basic_handler >inlineprivate
execute(const Body &b)tbb::interface6::aggregatorinline
execute_impl(aggregator_operation &op)tbb::interface6::aggregator_ext< internal::basic_handler >inlineprivate
process(aggregator_operation *op)tbb::interface6::aggregator_ext< internal::basic_handler >inlineprivate
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00388.html b/doc/html/a00388.html new file mode 100644 index 0000000..275ac2f --- /dev/null +++ b/doc/html/a00388.html @@ -0,0 +1,60 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::concurrent_lru_cache< key_type, value_type, value_functor_type > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00389.html b/doc/html/a00389.html new file mode 100644 index 0000000..04cebda --- /dev/null +++ b/doc/html/a00389.html @@ -0,0 +1,96 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type > Member List
+
+
+ +

This is the complete list of members for tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedeftbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
begin()tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
begin() const tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
clear()tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
combine(combine_func_t f_combine) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
combine_each(combine_func_t f_combine) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
const_iterator typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
const_pointer typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
const_range_type typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
const_reference typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
difference_type typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
empty() const tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
end()tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
end() const tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
enumerable_thread_specific (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >friend
enumerable_thread_specific()tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
enumerable_thread_specific(Finit finit)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inlineexplicit
enumerable_thread_specific(const T &exemplar)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inlineexplicit
enumerable_thread_specific(T &&exemplar) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inlineexplicit
enumerable_thread_specific(P1 &&arg1, P &&...args)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
enumerable_thread_specific(const enumerable_thread_specific &other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
enumerable_thread_specific(const enumerable_thread_specific< T, Alloc, Cachetype > &other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
enumerable_thread_specific(enumerable_thread_specific &&other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
enumerable_thread_specific(enumerable_thread_specific< T, Alloc, Cachetype > &&other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
iterator typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
local()tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
local(bool &exists)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
operator=(const enumerable_thread_specific &other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
operator=(const enumerable_thread_specific< T, Alloc, Cachetype > &other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
operator=(enumerable_thread_specific &&other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
operator=(enumerable_thread_specific< T, Alloc, Cachetype > &&other) (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
pointer typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
range(size_t grainsize=1)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
range(size_t grainsize=1) const tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
range_type typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
reference typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
size() const tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
size_type typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
value_type typedef (defined in tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >)tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >
~enumerable_thread_specific()tbb::interface6::enumerable_thread_specific< T, Allocator, ETS_key_type >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00390.html b/doc/html/a00390.html new file mode 100644 index 0000000..2fe76dd --- /dev/null +++ b/doc/html/a00390.html @@ -0,0 +1,73 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::flattened2d< Container > Member List
+
+
+ +

This is the complete list of members for tbb::interface6::flattened2d< Container >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
begin() (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >inline
begin() const (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >inline
const_iterator typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
const_pointer typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
const_reference typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
difference_type typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
end() (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >inline
end() const (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >inline
flattened2d(const Container &c, typename Container::const_iterator b, typename Container::const_iterator e) (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >inline
flattened2d(const Container &c) (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >inlineexplicit
iterator typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
pointer typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
reference typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
size() const (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >inline
size_type typedeftbb::interface6::flattened2d< Container >
value_type typedef (defined in tbb::interface6::flattened2d< Container >)tbb::interface6::flattened2d< Container >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00391.html b/doc/html/a00391.html new file mode 100644 index 0000000..01d7a6c --- /dev/null +++ b/doc/html/a00391.html @@ -0,0 +1,80 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::memory_pool_allocator< T, P > Member List
+
+
+ +

This is the complete list of members for tbb::interface6::memory_pool_allocator< T, P >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
address(reference x) const (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >inline
address(const_reference x) const (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >inline
allocate(size_type n, const void *=0)tbb::interface6::memory_pool_allocator< T, P >inline
const_pointer typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >
const_reference typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >
construct(U *p, Args &&...args)tbb::interface6::memory_pool_allocator< T, P >inline
construct(pointer p, value_type &&value) (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >inline
construct(pointer p, const value_type &value) (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >inline
deallocate(pointer p, size_type)tbb::interface6::memory_pool_allocator< T, P >inline
destroy(pointer p)tbb::interface6::memory_pool_allocator< T, P >inline
difference_type typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >
max_size() const tbb::interface6::memory_pool_allocator< T, P >inline
memory_pool_allocator (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >friend
memory_pool_allocator(pool_type &pool) (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >inlineexplicit
memory_pool_allocator(const memory_pool_allocator &src) (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >inline
memory_pool_allocator(const memory_pool_allocator< U, P > &src) (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >inline
my_pool (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >protected
operator!= (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >friend
operator== (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >friend
pointer typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >
pool_type typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >protected
reference typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >
size_type typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >
value_type typedef (defined in tbb::interface6::memory_pool_allocator< T, P >)tbb::interface6::memory_pool_allocator< T, P >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00392.html b/doc/html/a00392.html new file mode 100644 index 0000000..db9fbeb --- /dev/null +++ b/doc/html/a00392.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::memory_pool_allocator< T, P >::rebind< U > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00393.html b/doc/html/a00393.html new file mode 100644 index 0000000..0ef4603 --- /dev/null +++ b/doc/html/a00393.html @@ -0,0 +1,67 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::memory_pool_allocator< void, P > Member List
+
+
+ +

This is the complete list of members for tbb::interface6::memory_pool_allocator< void, P >, including all inherited members.

+ + + + + + + + + + + + +
const_pointer typedef (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >
memory_pool_allocator (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >friend
memory_pool_allocator(pool_type &pool) (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >inlineexplicit
memory_pool_allocator(const memory_pool_allocator &src) (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >inline
memory_pool_allocator(const memory_pool_allocator< U, P > &src) (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >inline
my_pool (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >protected
operator!= (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >friend
operator== (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >friend
pointer typedef (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >
pool_type typedef (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >
value_type typedef (defined in tbb::interface6::memory_pool_allocator< void, P >)tbb::interface6::memory_pool_allocator< void, P >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00394.html b/doc/html/a00394.html new file mode 100644 index 0000000..19daaca --- /dev/null +++ b/doc/html/a00394.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::memory_pool_allocator< void, P >::rebind< U > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00395.html b/doc/html/a00395.html new file mode 100644 index 0000000..32594fb --- /dev/null +++ b/doc/html/a00395.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::memory_pool< Alloc > Member List
+
+
+ +

This is the complete list of members for tbb::interface6::memory_pool< Alloc >, including all inherited members.

+ + + +
memory_pool(const Alloc &src=Alloc())tbb::interface6::memory_pool< Alloc >explicit
~memory_pool()tbb::interface6::memory_pool< Alloc >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00396.html b/doc/html/a00396.html new file mode 100644 index 0000000..96010dd --- /dev/null +++ b/doc/html/a00396.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::fixed_pool Member List
+
+
+ +

This is the complete list of members for tbb::interface6::fixed_pool, including all inherited members.

+ + + +
fixed_pool(void *buf, size_t size)tbb::interface6::fixed_poolinline
~fixed_pool()tbb::interface6::fixed_poolinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00397.html b/doc/html/a00397.html new file mode 100644 index 0000000..ee4b653 --- /dev/null +++ b/doc/html/a00397.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::flow_control Member List
+
+
+ +

This is the complete list of members for tbb::interface6::flow_control, including all inherited members.

+ + + +
internal::concrete_filter (defined in tbb::interface6::flow_control)tbb::interface6::flow_controlfriend
stop() (defined in tbb::interface6::flow_control)tbb::interface6::flow_controlinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00398.html b/doc/html/a00398.html new file mode 100644 index 0000000..85c05a3 --- /dev/null +++ b/doc/html/a00398.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::filter_t< T, U > Member List
+
+
+ +

This is the complete list of members for tbb::interface6::filter_t< T, U >, including all inherited members.

+ + + + + + + + + + +
clear() (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >inline
filter_t() (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >inline
filter_t(const filter_t< T, U > &rhs) (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >inline
filter_t(tbb::filter::mode mode, const Body &body) (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >inline
internal::pipeline_proxy (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >friend
make_filter(tbb::filter::mode, const Body &)tbb::interface6::filter_t< T, U >friend
operator& (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >friend
operator=(const filter_t< T, U > &rhs) (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >inline
~filter_t() (defined in tbb::interface6::filter_t< T, U >)tbb::interface6::filter_t< T, U >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00399.html b/doc/html/a00399.html new file mode 100644 index 0000000..e65163a --- /dev/null +++ b/doc/html/a00399.html @@ -0,0 +1,72 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::runtime_loader Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00400.html b/doc/html/a00400.html new file mode 100644 index 0000000..5b44971 --- /dev/null +++ b/doc/html/a00400.html @@ -0,0 +1,71 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::task_scheduler_observer Member List
+
+
+ +

This is the complete list of members for tbb::interface6::task_scheduler_observer, including all inherited members.

+ + + + + + + + + + + + + + + + +
allow_sleep enum value (defined in tbb::interface6::task_scheduler_observer)tbb::interface6::task_scheduler_observer
internal::observer_list (defined in tbb::interface6::task_scheduler_observer)tbb::interface6::task_scheduler_observerfriend
internal::observer_proxy (defined in tbb::interface6::task_scheduler_observer)tbb::interface6::task_scheduler_observerfriend
internal::task_scheduler_observer_v3 (defined in tbb::interface6::task_scheduler_observer)tbb::interface6::task_scheduler_observerfriend
is_observing() const tbb::internal::task_scheduler_observer_v3inline
keep_awake enum value (defined in tbb::interface6::task_scheduler_observer)tbb::interface6::task_scheduler_observer
may_sleep()tbb::interface6::task_scheduler_observerinlinevirtual
observe(bool state=true)tbb::interface6::task_scheduler_observerinline
on_scheduler_entry(bool)tbb::internal::task_scheduler_observer_v3inlinevirtual
on_scheduler_exit(bool)tbb::internal::task_scheduler_observer_v3inlinevirtual
task_scheduler_observer(bool local=false)tbb::interface6::task_scheduler_observerinlineexplicit
task_scheduler_observer(task_arena &a)tbb::interface6::task_scheduler_observerinlineexplicit
task_scheduler_observer_v3()tbb::internal::task_scheduler_observer_v3inline
~task_scheduler_observer()tbb::interface6::task_scheduler_observerinlinevirtual
~task_scheduler_observer_v3()tbb::internal::task_scheduler_observer_v3inlinevirtual
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00401.html b/doc/html/a00401.html new file mode 100644 index 0000000..1fb9f70 --- /dev/null +++ b/doc/html/a00401.html @@ -0,0 +1,67 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface6::internal::basic_operation_base Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00402.html b/doc/html/a00402.html new file mode 100644 index 0000000..735e9ae --- /dev/null +++ b/doc/html/a00402.html @@ -0,0 +1,67 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::interface6::internal::basic_operation< Body > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00403.html b/doc/html/a00403.html new file mode 100644 index 0000000..ff6a3a1 --- /dev/null +++ b/doc/html/a00403.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + +
+ + + + + +
+
+
+
tbb::interface6::internal::basic_handler Member List
+
+
+ +

This is the complete list of members for tbb::interface6::internal::basic_handler, including all inherited members.

+ + + +
basic_handler() (defined in tbb::interface6::internal::basic_handler)tbb::interface6::internal::basic_handlerinline
operator()(aggregator_operation *op_list) const (defined in tbb::interface6::internal::basic_handler)tbb::interface6::internal::basic_handlerinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00404.html b/doc/html/a00404.html new file mode 100644 index 0000000..ba07c6b --- /dev/null +++ b/doc/html/a00404.html @@ -0,0 +1,76 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface7::task_arena Member List
+
+
+ +

This is the complete list of members for tbb::interface7::task_arena, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
current_thread_index()tbb::interface7::task_arenainlinestatic
debug_wait_until_empty()tbb::interface7::task_arenainline
enqueue(F &&f)tbb::interface7::task_arenainline
enqueue(const F &f) (defined in tbb::interface7::task_arena)tbb::interface7::task_arenainline
enqueue(F &&f, priority_t p)tbb::interface7::task_arenainline
enqueue(const F &f, priority_t p) (defined in tbb::interface7::task_arena)tbb::interface7::task_arenainline
execute(F &f)tbb::interface7::task_arenainline
execute(const F &f)tbb::interface7::task_arenainline
initialize()tbb::interface7::task_arenainline
initialize(int max_concurrency_, unsigned reserved_for_masters=1)tbb::interface7::task_arenainline
initialize(attach)tbb::interface7::task_arenainline
is_active() const tbb::interface7::task_arenainline
max_concurrency() const tbb::interface7::task_arenainline
task_arena(int max_concurrency_=automatic, unsigned reserved_for_masters=1)tbb::interface7::task_arenainline
task_arena(const task_arena &s)tbb::interface7::task_arenainline
task_arena(attach)tbb::interface7::task_arenainlineexplicit
tbb::internal::task_scheduler_observer_v3 (defined in tbb::interface7::task_arena)tbb::interface7::task_arenafriend
tbb::this_task_arena::max_concurrency (defined in tbb::interface7::task_arena)tbb::interface7::task_arenafriend
terminate()tbb::interface7::task_arenainline
~task_arena()tbb::interface7::task_arenainline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00405.html b/doc/html/a00405.html new file mode 100644 index 0000000..22a1085 --- /dev/null +++ b/doc/html/a00405.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::interface9::global_control Member List
+
+
+ +

This is the complete list of members for tbb::interface9::global_control, including all inherited members.

+ + + + + + + + +
active_value(parameter p) (defined in tbb::interface9::global_control)tbb::interface9::global_controlinlinestatic
global_control(parameter p, size_t value) (defined in tbb::interface9::global_control)tbb::interface9::global_controlinline
max_allowed_parallelism enum value (defined in tbb::interface9::global_control)tbb::interface9::global_control
parameter enum name (defined in tbb::interface9::global_control)tbb::interface9::global_control
parameter_max enum value (defined in tbb::interface9::global_control)tbb::interface9::global_control
thread_stack_size enum value (defined in tbb::interface9::global_control)tbb::interface9::global_control
~global_control() (defined in tbb::interface9::global_control)tbb::interface9::global_controlinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00406.html b/doc/html/a00406.html new file mode 100644 index 0000000..b0a2353 --- /dev/null +++ b/doc/html/a00406.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::critical_section_v4 Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00407.html b/doc/html/a00407.html new file mode 100644 index 0000000..a556849 --- /dev/null +++ b/doc/html/a00407.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::critical_section_v4::scoped_lock Member List
+
+
+ +

This is the complete list of members for tbb::internal::critical_section_v4::scoped_lock, including all inherited members.

+ + + +
scoped_lock(critical_section_v4 &lock_me) (defined in tbb::internal::critical_section_v4::scoped_lock)tbb::internal::critical_section_v4::scoped_lockinline
~scoped_lock() (defined in tbb::internal::critical_section_v4::scoped_lock)tbb::internal::critical_section_v4::scoped_lockinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00408.html b/doc/html/a00408.html new file mode 100644 index 0000000..24c45d6 --- /dev/null +++ b/doc/html/a00408.html @@ -0,0 +1,57 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::task_handle_task< F > Member List
+
+
+ +

This is the complete list of members for tbb::internal::task_handle_task< F >, including all inherited members.

+ + +
task_handle_task(task_handle< F > &h) (defined in tbb::internal::task_handle_task< F >)tbb::internal::task_handle_task< F >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00409.html b/doc/html/a00409.html new file mode 100644 index 0000000..dfcc415 --- /dev/null +++ b/doc/html/a00409.html @@ -0,0 +1,67 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::task_group_base Member List
+
+
+ +

This is the complete list of members for tbb::internal::task_group_base, including all inherited members.

+ + + + + + + + + + + + +
cancel() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
internal_run(__TBB_FORWARDING_REF(F) f) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
internal_run_and_wait(F &f) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
is_canceling() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
my_context (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseprotected
my_root (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseprotected
owner() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinlineprotected
run(task_handle< F > &h) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
task_group_base(uintptr_t traits=0) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
wait() (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
~task_group_base() __TBB_NOEXCEPT(false) (defined in tbb::internal::task_group_base)tbb::internal::task_group_baseinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00410.html b/doc/html/a00410.html new file mode 100644 index 0000000..00b35f4 --- /dev/null +++ b/doc/html/a00410.html @@ -0,0 +1,65 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::task_scheduler_observer_v3 Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00411.html b/doc/html/a00411.html new file mode 100644 index 0000000..ef2f63b --- /dev/null +++ b/doc/html/a00411.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::tbb_exception_ptr Member List
+
+
+ +

This is the complete list of members for tbb::internal::tbb_exception_ptr, including all inherited members.

+ + + + + + +
allocate() (defined in tbb::internal::tbb_exception_ptr)tbb::internal::tbb_exception_ptrstatic
allocate(const tbb_exception &tag) (defined in tbb::internal::tbb_exception_ptr)tbb::internal::tbb_exception_ptrstatic
allocate(captured_exception &src)tbb::internal::tbb_exception_ptrstatic
destroy()tbb::internal::tbb_exception_ptr
throw_self()tbb::internal::tbb_exception_ptrinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00412.html b/doc/html/a00412.html new file mode 100644 index 0000000..7a80abb --- /dev/null +++ b/doc/html/a00412.html @@ -0,0 +1,58 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::thread_closure_base Member List
+
+
+ +

This is the complete list of members for tbb::internal::thread_closure_base, including all inherited members.

+ + + +
operator delete(void *ptr) (defined in tbb::internal::thread_closure_base)tbb::internal::thread_closure_baseinline
operator new(size_t size) (defined in tbb::internal::thread_closure_base)tbb::internal::thread_closure_baseinline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00413.html b/doc/html/a00413.html new file mode 100644 index 0000000..21b9a34 --- /dev/null +++ b/doc/html/a00413.html @@ -0,0 +1,61 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::thread_closure_0< F > Member List
+
+
+ +

This is the complete list of members for tbb::internal::thread_closure_0< F >, including all inherited members.

+ + + + + + +
function (defined in tbb::internal::thread_closure_0< F >)tbb::internal::thread_closure_0< F >
operator delete(void *ptr) (defined in tbb::internal::thread_closure_base)tbb::internal::thread_closure_baseinline
operator new(size_t size) (defined in tbb::internal::thread_closure_base)tbb::internal::thread_closure_baseinline
start_routine(void *c) (defined in tbb::internal::thread_closure_0< F >)tbb::internal::thread_closure_0< F >inlinestatic
thread_closure_0(const F &f) (defined in tbb::internal::thread_closure_0< F >)tbb::internal::thread_closure_0< F >inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00414.html b/doc/html/a00414.html new file mode 100644 index 0000000..c4d3c2f --- /dev/null +++ b/doc/html/a00414.html @@ -0,0 +1,62 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::thread_closure_1< F, X > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00415.html b/doc/html/a00415.html new file mode 100644 index 0000000..718c3b3 --- /dev/null +++ b/doc/html/a00415.html @@ -0,0 +1,63 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::thread_closure_2< F, X, Y > Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00416.html b/doc/html/a00416.html new file mode 100644 index 0000000..8a88308 --- /dev/null +++ b/doc/html/a00416.html @@ -0,0 +1,75 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::tbb_thread_v3 Member List
+
+
+ +

This is the complete list of members for tbb::internal::tbb_thread_v3, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
detach()tbb::internal::tbb_thread_v3
get_id() const __TBB_NOEXCEPT(true) (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3inline
hardware_concurrency() __TBB_NOEXCEPT(true)tbb::internal::tbb_thread_v3static
join()tbb::internal::tbb_thread_v3
joinable() const __TBB_NOEXCEPT(true) (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3inline
move_v3 (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3friend
native_handle() (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3inline
native_handle_type typedef (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3
native_handle_type typedef (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3
operator= (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3inline
operator=(tbb_thread_v3 &x) (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3inline
swap(tbb_thread_v3 &t) __TBB_NOEXCEPT(true) (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3inline
tbb::swap (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3friend
tbb_thread_v3(const tbb_thread_v3 &) (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3
tbb_thread_v3() __TBB_NOEXCEPT(true)tbb::internal::tbb_thread_v3inline
tbb_thread_v3(F f)tbb::internal::tbb_thread_v3inlineexplicit
tbb_thread_v3(F f, X x)tbb::internal::tbb_thread_v3inline
tbb_thread_v3(F f, X x, Y y)tbb::internal::tbb_thread_v3inline
~tbb_thread_v3() (defined in tbb::internal::tbb_thread_v3)tbb::internal::tbb_thread_v3inline
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00417.html b/doc/html/a00417.html new file mode 100644 index 0000000..814225f --- /dev/null +++ b/doc/html/a00417.html @@ -0,0 +1,68 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::internal::tbb_thread_v3::id Member List
+
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/a00418.html b/doc/html/a00418.html new file mode 100644 index 0000000..74c9e93 --- /dev/null +++ b/doc/html/a00418.html @@ -0,0 +1,83 @@ + + + + + + +Member List + + + + + + + +
+
+
tbb::strict_ppl::concurrent_queue< T, A > Member List
+
+
+ +

This is the complete list of members for tbb::strict_ppl::concurrent_queue< T, A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedeftbb::strict_ppl::concurrent_queue< T, A >
clear()tbb::strict_ppl::concurrent_queue< T, A >
concurrent_queue(const allocator_type &a=allocator_type())tbb::strict_ppl::concurrent_queue< T, A >inlineexplicit
concurrent_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())tbb::strict_ppl::concurrent_queue< T, A >inline
concurrent_queue(const concurrent_queue &src, const allocator_type &a=allocator_type())tbb::strict_ppl::concurrent_queue< T, A >inline
concurrent_queue(concurrent_queue &&src)tbb::strict_ppl::concurrent_queue< T, A >inline
concurrent_queue(concurrent_queue &&src, const allocator_type &a) (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >inline
const_iterator typedef (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >
const_reference typedeftbb::strict_ppl::concurrent_queue< T, A >
difference_type typedeftbb::strict_ppl::concurrent_queue< T, A >
emplace(Arguments &&...args) (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >inline
empty() const tbb::strict_ppl::concurrent_queue< T, A >inline
get_allocator() const tbb::strict_ppl::concurrent_queue< T, A >inline
internal::concurrent_queue_iterator (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >friend
iterator typedef (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >
push(const T &source)tbb::strict_ppl::concurrent_queue< T, A >inline
push(T &&source) (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >inline
reference typedeftbb::strict_ppl::concurrent_queue< T, A >
size_type typedeftbb::strict_ppl::concurrent_queue< T, A >
try_pop(T &result)tbb::strict_ppl::concurrent_queue< T, A >inline
unsafe_begin() (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >inline
unsafe_begin() const (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >inline
unsafe_end() (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >inline
unsafe_end() const (defined in tbb::strict_ppl::concurrent_queue< T, A >)tbb::strict_ppl::concurrent_queue< T, A >inline
unsafe_size() const tbb::strict_ppl::concurrent_queue< T, A >inline
value_type typedeftbb::strict_ppl::concurrent_queue< T, A >
~concurrent_queue()tbb::strict_ppl::concurrent_queue< T, A >
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/annotated.html b/doc/html/annotated.html new file mode 100644 index 0000000..85fb3fb --- /dev/null +++ b/doc/html/annotated.html @@ -0,0 +1,235 @@ + + + + + + +Class List + + + + + + + +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oNrmlThe namespace rml contains components of low-level memory pool interface
|\CMemPoolPolicy
oNtbbThe namespace tbb contains all components of the library
|oNflow
|oNinterface5
|oNinterface6
|oNinterface7
|oNinterface9
|oNinternal
|oNstrict_ppl
|oCaligned_spaceBlock of space aligned sufficiently to construct an array T with N elements
|oCatomicPrimary template for atomic
|oCatomic< void * >Specialization for atomic<void*>, for sake of not allowing arithmetic or operator->
|oCblocked_rangeA range over which to iterate
|oCblocked_range2dA 2-dimensional range that models the Range concept
|oCblocked_range3dA 3-dimensional range that models the Range concept
|oCcache_aligned_allocatorMeets "allocator" requirements of ISO C++ Standard, Section 20.1.5
|oCcache_aligned_allocator< void >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
|oCcombinableThread-local storage with optional reduction
|oCconcurrent_bounded_queueA high-performance thread-safe blocking concurrent bounded queue
|oCconcurrent_vectorConcurrent vector container
|oCmutexWrapper around the platform's native lock
|oCnull_mutexA mutex which does nothing
|oCnull_rw_mutexA rw mutex which does nothing
|oCtask_group_context
|oCpre_scan_tagUsed to indicate that the initial scan is being performed
|oCfinal_scan_tagUsed to indicate that the final scan is being performed
|oCparallel_whileParallel iteration over a stream, with optional addition of more work
|oCfilterA stage in a pipeline
|oCthread_bound_filterA stage in a pipeline served by a user thread
|oCpipelineA processing pipeline that applies filters to items
|oCqueuing_mutexQueuing mutex with local-only spinning
|oCqueuing_rw_mutexQueuing reader-writer mutex with local-only spinning
|oCrecursive_mutex
|oCscalable_allocatorMeets "allocator" requirements of ISO C++ Standard, Section 20.1.5
|oCscalable_allocator< void >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
|oCspin_mutexA lock that occupies a single byte
|oCspin_rw_mutex_v3Fast, unfair, spinning reader-writer lock with backoff and writer-preference
|oCtask_handle
|oCtask_group
|oCstructured_task_group
|oCtask_scheduler_initClass delimiting the scope of task scheduler activity
|oCtbb_allocatorMeets "allocator" requirements of ISO C++ Standard, Section 20.1.5
|oCtbb_allocator< void >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
|oCzero_allocatorMeets "allocator" requirements of ISO C++ Standard, Section 20.1.5
|oCzero_allocator< void, Allocator >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
|oCbad_last_allocException for concurrent containers
|oCimproper_lockException for PPL locks
|oCuser_abortException for user-initiated abort
|oCmissing_waitException for missing wait on structured_task_group
|oCinvalid_multiple_schedulingException for repeated scheduling of the same task_handle
|oCtbb_exceptionInterface to be implemented by all exceptions TBB recognizes and propagates across the threads
|oCcaptured_exceptionThis class is used by TBB to propagate information about unhandled exceptions into the root thread
|oCmovable_exceptionTemplate that can be used to implement exception that transfers arbitrary ExceptionData to the root thread
|\Ctick_countAbsolute timestamp
\C__TBB_malloc_proxy_caller
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/bc_s.png b/doc/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/doc/html/bdwn.png b/doc/html/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + +Class Index + + + + + + + +
+
+
Class Index
+
+
+
A | B | C | D | E | F | G | I | K | L | M | N | O | P | Q | R | S | T | U | Z | _
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  A  
+
concurrent_unordered_map_traits (tbb::interface5)   improper_lock (tbb)   pipeline (tbb)   sender (tbb::flow::interface10)   
concurrent_unordered_multimap (tbb::interface5)   tick_count::interval_t (tbb)   pre_scan_tag (tbb)   spin_mutex (tbb)   
concurrent_hash_map::accessor (tbb::interface5)   concurrent_unordered_multiset (tbb::interface5)   invalid_multiple_scheduling (tbb)   predecessor_cache (tbb::flow::interface10::internal)   spin_rw_mutex_v3 (tbb)   
concurrent_hash_map::accessor_not_used (tbb::interface5)   concurrent_unordered_set (tbb::interface5)   
  K  
+
  Q  
+
structured_task_group (tbb)   
aggregator (tbb::interface6)   concurrent_unordered_set_traits (tbb::interface5)   successor_cache (tbb::flow::interface10::internal)   
aggregator_ext (tbb::interface6)   concurrent_vector (tbb)   opencl_factory::kernel (tbb::flow::interface10)   queuing_mutex (tbb)   
  T  
+
aggregator_operation (tbb::interface6)   concurrent_hash_map::const_accessor (tbb::interface5)   
  L  
+
queuing_rw_mutex (tbb)   
aligned_space (tbb)   continue_msg (tbb::flow::interface10)   
  R  
+
task_arena (tbb::interface7)   
async_helpers (tbb::flow::interface10::internal)   continue_receiver (tbb::flow::interface10)   limiter_node (tbb::flow::interface10)   task_group (tbb)   
async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type > (tbb::flow::interface10::internal)   critical_section_v4 (tbb::internal)   
  M  
+
reader_writer_lock (tbb::interface5)   task_group_base (tbb::internal)   
async_msg (tbb::flow::interface10)   
  D  
+
scalable_allocator< void >::rebind (tbb)   task_group_context (tbb)   
async_storage (tbb::flow::interface10::internal)   memory_pool (tbb::interface6)   tbb_allocator< void >::rebind (tbb)   task_handle (tbb)   
atomic (tbb)   default_device_filter (tbb::flow::interface10::opencl_info)   memory_pool_allocator (tbb::interface6)   zero_allocator< void, Allocator >::rebind (tbb)   task_handle_task (tbb::internal)   
atomic< void * > (tbb)   default_device_selector (tbb::flow::interface10::opencl_info)   memory_pool_allocator< void, P > (tbb::interface6)   zero_allocator::rebind (tbb)   task_scheduler_init (tbb)   
task_arena::attach (tbb::interface7)   default_opencl_factory (tbb::flow::interface10::opencl_info)   MemPoolPolicy (rml)   memory_pool_allocator::rebind (tbb::interface6)   task_scheduler_observer (tbb::interface6)   
  B  
+
gfx_factory::device_type (tbb::flow::interface9)   missing_wait (tbb)   memory_pool_allocator< void, P >::rebind (tbb::interface6)   task_scheduler_observer_v3 (tbb::internal)   
gfx_factory::dummy_device_selector (tbb::flow::interface9)   movable_exception (tbb)   tbb_allocator::rebind (tbb)   tbb_allocator (tbb)   
bad_last_alloc (tbb)   
  E  
+
mutex (tbb)   cache_aligned_allocator::rebind (tbb)   tbb_allocator< void > (tbb)   
basic_handler (tbb::interface6::internal)   
  N  
+
scalable_allocator::rebind (tbb)   tbb_exception (tbb)   
basic_operation (tbb::interface6::internal)   edge_container (tbb::flow::interface10::internal)   cache_aligned_allocator< void >::rebind (tbb)   tbb_exception_ptr (tbb::internal)   
basic_operation_base (tbb::interface6::internal)   concurrent_vector::push_back_helper::element_construction_guard (tbb)   concurrent_hash_map::node (tbb::interface5)   receiver (tbb::flow::interface10)   tbb_thread_v3 (tbb::internal)   
blocked_range (tbb)   enumerable_thread_specific (tbb::interface6)   null_mutex (tbb)   receiver_gateway (tbb::flow::interface10)   thread_bound_filter (tbb)   
blocked_range2d (tbb)   
  F  
+
null_rw_mutex (tbb)   recursive_mutex (tbb)   thread_closure_0 (tbb::internal)   
blocked_range3d (tbb)   null_type (tbb::flow::interface10)   reservable_predecessor_cache (tbb::flow::interface10::internal)   thread_closure_1 (tbb::internal)   
broadcast_cache (tbb::flow::interface10::internal)   filter (tbb)   
  O  
+
round_robin_cache (tbb::flow::interface10::internal)   thread_closure_2 (tbb::internal)   
concurrent_hash_map::bucket_accessor (tbb::interface5)   filter_t (tbb::interface6)   run_and_put_task (tbb::flow::interface10)   thread_closure_base (tbb::internal)   
  C  
+
final_scan_tag (tbb)   opencl_async_msg (tbb::flow::interface10)   runtime_loader (tbb::interface6)   tick_count (tbb)   
fixed_pool (tbb::interface6)   opencl_buffer (tbb::flow::interface10)   
  S  
+
  U  
+
cache_aligned_allocator (tbb)   flattened2d (tbb::interface6)   opencl_buffer_impl (tbb::flow::interface10)   
cache_aligned_allocator< void > (tbb)   flow_control (tbb::interface6)   opencl_device (tbb::flow::interface10)   scalable_allocator (tbb)   untyped_receiver (tbb::flow::interface10::internal)   
concurrent_hash_map::call_clear_on_leave (tbb::interface5)   
  G  
+
opencl_device_list (tbb::flow::interface10)   scalable_allocator< void > (tbb)   untyped_sender (tbb::flow::interface10::internal)   
callback (tbb::flow::interface10)   opencl_factory (tbb::flow::interface10)   queuing_rw_mutex::scoped_lock (tbb)   use_element_copy_constructor (tbb::interface5::internal)   
callback_base (tbb::flow::interface10)   gfx_async_msg (tbb::flow::interface9)   opencl_memory (tbb::flow::interface10)   critical_section_v4::scoped_lock (tbb::internal)   use_element_copy_constructor< T, false > (tbb::interface5::internal)   
captured_exception (tbb)   gfx_buffer (tbb::flow::interface9)   opencl_node (tbb::flow::interface10)   null_mutex::scoped_lock (tbb)   user_abort (tbb)   
combinable (tbb)   gfx_factory (tbb::flow::interface9)   opencl_node< tuple< Ports...> > (tbb::flow::interface10)   recursive_mutex::scoped_lock (tbb)   
  Z  
+
concrete_filter (tbb::interface6::internal)   global_control (tbb::interface9)   opencl_node< tuple< Ports...>, JP > (tbb::flow::interface10)   reader_writer_lock::scoped_lock (tbb::interface5)   
concurrent_bounded_queue (tbb)   graph (tbb::flow::interface10)   opencl_node< tuple< Ports...>, JP, Factory > (tbb::flow::interface10)   spin_rw_mutex_v3::scoped_lock (tbb)   zero_allocator (tbb)   
concurrent_hash_map (tbb::interface5)   graph_iterator (tbb::flow::interface10)   opencl_program (tbb::flow::interface10)   spin_mutex::scoped_lock (tbb)   zero_allocator< void, Allocator > (tbb)   
concurrent_lru_cache (tbb::interface6)   graph_proxy (tbb::flow::interface10)   opencl_range (tbb::flow::interface10)   mutex::scoped_lock (tbb)   
  _  
+
concurrent_priority_queue (tbb::interface5)   
  I  
+
opencl_subbuffer (tbb::flow::interface10)   queuing_mutex::scoped_lock (tbb)   
concurrent_queue (tbb::strict_ppl)   
  P  
+
null_rw_mutex::scoped_lock (tbb)   __TBB_malloc_proxy_caller   
concurrent_unordered_map (tbb::interface5)   tbb_thread_v3::id (tbb::internal)   reader_writer_lock::scoped_lock_read (tbb::interface5)   
parallel_while (tbb)   
+
A | B | C | D | E | F | G | I | K | L | M | N | O | P | Q | R | S | T | U | Z | _
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/closed.png b/doc/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html b/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html new file mode 100644 index 0000000..d1510c1 --- /dev/null +++ b/doc/html/dir_525f2cc589630bacbdc3bb450847427e.html @@ -0,0 +1,52 @@ + + + + + + +tbb Directory Reference + + + + + + +
+ + + + +
+
+
+
tbb Directory Reference
+
+
+ + + + +

+Directories

directory  1.0
 
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/dir_63fb2cc293d133785b96e521fa051167.html b/doc/html/dir_63fb2cc293d133785b96e521fa051167.html new file mode 100644 index 0000000..27fa590 --- /dev/null +++ b/doc/html/dir_63fb2cc293d133785b96e521fa051167.html @@ -0,0 +1,52 @@ + + + + + + +include Directory Reference + + + + + + + +
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  tbb
 
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html b/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html new file mode 100644 index 0000000..75f54ca --- /dev/null +++ b/doc/html/dir_87119f26c7695cbc270003e99bc7f49f.html @@ -0,0 +1,171 @@ + + + + + + +tbb Directory Reference + + + + + + + +
+
+
tbb Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  aggregator.h
 
file  aligned_space.h
 
file  atomic.h
 
file  blocked_range.h
 
file  blocked_range2d.h
 
file  blocked_range3d.h
 
file  cache_aligned_allocator.h
 
file  combinable.h
 
file  concurrent_hash_map.h
 
file  concurrent_lru_cache.h
 
file  concurrent_priority_queue.h
 
file  concurrent_queue.h
 
file  concurrent_unordered_map.h
 
file  concurrent_unordered_set.h
 
file  concurrent_vector.h
 
file  critical_section.h
 
file  enumerable_thread_specific.h
 
file  flow_graph.h
 The graph related classes and functions.
 
file  flow_graph_abstractions.h
 
file  flow_graph_opencl_node.h
 
file  gfx_factory.h
 
file  global_control.h
 
file  memory_pool.h
 
file  mutex.h
 
file  null_mutex.h
 
file  null_rw_mutex.h
 
file  parallel_do.h
 
file  parallel_for.h
 
file  parallel_for_each.h
 
file  parallel_invoke.h
 
file  parallel_reduce.h
 
file  parallel_scan.h
 
file  parallel_sort.h
 
file  parallel_while.h
 
file  partitioner.h
 
file  pipeline.h
 
file  queuing_mutex.h
 
file  queuing_rw_mutex.h
 
file  reader_writer_lock.h
 
file  recursive_mutex.h
 
file  runtime_loader.h
 
file  scalable_allocator.h
 
file  spin_mutex.h
 
file  spin_rw_mutex.h
 
file  task.h
 
file  task_arena.h
 
file  task_group.h
 
file  task_scheduler_init.h
 
file  task_scheduler_observer.h
 
file  tbb.h
 
file  tbb_allocator.h
 
file  tbb_config.h
 
file  tbb_disable_exceptions.h
 
file  tbb_exception.h
 
file  tbb_machine.h
 
file  tbb_profiling.h
 
file  tbb_stddef.h
 
file  tbb_thread.h
 
file  tbbmalloc_proxy.h
 
file  tick_count.h
 
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html b/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html new file mode 100644 index 0000000..d66dd89 --- /dev/null +++ b/doc/html/dir_b9976680b2be72d2d0b8fca1c31202a2.html @@ -0,0 +1,52 @@ + + + + + + +1.0 Directory Reference + + + + + + +
+ + + + +
+
+
+
1.0 Directory Reference
+
+
+ + + + +

+Directories

directory  include
 
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css new file mode 100644 index 0000000..3ac2851 --- /dev/null +++ b/doc/html/doxygen.css @@ -0,0 +1,1186 @@ +/* The standard CSS for doxygen 1.8.4 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 0px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 zcmV;!4m|ORP)tMIv#Q0*~7*`IBSO7_x;@a8#Zk6_PeKR_s92J&)(m+);m9Iz3blw)z#Gi zP!9lj4$%+*>Hz@HCmM9L9|8c+0u=!H$O3?R0Kgx|#WP<6fKfC8fM-CQZT|_r@`>VO zX^Hgb|9cJqpdJA5$MCEK`F_2@2Y@s>^+;pF`~jdI0Pvr|vl4`=C)EH@1IFe7pdJ8F zH(qGi004~QnF)Ggga~8v08kGAs2hKTATxr7pwfNk|4#_AaT>w8P6TV+R2kbS$v==} zAjf`s0g#V8lB+b3)5oEI*q+{Yt$MZDruD2^;$+(_%Qn+%v0X-bJO=;@kiJ^ygLBnC z?1OVv_%aex1M@jKU|Z~$eI?PoF4Vj>fDzyo zAiLfpXY*a^Sj-S5D0S3@#V$sRW)g)_1e#$%8xdM>Jm7?!h zu0P2X=xoN>^!4DoPRgph2(2va07yfpXF+WH7EOg1GY%Zn z7~1A<(z7Q$ktEXhW_?GMpHp9l_UL18F3KOsxu81pqoBiNbFSGsof-W z6~eloMoz=4?OOnl2J268x5rOY`dCk0us(uS#Ud4yqOr@?=Q57a}tit|BhY>}~frH1sP`ScHS_d)oqH^lYy zZ%VP`#10MlE~P?cE(%(#(AUSv_T{+;t@$U}El}(1ig`vZo`Rm;+5&(AYzJ^Ae=h2X z@Re%vHwZU>|f0NI&%$*4eJweC5OROQrpPMA@*w|o z()A==l}(@bv^&>H1Ob3C=<^|hob?0+xJ?QQ3-ueQC}zy&JQNib!OqSO@-=>XzxlSF zAZ^U*1l6EEmg3r};_HY>&Jo_{dOPEFTWPmt=U&F#+0(O59^UIlHbNX+eF8UzyDR*T z(=5X$VF3!gm@RooS-&iiUYGG^`hMR(07zr_xP`d!^BH?uD>Phl8Rdifx3Af^Zr`Ku ztL+~HkVeL#bJ)7;`=>;{KNRvjmc}1}c58Sr#Treq=4{xo!ATy|c>iRSp4`dzMMVd@ zL8?uwXDY}Wqgh4mH`|$BTXpUIu6A1-cSq%hJw;@^Zr8TP=GMh*p(m(tN7@!^D~sl$ zz^tf4II4|};+irE$Fnm4NTc5%p{PRA`%}Zk`CE5?#h3|xcyQsS#iONZ z6H(@^i9td!$z~bZiJLTax$o>r(p}3o@< zyD7%(>ZYvy=6$U3e!F{Z`uSaYy`xQyl?b{}eg|G3&fz*`QH@mDUn)1%#5u`0m$%D} z?;tZ0u(mWeMV0QtzjgN!lT*pNRj;6510Wwx?Yi_=tYw|J#7@(Xe7ifDzXuK;JB;QO z#bg~K$cgm$@{QiL_3yr}y&~wuv=P=#O&Tj=Sr)aCUlYmZMcw?)T?c%0rUe1cS+o!qs_ zQ6Gp)-{)V!;=q}llyK3|^WeLKyjf%y;xHku;9(vM!j|~<7w1c*Mk-;P{T&yG) z@C-8E?QPynNQ<8f01D`2qexcVEIOU?y}MG)TAE6&VT5`rK8s(4PE;uQ92LTXUQ<>^ ztyQ@=@kRdh@ebUG^Z6NWWIL;_IGJ2ST>$t!$m$qvtj0Qmw8moN6GUV^!QKNK zHBXCtUH8)RY9++gH_TUV4^=-j$t}dD3qsN7GclJ^Zc&(j6&a_!$jCf}%c5ey`pm~1)@{yI3 zTdWyB+*X{JFw#z;PwRr5evb2!ueWF;v`B0HoUu4-(~aL=z;OXUUEtG`_$)Oxw6FKg zEzY`CyKaSBK3xt#8gA|r_|Kehn_HYVBMpEwbn9-fI*!u*eTA1ef8Mkl1=!jV4oYwWYM}i`A>_F4nhmlCIC6WLa zY%;4&@AlnaG11ejl61Jev21|r*m+?Kru3;1tFDl}#!OzUp6c>go4{C|^erwpG*&h6bspUPJag}oOkN2912Y3I?(eRc@U9>z#HPBHC?nps7H5!zP``90!Q1n80jo+B3TWXp!8Pe zwuKuLLI6l3Gv@+QH*Y}2wPLPQ1^EZhT#+Ed8q8Wo z1pTmIBxv14-{l&QVKxAyQF#8Q@NeJwWdKk>?cpiJLkJr+aZ!Me+Cfp!?FWSRf^j2k z73BRR{WSKaMkJ>1Nbx5dan5hg^_}O{Tj6u%iV%#QGz0Q@j{R^Ik)Z*+(YvY2ziBG)?AmJa|JV%4UT$k`hcOg5r9R?5>?o~JzK zJCrj&{i#hG>N7!B4kNX(%igb%kDj0fOQThC-8mtfap82PNRXr1D>lbgg)dYTQ(kbx z`Ee5kXG~Bh+BHQBf|kJEy6(ga%WfhvdQNDuOfQoe377l#ht&DrMGeIsI5C<&ai zWG$|hop2@@q5YDa)_-A?B02W;#fH!%k`daQLEItaJJ8Yf1L%8x;kg?)k)00P-lH+w z)5$QNV6r2$YtnV(4o=0^3{kmaXn*Dm0F*fU(@o)yVVjk|ln8ea6BMy%vZAhW9|wvA z8RoDkVoMEz1d>|5(k0Nw>22ZT){V<3$^C-cN+|~hKt2)){+l-?3m@-$c?-dlzQ)q- zZ)j%n^gerV{|+t}9m1_&&Ly!9$rtG4XX|WQ8`xYzGC~U@nYh~g(z9)bdAl#xH)xd5a=@|qql z|FzEil{P5(@gy!4ek05i$>`E^G~{;pnf6ftpLh$h#W?^#4UkPfa;;?bsIe&kz!+40 zI|6`F2n020)-r`pFaZ38F!S-lJM-o&inOw|66=GMeP@xQU5ghQH{~5Uh~TMTd;I9` z>YhVB`e^EVj*S7JF39ZgNf}A-0DwOcTT63ydN$I3b?yBQtUI*_fae~kPvzoD$zjX3 zoqBe#>12im4WzZ=f^4+u=!lA|#r%1`WB0-6*3BL#at`47#ebPpR|D1b)3BjT34nYY z%Ds%d?5$|{LgOIaRO{{oC&RK`O91$fqwM0(C_TALcozu*fWHb%%q&p-q{_8*2Zsi^ zh1ZCnr^UYa;4vQEtHk{~zi>wwMC5o{S=$P0X681y`SXwFH?Ewn{x-MOZynmc)JT5v zuHLwh;tLfxRrr%|k370}GofLl7thg>ACWWY&msqaVu&ry+`7+Ss>NL^%T1|z{IGMA zW-SKl=V-^{(f!Kf^#3(|T2W47d(%JVCI4JgRrT1pNz>+ietmFToNv^`gzC@&O-)+i zPQ~RwK8%C_vf%;%e>NyTp~dM5;!C|N0Q^6|CEb7Bw=Vz~$1#FA;Z*?mKSC)Hl-20s t8QyHj(g6VK0RYbl8UjE)0O0w=e*@m04r>stuEhWV002ovPDHLkV1hl;dM*F} literal 0 HcmV?d00001 diff --git a/doc/html/dynsections.js b/doc/html/dynsections.js new file mode 100644 index 0000000..ed092c7 --- /dev/null +++ b/doc/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +File List + + + + + + + +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + + + +
o*flow_graph.hThe graph related classes and functions
o*memory_pool.h
\*scalable_allocator.h
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/ftv2blank.png b/doc/html/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/html/ftv2cl.png b/doc/html/ftv2cl.png new file mode 100644 index 0000000000000000000000000000000000000000..132f6577bf7f085344904602815a260d29f55d9b GIT binary patch literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ literal 0 HcmV?d00001 diff --git a/doc/html/ftv2doc.png b/doc/html/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doc/html/ftv2folderclosed.png b/doc/html/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/doc/html/ftv2lastnode.png b/doc/html/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/html/ftv2link.png b/doc/html/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doc/html/ftv2mlastnode.png b/doc/html/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/doc/html/ftv2mnode.png b/doc/html/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/doc/html/ftv2mo.png b/doc/html/ftv2mo.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfb80f76e65815989a9350ad79d8ce45380e2b1 GIT binary patch literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& literal 0 HcmV?d00001 diff --git a/doc/html/ftv2node.png b/doc/html/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/html/ftv2ns.png b/doc/html/ftv2ns.png new file mode 100644 index 0000000000000000000000000000000000000000..72e3d71c2892d6f00e259facebc88b45f6db2e35 GIT binary patch literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/doc/html/ftv2pnode.png b/doc/html/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/doc/html/ftv2splitbar.png b/doc/html/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/doc/html/ftv2vertline.png b/doc/html/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/doc/html/functions.html b/doc/html/functions.html new file mode 100644 index 0000000..a24f9de --- /dev/null +++ b/doc/html/functions.html @@ -0,0 +1,129 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x62.html b/doc/html/functions_0x62.html new file mode 100644 index 0000000..af95e6a --- /dev/null +++ b/doc/html/functions_0x62.html @@ -0,0 +1,113 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x63.html b/doc/html/functions_0x63.html new file mode 100644 index 0000000..2f8052b --- /dev/null +++ b/doc/html/functions_0x63.html @@ -0,0 +1,170 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x64.html b/doc/html/functions_0x64.html new file mode 100644 index 0000000..a4d5f86 --- /dev/null +++ b/doc/html/functions_0x64.html @@ -0,0 +1,123 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x65.html b/doc/html/functions_0x65.html new file mode 100644 index 0000000..fe10ee2 --- /dev/null +++ b/doc/html/functions_0x65.html @@ -0,0 +1,171 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x66.html b/doc/html/functions_0x66.html new file mode 100644 index 0000000..9df68fb --- /dev/null +++ b/doc/html/functions_0x66.html @@ -0,0 +1,111 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x67.html b/doc/html/functions_0x67.html new file mode 100644 index 0000000..7f11a12 --- /dev/null +++ b/doc/html/functions_0x67.html @@ -0,0 +1,109 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x68.html b/doc/html/functions_0x68.html new file mode 100644 index 0000000..8d9fc75 --- /dev/null +++ b/doc/html/functions_0x68.html @@ -0,0 +1,90 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x69.html b/doc/html/functions_0x69.html new file mode 100644 index 0000000..003283f --- /dev/null +++ b/doc/html/functions_0x69.html @@ -0,0 +1,139 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x6a.html b/doc/html/functions_0x6a.html new file mode 100644 index 0000000..cdf483e --- /dev/null +++ b/doc/html/functions_0x6a.html @@ -0,0 +1,90 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x6c.html b/doc/html/functions_0x6c.html new file mode 100644 index 0000000..f9aac56 --- /dev/null +++ b/doc/html/functions_0x6c.html @@ -0,0 +1,110 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x6d.html b/doc/html/functions_0x6d.html new file mode 100644 index 0000000..b60ab96 --- /dev/null +++ b/doc/html/functions_0x6d.html @@ -0,0 +1,122 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x6e.html b/doc/html/functions_0x6e.html new file mode 100644 index 0000000..9823fe2 --- /dev/null +++ b/doc/html/functions_0x6e.html @@ -0,0 +1,99 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x6f.html b/doc/html/functions_0x6f.html new file mode 100644 index 0000000..84f1c47 --- /dev/null +++ b/doc/html/functions_0x6f.html @@ -0,0 +1,152 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x70.html b/doc/html/functions_0x70.html new file mode 100644 index 0000000..6012f37 --- /dev/null +++ b/doc/html/functions_0x70.html @@ -0,0 +1,123 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x71.html b/doc/html/functions_0x71.html new file mode 100644 index 0000000..ea839e1 --- /dev/null +++ b/doc/html/functions_0x71.html @@ -0,0 +1,93 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x72.html b/doc/html/functions_0x72.html new file mode 100644 index 0000000..e28bc72 --- /dev/null +++ b/doc/html/functions_0x72.html @@ -0,0 +1,183 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x73.html b/doc/html/functions_0x73.html new file mode 100644 index 0000000..5513da4 --- /dev/null +++ b/doc/html/functions_0x73.html @@ -0,0 +1,159 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x74.html b/doc/html/functions_0x74.html new file mode 100644 index 0000000..8dec7c2 --- /dev/null +++ b/doc/html/functions_0x74.html @@ -0,0 +1,171 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x75.html b/doc/html/functions_0x75.html new file mode 100644 index 0000000..46b0d20 --- /dev/null +++ b/doc/html/functions_0x75.html @@ -0,0 +1,101 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x76.html b/doc/html/functions_0x76.html new file mode 100644 index 0000000..2912ddf --- /dev/null +++ b/doc/html/functions_0x76.html @@ -0,0 +1,95 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x77.html b/doc/html/functions_0x77.html new file mode 100644 index 0000000..a4015d3 --- /dev/null +++ b/doc/html/functions_0x77.html @@ -0,0 +1,95 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_0x7e.html b/doc/html/functions_0x7e.html new file mode 100644 index 0000000..2fa87c3 --- /dev/null +++ b/doc/html/functions_0x7e.html @@ -0,0 +1,165 @@ + + + + + + +Class Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_enum.html b/doc/html/functions_enum.html new file mode 100644 index 0000000..f22e1c5 --- /dev/null +++ b/doc/html/functions_enum.html @@ -0,0 +1,70 @@ + + + + + + +Class Members - Enumerations + + + + + + + + +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_eval.html b/doc/html/functions_eval.html new file mode 100644 index 0000000..8857779 --- /dev/null +++ b/doc/html/functions_eval.html @@ -0,0 +1,85 @@ + + + + + + +Class Members - Enumerator + + + + + + + + +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html new file mode 100644 index 0000000..f2a7045 --- /dev/null +++ b/doc/html/functions_func.html @@ -0,0 +1,122 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x62.html b/doc/html/functions_func_0x62.html new file mode 100644 index 0000000..a2622c6 --- /dev/null +++ b/doc/html/functions_func_0x62.html @@ -0,0 +1,108 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x63.html b/doc/html/functions_func_0x63.html new file mode 100644 index 0000000..396db23 --- /dev/null +++ b/doc/html/functions_func_0x63.html @@ -0,0 +1,161 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- c -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x64.html b/doc/html/functions_func_0x64.html new file mode 100644 index 0000000..da201cc --- /dev/null +++ b/doc/html/functions_func_0x64.html @@ -0,0 +1,114 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x65.html b/doc/html/functions_func_0x65.html new file mode 100644 index 0000000..5a0545b --- /dev/null +++ b/doc/html/functions_func_0x65.html @@ -0,0 +1,135 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- e -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x66.html b/doc/html/functions_func_0x66.html new file mode 100644 index 0000000..b6e6622 --- /dev/null +++ b/doc/html/functions_func_0x66.html @@ -0,0 +1,98 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x67.html b/doc/html/functions_func_0x67.html new file mode 100644 index 0000000..047be6c --- /dev/null +++ b/doc/html/functions_func_0x67.html @@ -0,0 +1,108 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x68.html b/doc/html/functions_func_0x68.html new file mode 100644 index 0000000..4bf029d --- /dev/null +++ b/doc/html/functions_func_0x68.html @@ -0,0 +1,89 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- h -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x69.html b/doc/html/functions_func_0x69.html new file mode 100644 index 0000000..b18c1fe --- /dev/null +++ b/doc/html/functions_func_0x69.html @@ -0,0 +1,127 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x6a.html b/doc/html/functions_func_0x6a.html new file mode 100644 index 0000000..837b3a8 --- /dev/null +++ b/doc/html/functions_func_0x6a.html @@ -0,0 +1,89 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- j -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x6c.html b/doc/html/functions_func_0x6c.html new file mode 100644 index 0000000..8c2de4a --- /dev/null +++ b/doc/html/functions_func_0x6c.html @@ -0,0 +1,106 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x6d.html b/doc/html/functions_func_0x6d.html new file mode 100644 index 0000000..1e6394b --- /dev/null +++ b/doc/html/functions_func_0x6d.html @@ -0,0 +1,111 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x6e.html b/doc/html/functions_func_0x6e.html new file mode 100644 index 0000000..585e05d --- /dev/null +++ b/doc/html/functions_func_0x6e.html @@ -0,0 +1,94 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x6f.html b/doc/html/functions_func_0x6f.html new file mode 100644 index 0000000..5920d6c --- /dev/null +++ b/doc/html/functions_func_0x6f.html @@ -0,0 +1,141 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- o -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x70.html b/doc/html/functions_func_0x70.html new file mode 100644 index 0000000..e27465a --- /dev/null +++ b/doc/html/functions_func_0x70.html @@ -0,0 +1,113 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x71.html b/doc/html/functions_func_0x71.html new file mode 100644 index 0000000..3490042 --- /dev/null +++ b/doc/html/functions_func_0x71.html @@ -0,0 +1,92 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- q -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x72.html b/doc/html/functions_func_0x72.html new file mode 100644 index 0000000..2b5d54b --- /dev/null +++ b/doc/html/functions_func_0x72.html @@ -0,0 +1,170 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- r -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x73.html b/doc/html/functions_func_0x73.html new file mode 100644 index 0000000..ad439de --- /dev/null +++ b/doc/html/functions_func_0x73.html @@ -0,0 +1,141 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x74.html b/doc/html/functions_func_0x74.html new file mode 100644 index 0000000..125faff --- /dev/null +++ b/doc/html/functions_func_0x74.html @@ -0,0 +1,170 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- t -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x75.html b/doc/html/functions_func_0x75.html new file mode 100644 index 0000000..79fc86b --- /dev/null +++ b/doc/html/functions_func_0x75.html @@ -0,0 +1,100 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x77.html b/doc/html/functions_func_0x77.html new file mode 100644 index 0000000..b440f09 --- /dev/null +++ b/doc/html/functions_func_0x77.html @@ -0,0 +1,94 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+ +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_func_0x7e.html b/doc/html/functions_func_0x7e.html new file mode 100644 index 0000000..0de68ba --- /dev/null +++ b/doc/html/functions_func_0x7e.html @@ -0,0 +1,164 @@ + + + + + + +Class Members - Functions + + + + + + +
+ + + + + + +
+
+  + +

- ~ -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html new file mode 100644 index 0000000..aef54d3 --- /dev/null +++ b/doc/html/functions_rela.html @@ -0,0 +1,74 @@ + + + + + + +Class Members - Related Functions + + + + + + + + +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html new file mode 100644 index 0000000..33d47f1 --- /dev/null +++ b/doc/html/functions_type.html @@ -0,0 +1,186 @@ + + + + + + +Class Members - Typedefs + + + + + + +
+ + + + + + +
+
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- i -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- v -

+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html new file mode 100644 index 0000000..895cddd --- /dev/null +++ b/doc/html/functions_vars.html @@ -0,0 +1,96 @@ + + + + + + +Class Members - Variables + + + + + + + +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/globals.html b/doc/html/globals.html new file mode 100644 index 0000000..bbe5086 --- /dev/null +++ b/doc/html/globals.html @@ -0,0 +1,85 @@ + + + + + + +File Members + + + + + + +
+ + + + + +
+
+
Here is a list of all documented file members with links to the documentation:
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html new file mode 100644 index 0000000..98f7b0a --- /dev/null +++ b/doc/html/globals_func.html @@ -0,0 +1,85 @@ + + + + + + +File Members + + + + + + +
+ + + + + +
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html new file mode 100644 index 0000000..1250476 --- /dev/null +++ b/doc/html/hierarchy.html @@ -0,0 +1,271 @@ + + + + + + +Class Hierarchy + + + + + + + +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oC__TBB_malloc_proxy_caller
oCtbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::accessor_not_used
oCtbb::interface6::aggregator_operation
oCtbb::aligned_space< T, N >Block of space aligned sufficiently to construct an array T with N elements
oCAllocator
oCallocator_base
oCtbb::flow::interface10::internal::async_helpers< T, typename >
oCtbb::flow::interface10::internal::async_helpers< T, typename std::enable_if< std::is_base_of< async_msg< typename T::async_msg_data_type >, T >::value >::type >
oCtbb::flow::interface10::async_msg< T >
oCasync_msg
oCtbb::flow::interface10::internal::async_storage< T >
oCatomic_impl
oCtbb::interface7::task_arena::attachTag class used to indicate the "attaching" constructor
oCbad_alloc
oCtbb::interface6::internal::basic_handler
oCtbb::blocked_range< Value >A range over which to iterate
oCtbb::blocked_range2d< RowValue, ColValue >A 2-dimensional range that models the Range concept
oCtbb::blocked_range3d< PageValue, RowValue, ColValue >A 3-dimensional range that models the Range concept
oCtbb::blocked_range< ColValue >
oCtbb::blocked_range< I >
oCtbb::blocked_range< PageValue >
oCtbb::blocked_range< RowValue >
oCtbb::flow::interface10::internal::broadcast_cache< T, M >
oCtbb::cache_aligned_allocator< T >Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
oCtbb::cache_aligned_allocator< void >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
oCtbb::interface5::concurrent_hash_map< Key, T, HashCompare, A >::call_clear_on_leave
oCtbb::combinable< T >Thread-local storage with optional reduction
oCtbb::interface6::internal::concrete_filter< T, U, Body >
oCtbb::interface5::concurrent_priority_queue< T, Compare, A >Concurrent priority queue
oCconcurrent_queue_base_v3
oCconcurrent_queue_base_v8
oCconcurrent_unordered_base
oCtbb::interface5::concurrent_unordered_map_traits< Key, T, Hash_compare, Allocator, Allow_multimapping >
oCtbb::interface5::concurrent_unordered_set_traits< Key, Hash_compare, Allocator, Allow_multimapping >
oCconcurrent_vector_base
oCtbb::flow::interface10::continue_msgAn empty class used for messages that mean "I'm done"
oCtbb::flow::interface10::opencl_info::default_device_filter
oCtbb::flow::interface10::opencl_info::default_device_selector< Factory >
oCtbb::flow::interface9::gfx_factory::device_type
oCtbb::flow::interface9::gfx_factory::dummy_device_selector
oCtbb::flow::interface10::internal::edge_container< C >
oCtbb::flow::interface10::internal::edge_container< predecessor_type >
oCets_base
oCexception
oCtbb::interface6::filter_t< T, U >Class representing a chain of type-safe pipeline filters
oCtbb::final_scan_tagUsed to indicate that the final scan is being performed
oCtbb::interface6::flattened2d< Container >
oCtbb::interface6::flow_controlInput_filter control to signal end-of-input for parallel_pipeline
oCtbb::flow::interface9::gfx_buffer< T >
oCtbb::flow::interface9::gfx_factory
oCtbb::interface9::global_control
oCtbb::flow::interface10::graph_iterator< GraphContainerType, GraphNodeType >
oCtbb::flow::interface10::graph_proxyPure virtual template classes that define interfaces for async communication
oChash_map_base
oCtbb::internal::tbb_thread_v3::id
oCtbb::tick_count::interval_tRelative time interval
oCtbb::flow::interface10::limiter_node< T >
oCtbb::interface6::memory_pool_allocator< T, P >Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
oCtbb::interface6::memory_pool_allocator< void, P >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
oCrml::MemPoolPolicy
oCmutex_copy_deprecated_and_disabled
oCno_assign
oCno_assign
oCno_copy
oCnode_base
oCtbb::flow::interface10::null_type
oCtbb::flow::interface10::opencl_buffer< T, Factory >
oCtbb::flow::interface10::opencl_device
oCtbb::flow::interface10::opencl_device_list
oCtbb::flow::interface10::opencl_factory< DeviceFilter >
oCtbb::flow::interface10::opencl_factory< default_device_filter >
oCtbb::flow::interface10::opencl_memory< Factory >
oCtbb::flow::interface10::opencl_node< Args >
oCtbb::flow::interface10::opencl_node< tuple< Ports...>, JP, opencl_info::default_opencl_factory >
oCtbb::flow::interface10::opencl_node< tuple< Ports...>, queueing, opencl_info::default_opencl_factory >
oCtbb::flow::interface10::opencl_range
oCtbb::pipelineA processing pipeline that applies filters to items
oCpool_base
oCtbb::pre_scan_tagUsed to indicate that the initial scan is being performed
oCtbb::flow::interface10::internal::predecessor_cache< T, M >
oCtbb::cache_aligned_allocator< void >::rebind< U >
oCtbb::scalable_allocator< T >::rebind< U >
oCtbb::cache_aligned_allocator< T >::rebind< U >
oCtbb::tbb_allocator< T >::rebind< U >
oCtbb::interface6::memory_pool_allocator< void, P >::rebind< U >
oCtbb::interface6::memory_pool_allocator< T, P >::rebind< U >
oCtbb::zero_allocator< T, Allocator >::rebind< U >
oCtbb::zero_allocator< void, Allocator >::rebind< U >
oCtbb::tbb_allocator< void >::rebind< U >
oCtbb::scalable_allocator< void >::rebind< U >
oCtbb::flow::interface10::internal::reservable_predecessor_cache< T, M >
oCtbb::flow::interface10::internal::round_robin_cache< T, M >
oCtbb::flow::interface10::run_and_put_task< R, B >
oCtbb::scalable_allocator< T >Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
oCtbb::scalable_allocator< void >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
oCscoped_t
oCscoped_t
oCstreaming_node
oCtbb::flow::interface10::internal::successor_cache< T, M >
oCtask
oCtask_arena_base
oCtbb::task_group_context
oCtbb::internal::task_scheduler_observer_v3
oCtbb::tbb_allocator< T >Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
oCtbb::tbb_allocator< void >Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
oCtbb::internal::tbb_exception_ptrException container that preserves the exact copy of the original exception
oCtbb::internal::tbb_thread_v3Versioned thread class
oCtbb::internal::thread_closure_base
oCtbb::tick_countAbsolute timestamp
oCtbb::flow::interface10::internal::untyped_receiver
oCtbb::flow::interface10::internal::untyped_sender
oCtbb::interface5::internal::use_element_copy_constructor< T, C >
\Ctbb::interface5::internal::use_element_copy_constructor< T, false >
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 0000000..8bd9b09 --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,53 @@ + + + + + + +Main Page + + + + + + + +
+
+
Main Page
+
+
+

Click the tabs above for information about the

+
    +
  • Modules (groups of functionality) implemented by the library
  • +
  • Classes provided by the library
  • +
  • Files constituting the library.
  • +
+

Please note that significant part of TBB functionality is implemented in the form of template functions, descriptions of which are not accessible on the Classes tab. Use Modules or Namespace/Namespace Members tabs to find them.

+

Additional pieces of information can be found here

+ +
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/jquery.js b/doc/html/jquery.js new file mode 100644 index 0000000..c197801 --- /dev/null +++ b/doc/html/jquery.js @@ -0,0 +1,31 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); diff --git a/doc/html/modules.html b/doc/html/modules.html new file mode 100644 index 0000000..7e4b6e1 --- /dev/null +++ b/doc/html/modules.html @@ -0,0 +1,52 @@ + + + + + + +Modules + + + + + + + +
+
+
Modules
+
+
+
Here is a list of all modules:
+
+ + + + + + +
oAlgorithms
oContainers
oMemory Allocation
oSynchronization
oTiming
\Task Scheduling
+ + +
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html new file mode 100644 index 0000000..e6083eb --- /dev/null +++ b/doc/html/namespacemembers.html @@ -0,0 +1,153 @@ + + + + + + +Namespace Members + + + + + + +
+ + + + + + +
+
+
Here is a list of all documented namespace members with links to the namespaces they belong to:
+ +

- _ -

    +
  • __TBB_DECL_ATOMIC_ALT() +: tbb +
  • +
+ + +

- a -

    +
  • acquire +: tbb +
  • +
+ + +

- e -

    +
  • ets_key_usage_type +: tbb +
  • +
+ + +

- f -

    +
  • full_fence +: tbb +
  • +
+ + +

- m -

    +
  • memory_semantics +: tbb +
  • +
+ + +

- p -

    +
  • parallel_deterministic_reduce() +: tbb +
  • +
  • parallel_for() +: tbb +
  • +
  • parallel_for_each() +: tbb +
  • +
  • parallel_invoke() +: tbb +
  • +
  • parallel_reduce() +: tbb +
  • +
  • parallel_scan() +: tbb +
  • +
  • parallel_sort() +: tbb +
  • +
+ + +

- r -

    +
  • relaxed +: tbb +
  • +
  • release +: tbb +
  • +
+ + +

- s -

    +
  • speculative_spin_mutex +: tbb +
  • +
+ + +

- t -

    +
  • TBB_runtime_interface_version() +: tbb +
  • +
  • tbb_thread +: tbb +
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html new file mode 100644 index 0000000..4823d66 --- /dev/null +++ b/doc/html/namespacemembers_enum.html @@ -0,0 +1,61 @@ + + + + + + +Namespace Members + + + + + + + +
    +
  • ets_key_usage_type +: tbb +
  • +
  • memory_semantics +: tbb +
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html new file mode 100644 index 0000000..fa073e9 --- /dev/null +++ b/doc/html/namespacemembers_eval.html @@ -0,0 +1,67 @@ + + + + + + +Namespace Members + + + + + + + +
    +
  • acquire +: tbb +
  • +
  • full_fence +: tbb +
  • +
  • relaxed +: tbb +
  • +
  • release +: tbb +
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html new file mode 100644 index 0000000..e550164 --- /dev/null +++ b/doc/html/namespacemembers_func.html @@ -0,0 +1,99 @@ + + + + + + +Namespace Members + + + + + + + +
+  + +

- _ -

    +
  • __TBB_DECL_ATOMIC_ALT() +: tbb +
  • +
+ + +

- p -

    +
  • parallel_deterministic_reduce() +: tbb +
  • +
  • parallel_for() +: tbb +
  • +
  • parallel_for_each() +: tbb +
  • +
  • parallel_invoke() +: tbb +
  • +
  • parallel_reduce() +: tbb +
  • +
  • parallel_scan() +: tbb +
  • +
  • parallel_sort() +: tbb +
  • +
+ + +

- t -

    +
  • TBB_runtime_interface_version() +: tbb +
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html new file mode 100644 index 0000000..1f7abfb --- /dev/null +++ b/doc/html/namespacemembers_type.html @@ -0,0 +1,61 @@ + + + + + + +Namespace Members + + + + + + + +
    +
  • speculative_spin_mutex +: tbb +
  • +
  • tbb_thread +: tbb +
  • +
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html new file mode 100644 index 0000000..d86c496 --- /dev/null +++ b/doc/html/namespaces.html @@ -0,0 +1,54 @@ + + + + + + +Namespace List + + + + + + + +
+
+
Namespace List
+
+
+
Here is a list of all documented namespaces with brief descriptions:
+ + + +
oNrmlThe namespace rml contains components of low-level memory pool interface
\NtbbThe namespace tbb contains all components of the library
+
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/nav_f.png b/doc/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/doc/html/nav_g.png b/doc/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + +Related Pages + + + + + + + +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+
+
+

+Copyright © 2005-2017 Intel Corporation. All Rights Reserved. +

+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are +registered trademarks or trademarks of Intel Corporation or its +subsidiaries in the United States and other countries. +

+* Other names and brands may be claimed as the property of others. diff --git a/doc/html/sync_off.png b/doc/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/doc/html/sync_on.png b/doc/html/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/doc/html/tab_a.png b/doc/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/doc/html/tab_b.png b/doc/html/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/doc/html/tabs.css b/doc/html/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/doc/html/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/download.md b/download.md deleted file mode 100644 index 8112788..0000000 --- a/download.md +++ /dev/null @@ -1,145 +0,0 @@ -# Download links for old Intel(R) Threading Building Blocks packages - -* 4.3 Update 6: -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20150611oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb43_20150611oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20150611oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb43_20150611oss_osx.tgz); - -* 4.3 Update 5 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20150424oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb43_20150424oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20150424oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb43_20150424oss_osx.tgz); - -* 4.3 Update 4 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20150316oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb43_20150316oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20150316oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb43_20150316oss_osx.tgz); - -* 4.3 Update 3 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20150209oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb43_20150209oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20150209oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb43_20150209oss_osx.tgz); - -* 4.3 Update 2 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20141204oss_src_0.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb43_20141204oss_win_1.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20141204oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb43_20141204oss_osx_1.tgz); - -* 4.3 Update 1 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20141023oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb43_20141023oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20141023oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb43_20141023oss_osx.tgz); - -* 4.3 Initial Release -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20140724oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb43_20140724oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20140724oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb43_20140724oss_osx.tgz); - -* 4.2 Update 5 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb42_20140601oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb42_20140601oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb42_20140601oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb42_20140601oss_osx.tgz); - -* 4.2 Update 4 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb42_20140416oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb42_20140416oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb42_20140416oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb42_20140416oss_osx.tgz); - -* 4.2 Update 3 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb42_20140122oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb42_20140122oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb42_20140122oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb42_20140122oss_osx_0.tgz); - -* 4.2 Update 2 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb42_20131118oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb42_20131118oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb42_20131118oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb42_20131118oss_osx.tgz); - -* 4.2 Update 1 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb42_20131003oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb42_20131003oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb42_20131003oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb42_20131003oss_osx.tgz); - -* 4.2 Initial Release -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb42_20130725oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb42_20130725oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb42_20130725oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb42_20130725oss_osx.tgz); - -* 4.1 Update 4 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130613oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb41_20130613oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb41_20130613oss_lin_0.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb41_20130613oss_osx.tgz); - -* 4.1 Update 3 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130314oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb41_20130314oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb41_20130314oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb41_20130314oss_osx.tgz); - -* 4.1 Update 2 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb41_20130116oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb41_20130116oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb41_20130116oss_osx.tgz); - -* 4.1 Update 1 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20121003oss_src_1.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb41_20121003oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb41_20121003oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb41_20121003oss_osx.tgz); - -* 4.1 Initial Release -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20120718oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb41_20120718oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb41_20120718oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb41_20120718oss_osx.tgz); - -* 4.0 Update 5 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20120613oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb40_20120613oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb40_20120613oss_lin_0.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb40_20120613oss_mac.tgz); - -* 4.0 Update 4 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20120408oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb40_20120408oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb40_20120408oss_lin_0.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb40_20120408oss_mac.tgz); - -* 4.0 Update 3 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20120201oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb40_20120201oss_win_2.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb40_20120201oss_lin_1.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb40_20120201oss_mac_0.tgz); - -* 4.0 Update 2 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20111130oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb40_20111130oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb40_20111130oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb40_20111130oss_mac.tgz); - -* 4.0 Update 1 -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20111003oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb40_20111003oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb40_20111003oss_lin_0.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb40_20111003oss_mac.tgz); - -* 4.0 Initial Release -[Source](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb40_20110809oss_src.tgz); -[Windows* OS](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/windows/tbb40_20110809oss_win.zip); -[Linux*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb40_20110809oss_lin.tgz); -[OS X*](https://www.threadingbuildingblocks.org/sites/default/files/software_releases/mac/tbb40_20110809oss_mac.tgz); diff --git a/examples/GettingStarted/index.html b/examples/GettingStarted/index.html new file mode 100644 index 0000000..c3f882b --- /dev/null +++ b/examples/GettingStarted/index.html @@ -0,0 +1,344 @@ + + + + + + Intel® Threading Building Blocks. Getting Started Samples + + + + + +

+ This directory contains the examples referenced by the Intel® Threading Building Blocks Getting Started Guide. +

+ +
+
Directories
+ +
+
+
sub_string_finder +
Finds largest matching substrings. +
+
+
+
+ Up to parent directory +
+
+
Legal Information:
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/GettingStarted/sub_string_finder/Makefile b/examples/GettingStarted/sub_string_finder/Makefile new file mode 100644 index 0000000..6baf3b8 --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/Makefile @@ -0,0 +1,74 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=sub_string_finder_extended +ARGS= +LIGHT_PROG=sub_string_finder + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +TBBLIB = -ltbb +TBBLIB_DEBUG = -ltbb_debug + +ifneq (,$(findstring mic, $(offload))) +override CXXFLAGS += -qoffload-arch=$(offload) -qopt-report-phase:offload -D__TBB_MIC_OFFLOAD=1 +# Replace -ltbb with -tbb in the offload mode +TBBLIB = -tbb +TBBLIB_DEBUG += -qoffload-option,mic,ld,"-ltbb_debug" +endif + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: *.cpp +ifeq ($(offload),) + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB) $(LIBS) + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp $(TBBLIB) $(LIBS) +endif + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB) $(LIBS) + +debug: *.cpp +ifeq ($(offload),) + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp $(TBBLIB_DEBUG) $(LIBS) + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp $(TBBLIB_DEBUG) $(LIBS) +endif + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp $(TBBLIB_DEBUG) $(LIBS) + +clean: + $(RM) sub_string_finder sub_string_finder_extended sub_string_finder_pretty *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +light_test: + $(run_cmd) ./$(LIGHT_PROG) $(ARGS) diff --git a/examples/GettingStarted/sub_string_finder/Makefile.windows b/examples/GettingStarted/sub_string_finder/Makefile.windows new file mode 100644 index 0000000..d5e1a0e --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/Makefile.windows @@ -0,0 +1,59 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs examples. +PROG=sub_string_finder_extended +ARGS= +LIGHT_PROG=sub_string_finder + +# The C++ compiler options +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +offload1 = $(offload)+ +OFFLOADFLAGS1 = $(offload1:mic+=/Qoffload-arch=mic) +OFFLOADFLAGS2 = $(OFFLOADFLAGS1:mic-avx512+=/Qoffload-arch=mic-avx512) +offload2 = $(offload:mic-avx512=mic) +OFFLOADFLAGS = $(OFFLOADFLAGS2:+=) $(offload2:mic=/D__TBB_MIC_OFFLOAD /Qdiag-disable:3335,3440,3441) + +MYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(OFFLOADFLAGS) $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +TBB_MIC_LIB = $(offload2:mic=/Qtbb) +TBB_DEBUG_MIC_LIB = $(offload2:mic=/Qoffload-option,mic,link,"-ltbb_debug") + +all: release test +release: compiler_check + $(CXX) sub_string_finder.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) $(TBB_MIC_LIB) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe + $(CXX) sub_string_finder_extended.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) $(TBB_MIC_LIB) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe + $(CXX) sub_string_finder_pretty.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) $(TBB_MIC_LIB) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe +debug: compiler_check + $(CXX) sub_string_finder.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) $(TBB_DEBUG_MIC_LIB) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe + $(CXX) sub_string_finder_extended.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) $(TBB_DEBUG_MIC_LIB) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe + $(CXX) sub_string_finder_pretty.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) $(TBB_DEBUG_MIC_LIB) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe +clean: + @cmd.exe /C del sub_string_finder*.exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +light_test: + $(LIGHT_PROG) $(ARGS) +compiler_check: + @echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + @cmd.exe /C del compiler_test diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln new file mode 100644 index 0000000..ffe7699 --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2525}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2526}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2524}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.Build.0 = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.ActiveCfg = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.Build.0 = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.ActiveCfg = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.Build.0 = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.ActiveCfg = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.Build.0 = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.Build.0 = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.ActiveCfg = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.Build.0 = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.ActiveCfg = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.Build.0 = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.ActiveCfg = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.Build.0 = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.Build.0 = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.ActiveCfg = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.Build.0 = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.ActiveCfg = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.Build.0 = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.ActiveCfg = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj new file mode 100644 index 0000000..8926181 --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder.vcxproj @@ -0,0 +1,198 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + sub_string_finder + {3AA40693-F93D-4D4B-B32E-068F511A2525} + sub_string_finder + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + \ No newline at end of file diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj new file mode 100644 index 0000000..fad4043 --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_extended.vcxproj @@ -0,0 +1,198 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + sub_string_finder_extended + {3AA40693-F93D-4D4B-B32E-068F511A2526} + sub_string_finder_extended + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + \ No newline at end of file diff --git a/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj new file mode 100644 index 0000000..bb3e84b --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/msvs/sub_string_finder_pretty.vcxproj @@ -0,0 +1,198 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + sub_string_finder_pretty + {3AA40693-F93D-4D4B-B32E-068F511A2524} + sub_string_finder_pretty + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(ProjectName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + \ No newline at end of file diff --git a/examples/GettingStarted/sub_string_finder/readme.html b/examples/GettingStarted/sub_string_finder/readme.html new file mode 100644 index 0000000..c726ab5 --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/readme.html @@ -0,0 +1,416 @@ + + + + + + Intel® Threading Building Blocks. Sub_string_finder sample + + + + + +

+ A simple example that uses the parallel_for template in a substring matching program. + The Intel® Threading Building Blocks Getting Started Guide describes this example. +

+ For each position + in a string, the program displays the length of the largest matching substring elsewhere in the string. + The program also displays the location of a largest match for each position. Consider the string "babba" + as an example. Starting at position 0, "ba" is the largest substring with a match elsewhere in the + string (position 3). +

+ The code located in the sub_string_finder_extended.cpp file + demonstrates offload programming for Intel® Many Integrated Core (Intel® MIC) Architecture (see build instructions). +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
sub_string_finder.cpp +
The example as it appears in the Getting Started Guide. +
sub_string_finder_extended.cpp +
An example similar to the one in the Getting Started Guide, but with an added sequential + implementation, and with an offload region added that can be executed on Intel® MIC Architecture based coprocessor. + The three implementations are timed, by using tick_count, + and the speedup of the parallel version and + the speedup of the parallel version and, if applicable, the offload version is calculated and displayed. +
sub_string_finder_pretty.cpp +
An example similar to the one in the Getting Started Guide, but with more attractive printing of the results. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+
Usage
+ +
+
+
sub_string_finder +
Runs the example as it appears in the Getting Started Guide. +
sub_string_finder_pretty +
Runs the similar example with more attractive printing of the results. +
sub_string_finder_extended +
Runs the example extended with a sequential implementation and an offload region that can be executed on Intel® MIC Architecture based coprocessor. +
To run a short version of this example, e.g., for use with Intel® Threading Tools: +
Build a debug version of the sub_string_finder_pretty example + (see the build instructions). +
Run it, e.g., sub_string_finder_pretty. +
+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp new file mode 100644 index 0000000..6d3ffbe --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp @@ -0,0 +1,78 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include +#include +#include +#include //std::max +#include "tbb/parallel_for.h" +#include "tbb/blocked_range.h" + +static const std::size_t N = 23; + +class SubStringFinder { + const std::string &str; + std::vector &max_array; + std::vector &pos_array; +public: + void operator() ( const tbb::blocked_range &r ) const { + for (std::size_t i = r.begin(); i != r.end(); ++i) { + std::size_t max_size = 0, max_pos = 0; + for (std::size_t j = 0; j < str.size(); ++j) { + if (j != i) { + std::size_t limit = str.size()-(std::max)(i,j); + for (std::size_t k = 0; k < limit; ++k) { + if (str[i + k] != str[j + k]) + break; + if (k > max_size) { + max_size = k; + max_pos = j; + } + } + } + } + max_array[i] = max_size; + pos_array[i] = max_pos; + } + } + + SubStringFinder( const std::string &s, std::vector &m, std::vector &p ) : + str(s), max_array(m), pos_array(p) { } +}; + +int main() { + std::string str[N] = { std::string("a"), std::string("b") }; + for (std::size_t i = 2; i < N; ++i) + str[i] = str[i-1]+str[i-2]; + std::string &to_scan = str[N-1]; + const std::size_t num_elem = to_scan.size(); + + std::vector max(num_elem); + std::vector pos(num_elem); + + tbb::parallel_for( tbb::blocked_range( 0, num_elem ), + SubStringFinder( to_scan, max, pos ) ); + + for (std::size_t i = 0; i < num_elem; ++i) + std::cout << " " << max[i] << "(" << pos[i] << ")" << std::endl; + + return 0; +} + diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp new file mode 100644 index 0000000..788ba0c --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp @@ -0,0 +1,166 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#if __TBB_MIC_OFFLOAD +#pragma offload_attribute (push,target(mic)) +#endif // __TBB_MIC_OFFLOAD + +#include +#include +#include +#include //std::max + +#include "tbb/parallel_for.h" +#include "tbb/blocked_range.h" +#include "tbb/tick_count.h" + +#if __TBB_MIC_OFFLOAD +#pragma offload_attribute (pop) + +class __declspec(target(mic)) SubStringFinder; +#endif // __TBB_MIC_OFFLOAD + +static const std::size_t N = 22; + +void SerialSubStringFinder ( const std::string &str, std::vector &max_array, std::vector &pos_array ) { + for (std::size_t i = 0; i < str.size(); ++i) { + std::size_t max_size = 0, max_pos = 0; + for (std::size_t j = 0; j < str.size(); ++j) + if (j != i) { + std::size_t limit = str.size()-(std::max)(i,j); + for (std::size_t k = 0; k < limit; ++k) { + if (str[i + k] != str[j + k]) + break; + if (k > max_size) { + max_size = k; + max_pos = j; + } + } + } + max_array[i] = max_size; + pos_array[i] = max_pos; + } +} + +class SubStringFinder { + const char *str; + const std::size_t len; + std::size_t *max_array; + std::size_t *pos_array; +public: + void operator() ( const tbb::blocked_range& r ) const { + for (std::size_t i = r.begin(); i != r.end(); ++i) { + std::size_t max_size = 0, max_pos = 0; + for (std::size_t j = 0; j < len; ++j) { + if (j != i) { + std::size_t limit = len-(std::max)(i,j); + for (std::size_t k = 0; k < limit; ++k) { + if (str[i + k] != str[j + k]) + break; + if (k > max_size) { + max_size = k; + max_pos = j; + } + } + } + } + max_array[i] = max_size; + pos_array[i] = max_pos; + } + } + // We do not use std::vector for compatibility with offload execution + SubStringFinder( const char *s, const std::size_t s_len, std::size_t *m, std::size_t *p ) : + str(s), len(s_len), max_array(m), pos_array(p) { } +}; + +int main() { + using namespace tbb; + + std::string str[N] = { std::string("a"), std::string("b") }; + for (std::size_t i = 2; i < N; ++i) + str[i] = str[i-1]+str[i-2]; + std::string &to_scan = str[N-1]; + const std::size_t num_elem = to_scan.size(); + + std::vector max1(num_elem); + std::vector pos1(num_elem); + std::vector max2(num_elem); + std::vector pos2(num_elem); + + std::cout << " Done building string." << std::endl; + + tick_count serial_t0 = tick_count::now(); + SerialSubStringFinder( to_scan, max2, pos2 ); + tick_count serial_t1 = tick_count::now(); + std::cout << " Done with serial version." << std::endl; + + tick_count parallel_t0 = tick_count::now(); + parallel_for(blocked_range(0, num_elem, 100), + SubStringFinder( to_scan.c_str(), num_elem, &max1[0], &pos1[0] ) ); + tick_count parallel_t1 = tick_count::now(); + std::cout << " Done with parallel version." << std::endl; + + for (std::size_t i = 0; i < num_elem; ++i) { + if (max1[i] != max2[i] || pos1[i] != pos2[i]) { + std::cout << "ERROR: Serial and Parallel Results are Different!" << std::endl; + break; + } + } + std::cout << " Done validating results." << std::endl; + + std::cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << std::endl + << "Parallel version ran in " << (parallel_t1 - parallel_t0).seconds() << " seconds" << std::endl + << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << std::endl; + +#if __TBB_MIC_OFFLOAD + // Do offloadable version. Do the timing on host. + + std::vector max3(num_elem); + std::vector pos3(num_elem); + + std::size_t *max3_array = &max3[0]; // method data() for vector is not available in C++03 + std::size_t *pos3_array = &pos3[0]; + tick_count parallel_tt0 = tick_count::now(); + const char *to_scan_str = to_scan.c_str(); // Offload the string as a char array. + #pragma offload target(mic) in(num_elem) in(to_scan_str:length(num_elem)) out(max3_array,pos3_array:length(num_elem)) + { + parallel_for(blocked_range(0, num_elem, 100), + SubStringFinder ( to_scan_str, num_elem, max3_array, pos3_array ) ); + } + tick_count parallel_tt1 = tick_count::now(); + std::cout << " Done with offloadable version." << std::endl; + + // Do validation of offloadable results on host. + for (std::size_t i = 0; i < num_elem; ++i) { + if (max1[i] != max3[i] || pos1[i] != pos3[i]) { + std::cout << "ERROR: Serial and Offloadable Results are Different!" << std::endl; + break; + } + } + std::cout << " Done validating offloadable results." << std::endl; + + std::cout << "Offloadable version ran in " << (parallel_tt1 - parallel_tt0).seconds() << " seconds" << std::endl + << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_tt1 - parallel_tt0).seconds() + << " of offloadable version" << std::endl; + +#endif // __TBB_MIC_OFFLOAD + + return 0; +} diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp new file mode 100644 index 0000000..c795f0b --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp @@ -0,0 +1,98 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include +#include +#include +#include +#include //std::max + +#include "tbb/parallel_for.h" +#include "tbb/blocked_range.h" + +static const std::size_t N = 9; + +class SubStringFinder { + const std::string &str; + std::vector &max_array; + std::vector &pos_array; +public: + void operator() ( const tbb::blocked_range& r ) const { + for (std::size_t i = r.begin(); i != r.end(); ++i) { + std::size_t max_size = 0, max_pos = 0; + for (std::size_t j = 0; j < str.size(); ++j) { + if (j != i) { + std::size_t limit = str.size()-(std::max)(i,j); + for (std::size_t k = 0; k < limit; ++k) { + if (str[i + k] != str[j + k]) + break; + if (k+1 > max_size) { + max_size = k+1; + max_pos = j; + } + } + } + } + max_array[i] = max_size; + pos_array[i] = max_pos; + } + } + + SubStringFinder( const std::string &s, std::vector &m, std::vector &p ) : + str(s), max_array(m), pos_array(p) { } +}; + +int main() { + using namespace tbb; + + std::string str[N] = { std::string("a"), std::string("b") }; + for (std::size_t i = 2; i < N; ++i) + str[i] = str[i-1]+str[i-2]; + std::string &to_scan = str[N-1]; + const std::size_t num_elem = to_scan.size(); + std::cout << "String to scan: " << to_scan << std::endl; + + std::vector max( num_elem ); + std::vector pos( num_elem ); + + parallel_for( blocked_range( 0, num_elem, 100 ), + SubStringFinder( to_scan, max, pos ) ); + + for (std::size_t i = 0; i < num_elem; ++i) { + for (std::size_t j = 0; j < num_elem; ++j) { + if (j >= i && j < i + max[i]) + std::cout << "_"; + else + std::cout << " "; + } + std::cout << std::endl << to_scan << std::endl; + + for (std::size_t j = 0; j < num_elem; ++j) { + if (j >= pos[i] && j < pos[i] + max[i]) + std::cout << "*"; + else + std::cout << " "; + } + std::cout << std::endl; + } + + return 0; +} + diff --git a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9e28b39 --- /dev/null +++ b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj @@ -0,0 +1,573 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sub_string_finder.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */; }; + A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A1F594140B8F1E2D00073279 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A1F5941D0B8F1F2D00073279 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 8DD76F6C0486A84900D96B5E /* sub_string_finder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593A50B8F042A00073279 /* sub_string_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder.cpp; path = ../sub_string_finder.cpp; sourceTree = SOURCE_ROOT; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; + A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_pretty; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_pretty.cpp; path = ../sub_string_finder_pretty.cpp; sourceTree = SOURCE_ROOT; }; + A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_extended; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_extended.cpp; path = ../sub_string_finder_extended.cpp; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A1F594080B8F1D8E00073279 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A1F594190B8F1F0900073279 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* sub_string_finder */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = sub_string_finder; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */, + A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */, + A1F593A50B8F042A00073279 /* sub_string_finder.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* sub_string_finder */, + A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */, + A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* sub_string_finder */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "sub_string_finder" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = sub_string_finder; + productInstallPath = "$(HOME)/bin"; + productName = sub_string_finder; + productReference = 8DD76F6C0486A84900D96B5E /* sub_string_finder */; + productType = "com.apple.product-type.tool"; + }; + A1F594090B8F1D8E00073279 /* sub_string_finder_pretty */ = { + isa = PBXNativeTarget; + buildConfigurationList = A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_pretty" */; + buildPhases = ( + A1F594070B8F1D8E00073279 /* Sources */, + A1F594080B8F1D8E00073279 /* Frameworks */, + A1F594140B8F1E2D00073279 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = sub_string_finder_pretty; + productName = sub_string_finder_pretty; + productReference = A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */; + productType = "com.apple.product-type.tool"; + }; + A1F5941A0B8F1F0900073279 /* sub_string_finder_extended */ = { + isa = PBXNativeTarget; + buildConfigurationList = A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_extended" */; + buildPhases = ( + A1F594180B8F1F0900073279 /* Sources */, + A1F594190B8F1F0900073279 /* Frameworks */, + A1F5941D0B8F1F2D00073279 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = sub_string_finder_extended; + productName = sub_string_finder_extended; + productReference = A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* sub_string_finder */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A1F5941A0B8F1F0900073279 /* sub_string_finder_extended */, + A1F594090B8F1D8E00073279 /* sub_string_finder_pretty */, + 8DD76F620486A84900D96B5E /* sub_string_finder */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A1F594070B8F1D8E00073279 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A1F594180B8F1F0900073279 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; + A1F5940D0B8F1DB600073279 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_pretty; + ZERO_LINK = NO; + }; + name = Debug; + }; + A1F5940E0B8F1DB600073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_pretty; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F5940F0B8F1DB600073279 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_pretty; + ZERO_LINK = NO; + }; + name = Release; + }; + A1F594100B8F1DB600073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_pretty; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F594200B8F1F4E00073279 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_extended; + ZERO_LINK = NO; + }; + name = Debug; + }; + A1F594210B8F1F4E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_extended; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F594220B8F1F4E00073279 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_extended; + ZERO_LINK = NO; + }; + name = Release; + }; + A1F594230B8F1F4E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = sub_string_finder_extended; + ZERO_LINK = NO; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "sub_string_finder" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_pretty" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A1F5940D0B8F1DB600073279 /* Debug */, + A1F5940E0B8F1DB600073279 /* Debug64 */, + A1F5940F0B8F1DB600073279 /* Release */, + A1F594100B8F1DB600073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_extended" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A1F594200B8F1F4E00073279 /* Debug */, + A1F594210B8F1F4E00073279 /* Debug64 */, + A1F594220B8F1F4E00073279 /* Release */, + A1F594230B8F1F4E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/Makefile b/examples/Makefile new file mode 100644 index 0000000..c93808c --- /dev/null +++ b/examples/Makefile @@ -0,0 +1,159 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# This file should be always located and called in $(tbb_root)/examples + +# Usage: +# make [all] [clean] [release] [debug] [test] +# executes specified targets for all examples. +# make {example's dir}/{target} +# calls specified example with specified target. +# For instance: make task/tree_sum/all + +tbb_root?=.. +BUILDING_PHASE:=0 +include ../build/common.inc + +#check, if tbb_root is not absolute path (the filter keeps only /* paths) +ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),) + # also changes related variables like work_dir + override tbb_root := $(CWD)$(SLASH).. + export TBBROOT := $(tbb_root) +endif + +override CXXFLAGS += $(CXX_STD_FLAGS) + +# give stdver priotity over autodetection +ifneq (,$(stdver)) + CXX0XFLAGS=-std=$(stdver) +endif +# empty CXX0XFLAGS exported as well, to have control over C++ autodetection +export CXX0XFLAGS + +ifeq ($(tbb_os),windows) + ifeq ($(UNIXMODE),1) + EXAMPLE_MAKEFILE = Makefile + EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE)) + ifeq ($(compiler),gcc) + override CXXFLAGS += -Wl,--enable-auto-import + endif + export CPATH := $(CPATH);$(tbb_root)/include + export LIBRARY_PATH := $(LIBRARY_PATH);$(work_dir)_release;$(work_dir)_debug + export RM = cmd /C del /Q /F + else + EXAMPLE_MAKEFILE = Makefile.windows + EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE)) + EXAMPLE_MAKEFILE := $(if $(EXAMPLES),Makefile.windows,Makefile) + export INCLUDE := $(tbb_root)$(SLASH)include;$(INCLUDE) + export LIB := $(work_dir)_release;$(work_dir)_debug;$(LIB) + endif + work_dir := $(subst /,$(SLASH),$(work_dir)) + export PATH := $(work_dir)_release;$(work_dir)_debug;$(PATH) + export TBB_ARCH_PLATFORM = $(arch)\$(runtime) + export TBB_TARGET_ARCH = $(arch) +else + EXAMPLE_MAKEFILE = Makefile + EXAMPLES := $(wildcard */*/$(EXAMPLE_MAKEFILE)) + # platform-specific settings + ifeq ($(arch),ia64) + override CXXFLAGS += $(PIC_KEY) + endif + ifneq ($(filter suncc gcc clang,$(compiler)),) + ifeq ($(compiler),suncc) + override CXXFLAGS += -I$(tbb_root)$(SLASH)include -library=stlport4 -M$(tbb_root)/build/suncc.map.pause -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem,wbadinit + endif + ifeq ($(arch),intel64) + override CXXFLAGS += -m64 + endif + ifeq ($(arch),ia32) + override CXXFLAGS += -m32 + endif + ifeq ($(arch),ppc64) + override CXXFLAGS += -m64 + endif + ifeq ($(arch),ppc32) + override CXXFLAGS += -m32 + endif + ifeq ($(arch),sparc) + override CXXFLAGS += -mcpu=v9 -m64 + endif + endif + ifeq ($(compiler),xl) + # -qsuppress=1540-0198 suppresses warnings like "1540-0198 (W) The omitted keyword "private" is assumed for base class "no_copy"." + # -qsuppress=1540-1401 suppresses warnings like "1540-1401 (I) An unknown "pragma ivdep" is specified." + override CXXFLAGS += -I$(tbb_root)$(SLASH)include -qsuppress=1540-0198:1540-1401 -L$(work_dir)_release -L$(work_dir)_debug + ifeq ($(arch),intel64) + override CXXFLAGS += -q64 + endif + ifeq ($(arch),ia32) + override CXXFLAGS += -q32 + endif + ifeq ($(arch),ppc64) + override CXXFLAGS += -q64 + endif + ifeq ($(arch),ppc32) + override CXXFLAGS += -q32 + endif + endif + ifeq ($(tbb_os),macos) + export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug + override CXXFLAGS += -Wl,-rpath,$(work_dir)_release -Wl,-rpath,$(work_dir)_debug + else + export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug + ifeq ($(findstring mic,$(offload) $(target)),mic) + mic_path=$(tbb_build_dir)$(SLASH)$(mic_tbb_build_prefix) + export MIC_LIBRARY_PATH := $(mic_path)_release:$(mic_path)_debug:$(MIC_LIBRARY_PATH) + export MIC_LD_LIBRARY_PATH := $(mic_path)_release:$(mic_path)_debug:$(MIC_LD_LIBRARY_PATH) + else + # -L necessary for non-native compilers which don't search $LIBRARY_PATH + override CXXFLAGS += -L$(work_dir)_release -L$(work_dir)_debug + endif + endif + export LIBS + export LIBRARY_PATH := $(LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug + export CPATH := $(CPATH):$(tbb_root)/include +endif + +export CXXFLAGS +COMMON_TARGETS := all clean release debug test perf_build perf_run +# list of directories of examples +EXAMPLES_DIRS := $(foreach T,$(EXAMPLES),$(dir $(T))) +# targets to explicitly call example have format: {example's dir}/{example's target} +EXAMPLES_TARGETS := $(foreach T,$(COMMON_TARGETS),$(addsuffix $(T),$(EXAMPLES_DIRS))) + +.PHONY: $(COMMON_TARGETS) $(EXAMPLES_TARGETS) + +.DEFAULT: all + +# execute standard targets for all examples +$(COMMON_TARGETS):: % : $(addsuffix %,$(EXAMPLES_DIRS)) + +# proxy rule for calling appropriate example +$(EXAMPLES_TARGETS):: + @echo ------------------------ $@ ------------------------ + -$(MAKE) -C $(@D) -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX="$(CPLUS)" $(if $(run_cmd),run_cmd="$(run_cmd)",) $(if $(args),ARGS="$(args)",) $(if $(UI),UI="$(UI)") + +printenv: +ifeq ($(tbb_os),windows) + @cmd /C set PATH + @cmd /C set LIB + @cmd /C set INCLUDE +else + @env | grep PATH +endif + diff --git a/examples/common/copy_libraries.bat b/examples/common/copy_libraries.bat new file mode 100644 index 0000000..ff80e1a --- /dev/null +++ b/examples/common/copy_libraries.bat @@ -0,0 +1,77 @@ +@echo off +REM +REM Copyright (c) 2005-2017 Intel Corporation +REM +REM Licensed under the Apache License, Version 2.0 (the "License"); +REM you may not use this file except in compliance with the License. +REM You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. +REM +REM +REM +REM +REM + +:: Getting parameters +if ("%1") == ("") goto error0 +if ("%2") == ("") goto error0 +if ("%3") == ("") goto error0 +set arch=%1 +if ("%2") == ("debug") set postfix=_debug +set output_dir=%3 + +:: Optional 4th parameter to set install root +if ("%4") NEQ ("") set TBBROOT=%4 +:: Actually we can set install root by ourselves +if ("%TBBROOT%") == ("") set TBBROOT=%~d0%~p0..\..\ + +:: Getting vs folders in case vc_mt binaries are not provided +:: ordered from oldest to newest, so we end with newest available version +if ("%VS110COMNTOOLS%") NEQ ("") set vc_dir=vc11 +if ("%VS120COMNTOOLS%") NEQ ("") set vc_dir=vc12 +if ("%VS140COMNTOOLS%") NEQ ("") set vc_dir=vc14 +:: To use Microsoft* Visual Studio* 2017 IDE, make sure the variable VS150COMNTOOLS is set in your IDE instance. +:: If it is not, try running Microsoft Visual Studio 2017 from Microsoft* Developer Command Prompt* for VS 2017. +:: For details, see https://developercommunity.visualstudio.com/content/problem/730/vs154-env-var-vs150comntools-missing-from-build-sy.html +if ("%VS150COMNTOOLS%") NEQ ("") set vc_dir=vc14 + +:: Are we standalone/oss or inside compiler? +if exist "%TBBROOT%\bin\%arch%\%vc_dir%\tbb%postfix%.dll" set interim_path=bin\%arch% +if exist "%TBBROOT%\..\redist\%arch%\tbb\%vc_dir%\tbb%postfix%.dll" set interim_path=..\redist\%arch%\tbb +if ("%interim_path%") == ("") goto error1 + +:: Do we provide vc_mt binaries? +if exist "%TBBROOT%\%interim_path%\vc_mt\tbb%postfix%.dll" set vc_dir=vc_mt +if ("%vc_dir%") == ("") goto error2 + +:: We know everything we wanted and there are no errors +:: Copying binaries + +copy "%TBBROOT%\%interim_path%\%vc_dir%\tbb%postfix%.dll" "%output_dir%" +copy "%TBBROOT%\%interim_path%\%vc_dir%\tbb%postfix%.pdb" "%output_dir%" +copy "%TBBROOT%\%interim_path%\%vc_dir%\tbbmalloc%postfix%.dll" "%output_dir%" +copy "%TBBROOT%\%interim_path%\%vc_dir%\tbbmalloc%postfix%.pdb" "%output_dir%" +if exist "%TBBROOT%\%interim_path%\%vc_dir%\tbb_preview%postfix%.dll" copy "%TBBROOT%\%interim_path%\%vc_dir%\tbb_preview%postfix%.dll" "%output_dir%" +if exist "%TBBROOT%\%interim_path%\%vc_dir%\tbb_preview%postfix%.pdb" copy "%TBBROOT%\%interim_path%\%vc_dir%\tbb_preview%postfix%.pdb" "%output_dir%" + +goto end +:error0 +echo number of parameters not correct +exit /B 1 +:error1 +echo Could not determine path to TBB libraries +exit /B 1 +:error2 +echo Could not determine Visual Studio version +exit /B 1 + +:end +exit /B 0 + diff --git a/examples/common/examples-common.inc b/examples/common/examples-common.inc new file mode 100644 index 0000000..bb76a96 --- /dev/null +++ b/examples/common/examples-common.inc @@ -0,0 +1,38 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# detect if a compiler can support C++11 +# If CXX0XFLAGS already set, do not change it +ifneq (,$(findstring $(CXX), icc icpc clang++)) + # every supported icc or clang is OK + CXX0XFLAGS ?= -std=c++0x +else + ifneq (,$(findstring $(CXX), g++ gcc)) + ifneq (, $(strip $(shell $(CXX) -v 2>&1 | grep "clang-"))) + # This is clang actually, + # every supported clang is OK + CXX0XFLAGS ?= -std=c++0x + else + # support of lambda started GCC 4.5 + ifneq (, $(strip $(shell g++ -dumpversion | egrep "^(4\.[5-9]|[5-9])"))) + CXX0XFLAGS ?= -std=c++0x + endif + endif + endif +endif + diff --git a/examples/common/gui/Makefile.gmake b/examples/common/gui/Makefile.gmake new file mode 100644 index 0000000..c3591ec --- /dev/null +++ b/examples/common/gui/Makefile.gmake @@ -0,0 +1,90 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# The C++ compiler +#CXX=g++ + +# detecting MS Windows (for MinGW support) +ifeq ($(OS), Windows_NT) +RM = cmd /C del /Q /F +RD = cmd /C rmdir +UI = con +EXE = $(NAME)$(SUFFIX).exe + +else +RM = rm -f +RD = rmdir -r + +# detecting 64-bit platform +arch ?= $(shell uname -m) +# Possible values of interest: intel64 x86_64 amd64 ia64 ppc64 sparc sparc64 +x64 ?= $(findstring 64,$(subst sparc,sparc64,$(arch))) + +# see https://wiki.debian.org/Multiarch/Tuples +MULTIARCH = $(arch) +ifeq ($(arch),ia32) +MULTIARCH = i386 +endif +ifeq ($(arch),intel64) +MULTIARCH = x86_64 +endif +ifeq ($(arch),ppc32) +MULTIARCH = powerpc +endif +ifeq ($(arch),sparc) +MULTIARCH = sparc64 +endif +MULTIARCHTUPLE ?= $(MULTIARCH)-linux-gnu + +# detecting UI ("mac", "x" or "con") +ifeq ($(shell uname),Darwin) + UI ?= mac +else + UI ?= $(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libX11.so -o -f /usr/lib$(x64)/libX11.so -o -f /usr/lib/$(MULTIARCHTUPLE)/libX11.so ] && echo x") +endif + +ifeq ($(UI),x) + EXE = $(NAME)$(SUFFIX) + UI_CXXFLAGS += -I/usr/X11R6/include + LIBS += -lpthread -L/usr/X11R6/lib$(x64) -lX11 + # detect if libXext can be found + ifeq ($(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libXext.so -o -f /usr/lib$(x64)/libXext.so -o -f /usr/lib/$(MULTIARCHTUPLE)/libXext.so ] && echo 0"),0) + LIBS += -lXext + else # no libXext + UI_CXXFLAGS += -DX_NOSHMEM + endif # libXext + +else # ! X + ifeq ($(UI),mac) + CXX_UI?=g++ + LIBS += -framework OpenGL -framework Foundation -framework Cocoa + MACUISOURCES = ../../common/gui/xcode/tbbExample/OpenGLView.m ../../common/gui/xcode/tbbExample/main.m ../../common/gui/xcode/tbbExample/tbbAppDelegate.m + MACUIOBJS = OpenGLView.o main.o tbbAppDelegate.o + APPRES = $(NAME)$(SUFFIX).app/Contents/Resources + EXE = $(NAME)$(SUFFIX).app/Contents/MacOS/$(NAME)$(SUFFIX) + + else # ! macOS* + + EXE = $(NAME)$(SUFFIX) + ifeq (,$(strip $(UI))) + UI = con + $(warning Note: no graphics output capability detected, building for console output.) + endif + endif # macOS +endif # X +endif # Windows vs. other diff --git a/examples/common/gui/Makefile.win b/examples/common/gui/Makefile.win new file mode 100644 index 0000000..21070e9 --- /dev/null +++ b/examples/common/gui/Makefile.win @@ -0,0 +1,74 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Per-build Makefile rules (for recursive $(MAKE) calls from Makefile) + +# Base compile/link options +MYCXXFLAGS = /nologo /EHsc /Zc:forScope /D WIN32 /D _MBCS /D _CRT_SECURE_NO_DEPRECATE /MP $(CXXFLAGS) +MYLFLAGS = /link /incremental:no /fixed:no $(LFLAGS) +CXXFLAGS_NDEBUG = /MD /O2 /Ot /Gy /D NDEBUG +CXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG + +# Specify library directory for Direct X SDK +DDLIB_DIR=$(DXSDK_DIR)\lib\$(XARCH:AMD64=x64) + +# Input and output files +#SOURCE = v +#RCNAME = specified externaly +#EXE = ^ +# defaults on XARCH = x86 +UISRC = ../../common/gui/$(UI)video.cpp + +default: + +build_echo: + -@echo Building$(DEBUG) $(EXE) with UI=$(UI) XARCH=$(XARCH) + +build_one: build_echo build_$(UI)$(DEBUG) + +build_con: $(SOURCE) $(UISRC) compiler_check + $(CXX) $(CXXFLAGS_NDEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /subsystem:console /OUT:$(EXE) + @cmd.exe /C del *.obj + +build_con_debug: $(SOURCE) $(UISRC) compiler_check + $(CXX) $(CXXFLAGS_DEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /debug /subsystem:console /OUT:$(EXE) + @cmd.exe /C del *.obj + +build_gdi: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check + $(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) msvs/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE) + @cmd.exe /C del *.obj + +build_gdi_debug: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check + $(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) msvs/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE) + @cmd.exe /C del *.obj + +build_d2d: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check + -@echo Using DirectX SDK from "$(DDLIB_DIR)" + $(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) /I "$(DXSDK_DIR)\include" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:"$(DDLIB_DIR)" msvs/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE) + @cmd.exe /C del *.obj + +build_d2d_debug: $(SOURCE) $(UISRC) msvs/$(RCNAME).res compiler_check + -@echo Using DirectX SDK from "$(DDLIB_DIR)" + $(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) /I "$(DXSDK_DIR)\include" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:"$(DDLIB_DIR)" msvs/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE) + @cmd.exe /C del *.obj + +msvs/$(RCNAME).res: + rc /r msvs/$(RCNAME) +compiler_check: + @echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + @cmd.exe /C del compiler_test diff --git a/examples/common/gui/convideo.cpp b/examples/common/gui/convideo.cpp new file mode 100644 index 0000000..c04ffe4 --- /dev/null +++ b/examples/common/gui/convideo.cpp @@ -0,0 +1,136 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "video.h" +#include +#include + +unsigned int * g_pImg = 0; +int g_sizex, g_sizey; +static video *g_video = 0; +static int g_fps = 0; + +#if _WIN32 || _WIN64 + +static DWORD g_msec = 0; + +#ifdef _WINDOWS +HINSTANCE video::win_hInstance = 0; +int video::win_iCmdShow = 0; +void video::win_set_class(WNDCLASSEX &wcex) { } +void video::win_load_accelerators(int idc) { } +#endif //_WINDOWS + +#else +#include +#include +struct timeval g_time; +#endif //_WIN32||_WIN64 + +#define CALC_FPS_ENABLED ((WINAPI_FAMILY != WINAPI_FAMILY_APP) && (!__ANDROID__)) + +video::video() + // OpenGL* RGBA byte order for little-endian CPU + : depth(24), red_shift(0), green_shift(8), blue_shift(16), + red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000) +{ + assert(g_video == 0); + g_video = this; title = "Video"; updating = calc_fps = false; +} + +bool video::init_window(int x, int y) +{ + g_sizex = x; g_sizey = y; + g_pImg = new unsigned int[x*y]; + running = true; + return false; +} + +bool video::init_console() +{ + running = true; + return true; +} + +void video::terminate() +{ +#if CALC_FPS_ENABLED + if(calc_fps) { + double fps = g_fps; +#if _WIN32 || _WIN64 + fps /= (GetTickCount()-g_msec)/1000.0; +#else + struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz); + fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0); +#endif + printf("%s: %.1f fps\n", title, fps); + } +#endif + g_video = 0; running = false; + if(g_pImg) { delete[] g_pImg; g_pImg = 0; } +} + +video::~video() +{ + if(g_video) terminate(); +} + +//! Count and display FPS count in titlebar +bool video::next_frame() +{ +#if CALC_FPS_ENABLED + if(calc_fps){ + if(!g_fps) { +#if _WIN32 || _WIN64 + g_msec = GetTickCount(); +#else + struct timezone tz; gettimeofday(&g_time, &tz); +#endif + } + g_fps++; + } +#endif + return running; +} + +//! Do standard loop +void video::main_loop() +{ + on_process(); +} + +//! Change window title +void video::show_title() +{ +} + +///////////////////////////////////////////// public methods of video class /////////////////////// + +drawing_area::drawing_area(int x, int y, int sizex, int sizey) + : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), + pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey) +{ + assert(x < g_sizex); assert(y < g_sizey); + assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey); + + index = base_index; // current index +} + +void drawing_area::update() {} diff --git a/examples/common/gui/d2dvideo.cpp b/examples/common/gui/d2dvideo.cpp new file mode 100644 index 0000000..c01d670 --- /dev/null +++ b/examples/common/gui/d2dvideo.cpp @@ -0,0 +1,201 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// common Windows parts +#include "winvideo.h" + +// and another headers +#include +#include +#include +#if _DXSDK_PRODUCT_MAJOR < 9 +#error DXSDK Version 9 and above required. +#endif +#include +#include +#pragma comment(lib, "d2d1.lib") + +ID2D1Factory *m_pD2DFactory; +ID2D1HwndRenderTarget *m_pRenderTarget; +ID2D1Bitmap *m_pBitmap; +D2D1_SIZE_U bitmapSize; + +HANDLE g_hVSync; + +#include +#pragma comment(lib, "DxErr.lib") + +//! Create a dialog box and tell the user what went wrong +bool DisplayError(LPSTR lpstrErr, HRESULT hres) +{ + if(hres != S_OK){ + static bool InError = false; + int retval = 0; + if (!InError) + { + InError = true; + const char *message = hres?DXGetErrorString(hres):0; + retval = MessageBoxA(g_hAppWnd, lpstrErr, hres?message:"Error!", MB_OK|MB_ICONERROR); + InError = false; + } + } + return false; +} + +void DrawBitmap() +{ + HRESULT hr = S_OK; + if (m_pRenderTarget) { + m_pRenderTarget->BeginDraw(); + if (m_pBitmap) + hr = m_pBitmap->CopyFromMemory(NULL,(BYTE*)g_pImg, 4*g_sizex); + DisplayError( "DrawBitmap error", hr ); + m_pRenderTarget->DrawBitmap(m_pBitmap); + m_pRenderTarget->EndDraw(); + } + return; +} + +inline void mouse(int k, LPARAM lParam) +{ + int x = (int)LOWORD(lParam); + int y = (int)HIWORD(lParam); + RECT rc; + GetClientRect(g_hAppWnd, &rc); + g_video->on_mouse( x*g_sizex/(rc.right - rc.left), y*g_sizey/(rc.bottom - rc.top), k ); +} + +//! Win event processing function +LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) +{ + switch (iMsg) + { + case WM_MOVE: + // Check to make sure our window exists before we tell it to repaint. + // This will fail the first time (while the window is being created). + if (hwnd) { + InvalidateRect(hwnd, NULL, FALSE); + UpdateWindow(hwnd); + } + return 0L; + + case WM_SIZE: + case WM_PAINT: + if( g_video->running && g_video->updating ) { + DrawBitmap(); + Sleep(0); + } + break; + // Process all mouse and keyboard events + case WM_LBUTTONDOWN: mouse( 1, lParam ); break; + case WM_LBUTTONUP: mouse(-1, lParam ); break; + case WM_RBUTTONDOWN: mouse( 2, lParam ); break; + case WM_RBUTTONUP: mouse(-2, lParam ); break; + case WM_MBUTTONDOWN: mouse( 3, lParam ); break; + case WM_MBUTTONUP: mouse(-3, lParam ); break; + case WM_CHAR: g_video->on_key( (int)wParam); break; + + // some useless stuff + case WM_ERASEBKGND: return 1; // keeps erase-background events from happening, reduces chop + case WM_DISPLAYCHANGE: return 0; + + // Now, shut down the window... + case WM_DESTROY: PostQuitMessage(0); return 0; + } + // call user defined proc, if exists + return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam); +} + +bool video::init_window(int sizex, int sizey) +{ + assert(win_hInstance != 0); + g_sizex = sizex; g_sizey = sizey; + if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, false)) { + DisplayError("Unable to initialize the program's window."); + return false; + } + ShowWindow(g_hAppWnd, SW_SHOW); + g_pImg = new unsigned int[sizex*sizey]; + + HRESULT hr = S_OK; + + hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory); + // Create a Direct2D render target. + if (SUCCEEDED(hr) && !m_pRenderTarget){ + RECT rc; + GetClientRect(g_hAppWnd, &rc); + + bitmapSize = D2D1::SizeU( + rc.right - rc.left, + rc.bottom - rc.top + ); + + hr = m_pD2DFactory->CreateHwndRenderTarget( + D2D1::RenderTargetProperties(), + D2D1::HwndRenderTargetProperties(g_hAppWnd, bitmapSize), + &m_pRenderTarget + ); + if (SUCCEEDED(hr) && !m_pBitmap){ + D2D1_PIXEL_FORMAT pixelFormat = D2D1::PixelFormat( + DXGI_FORMAT_B8G8R8A8_UNORM, + D2D1_ALPHA_MODE_IGNORE + ); + D2D1_BITMAP_PROPERTIES bitmapProperties; + bitmapProperties.pixelFormat = pixelFormat; + m_pRenderTarget->GetDpi( &bitmapProperties.dpiX, &bitmapProperties.dpiY ); + m_pRenderTarget->CreateBitmap(bitmapSize,bitmapProperties,&m_pBitmap); + m_pRenderTarget->DrawBitmap(m_pBitmap); + } + } + + running = true; + return true; +} + +void video::terminate() +{ + if (m_pBitmap) m_pBitmap->Release(); + if (m_pRenderTarget) m_pRenderTarget->Release(); + if (m_pD2DFactory) m_pD2DFactory->Release(); + g_video = 0; running = false; + if(g_pImg) { delete[] g_pImg; g_pImg = 0; } +} + +//////////// drawing area constructor & destructor ///////////// + +drawing_area::drawing_area(int x, int y, int sizex, int sizey) + : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), + pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey) +{ + assert(x < g_sizex); assert(y < g_sizey); + assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey); + + index = base_index; // current index +} + +void drawing_area::update() +{ + if(g_video->updating) { + RECT r; + r.left = start_x; r.right = start_x + size_x; + r.top = start_y; r.bottom = start_y + size_y; + InvalidateRect(g_hAppWnd, &r, false); + } +} diff --git a/examples/common/gui/dxcheck.bat b/examples/common/gui/dxcheck.bat new file mode 100644 index 0000000..03b7580 --- /dev/null +++ b/examples/common/gui/dxcheck.bat @@ -0,0 +1,28 @@ +@echo off +REM +REM Copyright (c) 2005-2017 Intel Corporation +REM +REM Licensed under the Apache License, Version 2.0 (the "License"); +REM you may not use this file except in compliance with the License. +REM You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. +REM +REM +REM +REM +REM +if "%DXSDK_DIR%"=="" goto error_no_DXSDK +goto end + +:error_no_DXSDK +echo DirectX SDK Check : error : This example requires the DirectX SDK. Either (re)-install the DirectX SDK, or set the DXSDK_DIR environment variable to indicate where it is installed. + +:end + diff --git a/examples/common/gui/gdivideo.cpp b/examples/common/gui/gdivideo.cpp new file mode 100644 index 0000000..17bccc4 --- /dev/null +++ b/examples/common/gui/gdivideo.cpp @@ -0,0 +1,146 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// common Windows parts +#include "winvideo.h" +// include GDI+ headers +#include +// and another headers +#include + +// tag linking library +#pragma comment(lib, "gdiplus.lib") + +// global specific variables +Gdiplus::Bitmap * g_pBitmap; // main drawing bitmap +ULONG_PTR gdiplusToken; +Gdiplus::GdiplusStartupInput gdiplusStartupInput;// GDI+ + +//! display system error +bool DisplayError(LPSTR lpstrErr, HRESULT hres) +{ + static bool InError = false; + int retval = 0; + if (!InError) + { + InError = true; + LPCSTR lpMsgBuf; + if(!hres) hres = GetLastError(); + FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, hres, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); + retval = MessageBox(g_hAppWnd, lpstrErr, lpMsgBuf, MB_OK|MB_ICONERROR); + LocalFree( (HLOCAL)lpMsgBuf ); + InError = false; + } + return false; +} + +//! Win event processing function +LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) +{ + switch (iMsg) + { + case WM_MOVE: + // Check to make sure our window exists before we tell it to repaint. + // This will fail the first time (while the window is being created). + if (hwnd) { + InvalidateRect(hwnd, NULL, FALSE); + UpdateWindow(hwnd); + } + return 0L; + + case WM_PAINT: + { + PAINTSTRUCT ps; + Gdiplus::Graphics graphics( BeginPaint(hwnd, &ps) ); + // redraw just requested area. This call is as fast as simple DrawImage() call. + if(g_video->updating) graphics.DrawImage(g_pBitmap, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.left, ps.rcPaint.top, + ps.rcPaint.right, ps.rcPaint.bottom, Gdiplus::UnitPixel); + EndPaint(hwnd, &ps); + } + return 0L; + + // Process all mouse and keyboard events + case WM_LBUTTONDOWN: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 1); break; + case WM_LBUTTONUP: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -1); break; + case WM_RBUTTONDOWN: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 2); break; + case WM_RBUTTONUP: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -2); break; + case WM_MBUTTONDOWN: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 3); break; + case WM_MBUTTONUP: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -3); break; + case WM_CHAR: g_video->on_key( (int)wParam); break; + + // some useless stuff + case WM_ERASEBKGND: return 1; // keeps erase-background events from happening, reduces chop + case WM_DISPLAYCHANGE: return 0; + + // Now, shut down the window... + case WM_DESTROY: PostQuitMessage(0); return 0; + } + // call user defined proc, if exists + return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam); +} + +///////////// video functions //////////////// + +bool video::init_window(int sizex, int sizey) +{ + assert(win_hInstance != 0); + g_sizex = sizex; g_sizey = sizey; + if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, true)) { + DisplayError("Unable to initialize the program's window."); + return false; + } + ShowWindow(g_hAppWnd, SW_SHOW); + Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); + g_pImg = new unsigned int[sizex*sizey]; + g_pBitmap = new Gdiplus::Bitmap(g_sizex, g_sizey, 4*g_sizex, PixelFormat32bppRGB, (BYTE*)g_pImg ); + running = true; + return true; +} + +void video::terminate() +{ + if(g_pBitmap) { delete g_pBitmap; g_pBitmap = 0; } + Gdiplus::GdiplusShutdown(gdiplusToken); + g_video = 0; running = false; + if(g_pImg) { delete[] g_pImg; g_pImg = 0; } +} + +//////////// drawing area constructor & destructor ///////////// + +drawing_area::drawing_area(int x, int y, int sizex, int sizey) + : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), + pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey) +{ + assert(x < g_sizex); assert(y < g_sizey); + assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey); + + index = base_index; // current index +} + +void drawing_area::update() +{ + if(g_video->updating) { + RECT r; + r.left = start_x; r.right = start_x + size_x; + r.top = start_y; r.bottom = start_y + size_y; + InvalidateRect(g_hAppWnd, &r, false); + } +} diff --git a/examples/common/gui/macvideo.cpp b/examples/common/gui/macvideo.cpp new file mode 100644 index 0000000..fd64714 --- /dev/null +++ b/examples/common/gui/macvideo.cpp @@ -0,0 +1,164 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "video.h" +#include +#include +#include +#include + +unsigned int* g_pImg = 0; +int g_sizex=0, g_sizey=0; +static video *g_video = 0; +static int g_fps = 0; +char *window_title=NULL; +#define WINDOW_TITLE_SIZE 256 +int cocoa_update=0; + +#include +#include +struct timeval g_time; + +video::video() +#if __TBB_IOS + : depth(24), red_shift(0), green_shift(8), blue_shift(16), + red_mask(0xff), green_mask(0xff00), blue_mask(0xff0000) +#else + : depth(24), red_shift(16), green_shift(8), blue_shift(0), + red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff) +#endif +{ + assert(g_video == 0); + g_video = this; title = "Video"; cocoa_update=1; updating = true; calc_fps = false; +} + +bool video::init_window(int x, int y) +{ + g_sizex = x; g_sizey = y; + g_pImg = new unsigned int[x*y]; + if( window_title==NULL ) + window_title = (char*)malloc(WINDOW_TITLE_SIZE); + strncpy( window_title, title, WINDOW_TITLE_SIZE-1 ); + running = true; + return true; +} + +bool video::init_console() +{ + running = true; + return true; +} + +void video::terminate() +{ + if(calc_fps) { + double fps = g_fps; + struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz); + fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0); + printf("%s: %.1f fps\n", title, fps); + } + g_video = 0; running = false; + if(g_pImg) { delete[] g_pImg; g_pImg = 0; } +} + +video::~video() +{ + if(g_video) terminate(); +} + +//! Count and display FPS count in titlebar +bool video::next_frame() +{ + if(calc_fps){ + if(!g_fps) { + struct timezone tz; gettimeofday(&g_time, &tz); + } + g_fps++; + } + struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz); + double sec=((now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0)); + if( sec>1 ){ + if(calc_fps) { + memcpy(&g_time, &now_time, sizeof(g_time)); + int fps; + fps = g_fps/sec; + cocoa_update = (int)updating; + snprintf(window_title,WINDOW_TITLE_SIZE, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps)); + g_fps=0; + } + } + return running; +} + + +void* thread_func(void*) +{ + g_video->on_process(); + exit(EXIT_SUCCESS); +} + +extern "C" void on_mouse_func(int x, int y, int k) +{ + g_video->on_mouse(x, y, k); + return; +} + +extern "C" void on_key_func(int x) +{ + g_video->on_key(x); + return; +} + +extern "C" int cocoa_main( int argc, char *argv[] ); +//! Do standard loop +void video::main_loop() +{ + pthread_t handle; + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_create(&handle,&attr,&thread_func,(void*)NULL); + pthread_detach(handle); + cocoa_main( 0, NULL ); +} + +//! Change window title +void video::show_title() +{ + if(title) + strncpy( window_title, title, WINDOW_TITLE_SIZE ); + return; +} + +///////////////////////////////////////////// public methods of video class /////////////////////// + +drawing_area::drawing_area(int x, int y, int sizex, int sizey) + : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), + pixel_depth(24), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey) +{ + assert(x < g_sizex); assert(y < g_sizey); + assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey); + + index = base_index; // current index +} + +void drawing_area::update() +{ + //nothing to do, updating via timer in cocoa part. +} diff --git a/examples/common/gui/video.h b/examples/common/gui/video.h new file mode 100644 index 0000000..3e51050 --- /dev/null +++ b/examples/common/gui/video.h @@ -0,0 +1,241 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef __VIDEO_H__ +#define __VIDEO_H__ + +#include +#if _MSC_VER +#include // for uintptr_t +#else +#include // for uintptr_t +#endif +#if _WIN32 || _WIN64 +#include +#else +#include +#endif + +typedef unsigned int color_t; +typedef unsigned char colorcomp_t; +typedef signed char depth_t; + +//! Class for getting access to drawing memory +class drawing_memory +{ +#ifdef __TBB_MIC_OFFLOAD + // The address is kept as uintptr_t since + // the compiler could not offload a pointer +#endif + uintptr_t my_address; +public: + depth_t pixel_depth; + int sizex, sizey; + //! Get drawing memory + inline char* get_address() const { return reinterpret_cast(my_address); } + //! Get drawing memory size + inline int get_size() const { return ((pixel_depth>16) ? 4:2) * sizex * sizey; } + //! Set drawing memory + inline void set_address(char *mem) { my_address = reinterpret_cast(mem); } + + friend class drawing_area; + friend class video; +}; + +//! Simple proxy class for managing of different video systems +class video +{ + //! colorspace information + depth_t depth, red_shift, green_shift, blue_shift; + color_t red_mask, green_mask, blue_mask; + friend class drawing_area; + +public: + //! Constructor + video(); + //! Destructor + ~video(); + //! member to set window name + const char *title; + //! true is enable to show fps + bool calc_fps; + //! if true: on windows fork processing thread for on_process(), on non-windows note that next_frame() is called concurrently. + bool threaded; + //! true while running within main_loop() + bool running; + //! if true, do gui updating + bool updating; + //! initialize graphical video system + bool init_window(int sizex, int sizey); + //! initialize console. returns true if console is available + bool init_console(); + //! terminate video system + void terminate(); + //! Do standard event & processing loop. Use threaded = true to separate event/updating loop from frame processing + void main_loop(); + //! Process next frame + bool next_frame(); + //! Change window title + void show_title(); + //! translate RGB components into packed type + inline color_t get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const; + //! Get drawing memory descriptor + inline drawing_memory get_drawing_memory() const; + + //! code of the ESCape key + static const int esc_key = 27; + //! Mouse events handler. + virtual void on_mouse(int x, int y, int key) { } + //! Mouse events handler. + virtual void on_key(int key) { } + //! Main processing loop. Redefine with your own + virtual void on_process() { while(next_frame()); } + +#ifdef _WINDOWS + //! Windows specific members + //! if VIDEO_WINMAIN isn't defined then set this just before init() by arguments of WinMain + static HINSTANCE win_hInstance; static int win_iCmdShow; + //! optionally call it just before init() to set own. Use ascii strings convention + void win_set_class(WNDCLASSEX &); + //! load and set accelerator table from resources + void win_load_accelerators(int idc); +#endif +}; + +//! Drawing class +class drawing_area +{ + const size_t base_index, max_index, index_stride; + const depth_t pixel_depth; + unsigned int * const ptr32; + size_t index; +public: + const int start_x, start_y, size_x, size_y; + //! constructors + drawing_area(int x, int y, int sizex, int sizey); + inline drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem); + //! destructor + inline ~drawing_area(); + //! update the image + void update(); + //! set current position. local_x could be bigger then size_x + inline void set_pos(int local_x, int local_y); + //! put pixel in current position with incremental address calculating to next right pixel + inline void put_pixel(color_t color); + //! draw pixel at position by packed color + void set_pixel(int localx, int localy, color_t color) + { set_pos(localx, localy); put_pixel(color); } +}; + +extern int g_sizex; +extern int g_sizey; +extern unsigned int *g_pImg; + +inline drawing_memory video::get_drawing_memory() const +{ + drawing_memory dmem; + dmem.pixel_depth = depth; + dmem.my_address = reinterpret_cast(g_pImg); + dmem.sizex = g_sizex; + dmem.sizey = g_sizey; + return dmem; +} + +inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const +{ + if(red_shift == 16) // only for depth == 24 && red_shift > blue_shift + return (red<<16) | (green<<8) | blue; + else if(depth >= 24) + return +#if __ANDROID__ + // Setting Alpha to 0xFF + 0xFF000000 | +#endif + (red< 0) { + depth_t bs = blue_shift, rs = red_shift; + if(blue_shift < 0) blue >>= -bs, bs = 0; + else /*red_shift < 0*/ red >>= -rs, rs = 0; + return ((red<2^16 + u = (2048 + (blue << 3) - (y >> 5)) >> 4; // (limit->2^12)>>4 + v = (2048 + (red << 3) - (y >> 5)) >> 4; + y = y >> 8; + return u | (y << 8) | (v << 16) | (y << 24); + } +} + +inline drawing_area::drawing_area(int x, int y, int sizex, int sizey, const drawing_memory &dmem) + : base_index(y*dmem.sizex + x), max_index(dmem.sizex*dmem.sizey), index_stride(dmem.sizex), + pixel_depth(dmem.pixel_depth), ptr32(reinterpret_cast(dmem.my_address)), + start_x(x), start_y(y), size_x(sizex), size_y(sizey) +{ + assert(x < dmem.sizex); assert(y < dmem.sizey); + assert(x+sizex <= dmem.sizex); assert(y+sizey <= dmem.sizey); + + index = base_index; // current index +} + +inline void drawing_area::set_pos(int local_x, int local_y) +{ + index = base_index + local_x + local_y*index_stride; +} + +inline void drawing_area::put_pixel(color_t color) +{ + assert(index < max_index); + if(pixel_depth > 16) ptr32[index++] = color; + else if(pixel_depth > 0) + ((unsigned short*)ptr32)[index++] = (unsigned short)color; + else { // UYVY colorspace + if(index&1) color >>= 16; + ((unsigned short*)ptr32)[index++] = (unsigned short)color; + } +} + +inline drawing_area::~drawing_area() +{ +#if ! __TBB_DEFINE_MIC + update(); +#endif +} + +#if defined(_WINDOWS) && (defined(VIDEO_WINMAIN) || defined(VIDEO_WINMAIN_ARGS) ) +#include +//! define WinMain for subsystem:windows. +#ifdef VIDEO_WINMAIN_ARGS +int main(int, char *[]); +#else +int main(); +#endif +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow) +{ + video::win_hInstance = hInstance; video::win_iCmdShow = iCmdShow; +#ifdef VIDEO_WINMAIN_ARGS + return main(__argc, __argv); +#else + return main(); +#endif +} +#endif + +#endif// __VIDEO_H__ diff --git a/examples/common/gui/winvideo.h b/examples/common/gui/winvideo.h new file mode 100644 index 0000000..7f35fe9 --- /dev/null +++ b/examples/common/gui/winvideo.h @@ -0,0 +1,283 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/////// Common internal implementation of Windows-specific stuff ////////////// +/////// Must be the first included header ////////////// + +#ifndef __WINVIDEO_H__ +#define __WINVIDEO_H__ + +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE +#endif +// Check that the target Windows version has all API calls requried. +#ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0400 +#endif +#if _WIN32_WINNT<0x0400 +# define YIELD_TO_THREAD() Sleep(0) +#else +# define YIELD_TO_THREAD() SwitchToThread() +#endif +#include "video.h" +#include +#include +#include +#include + +#pragma comment(lib, "gdi32.lib") +#pragma comment(lib, "user32.lib") + +// maximum mumber of lines the output console should have +static const WORD MAX_CONSOLE_LINES = 500; +const COLORREF RGBKEY = RGB(8, 8, 16); // at least 8 for 16-bit palette +HWND g_hAppWnd; // The program's window handle +HANDLE g_handles[2] = {0,0};// thread and wake up event +unsigned int * g_pImg = 0; // drawing memory +int g_sizex, g_sizey; +static video * g_video = 0; +WNDPROC g_pUserProc = 0; +HINSTANCE video::win_hInstance = 0; +int video::win_iCmdShow = 0; +static WNDCLASSEX * gWndClass = 0; +static HACCEL hAccelTable = 0; +static DWORD g_msec = 0; +static int g_fps = 0, g_updates = 0, g_skips = 0; + +bool DisplayError(LPSTR lpstrErr, HRESULT hres = 0); // always returns false +LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); + +//! Create window +bool WinInit(HINSTANCE hInstance, int nCmdShow, WNDCLASSEX *uwc, const char *title, bool fixedsize) +{ + WNDCLASSEX wndclass; // Our app's windows class + if(uwc) { + memcpy(&wndclass, uwc, sizeof(wndclass)); + g_pUserProc = uwc->lpfnWndProc; + } else { + memset(&wndclass, 0, sizeof(wndclass)); + wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); + wndclass.lpszClassName = title; + } + wndclass.cbSize = sizeof(wndclass); + wndclass.hInstance = hInstance; + wndclass.lpfnWndProc = InternalWndProc; + wndclass.style |= CS_HREDRAW | CS_VREDRAW; + wndclass.hbrBackground = CreateSolidBrush(RGBKEY); + + if( !RegisterClassExA(&wndclass) ) return false; + int xaddend = GetSystemMetrics(fixedsize?SM_CXFIXEDFRAME:SM_CXFRAME)*2; + int yaddend = GetSystemMetrics(fixedsize?SM_CYFIXEDFRAME:SM_CYFRAME)*2 + GetSystemMetrics(SM_CYCAPTION); + if(wndclass.lpszMenuName) yaddend += GetSystemMetrics(SM_CYMENU); + + // Setup the new window's physical parameters - and tell Windows to create it + g_hAppWnd = CreateWindowA(wndclass.lpszClassName, // Window class name + title, // Window caption + !fixedsize ? WS_OVERLAPPEDWINDOW : // Window style + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX, + CW_USEDEFAULT, // Initial x pos: use default placement + 0, // Initial y pos: not used here + g_sizex+xaddend,// Initial x size + g_sizey+yaddend,// Initial y size + NULL, // parent window handle + NULL, // window menu handle + hInstance, // program instance handle + NULL); // Creation parameters + return g_hAppWnd != NULL; +} + +//! create console window with redirection +static bool RedirectIOToConsole(void) +{ + int hConHandle; size_t lStdHandle; + CONSOLE_SCREEN_BUFFER_INFO coninfo; + FILE *fp; + // allocate a console for this app + AllocConsole(); + + // set the screen buffer to be big enough to let us scroll text + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); + coninfo.dwSize.Y = MAX_CONSOLE_LINES; + SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); + + // redirect unbuffered STDOUT to the console + lStdHandle = (size_t)GetStdHandle(STD_OUTPUT_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + if(hConHandle <= 0) return false; + fp = _fdopen( hConHandle, "w" ); + *stdout = *fp; + setvbuf( stdout, NULL, _IONBF, 0 ); + + // redirect unbuffered STDERR to the console + lStdHandle = (size_t)GetStdHandle(STD_ERROR_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + if(hConHandle > 0) { + fp = _fdopen( hConHandle, "w" ); + *stderr = *fp; + setvbuf( stderr, NULL, _IONBF, 0 ); + } + + // redirect unbuffered STDIN to the console + lStdHandle = (size_t)GetStdHandle(STD_INPUT_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + if(hConHandle > 0) { + fp = _fdopen( hConHandle, "r" ); + *stdin = *fp; + setvbuf( stdin, NULL, _IONBF, 0 ); + } + + // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog + // point to console as well + std::ios::sync_with_stdio(); + return true; +} + + +video::video() + : depth(24), red_shift(16), green_shift(8), blue_shift(0), + red_mask(0xff0000), green_mask(0xff00), blue_mask(0xff) +{ + assert(g_video == 0); + g_video = this; title = "Video"; running = threaded = calc_fps = false; updating = true; +} + +//! optionally call it just before init() to set own +void video::win_set_class(WNDCLASSEX &wcex) +{ + gWndClass = &wcex; +} + +void video::win_load_accelerators(int idc) +{ + hAccelTable = LoadAccelerators(win_hInstance, MAKEINTRESOURCE(idc)); +} + +bool video::init_console() +{ + if(RedirectIOToConsole()) { + if(!g_pImg && g_sizex && g_sizey) + g_pImg = new unsigned int[g_sizex * g_sizey]; + if(g_pImg) running = true; + return true; + } + return false; +} + +video::~video() +{ + if(g_video) terminate(); +} + +DWORD WINAPI thread_video(LPVOID lpParameter) +{ + video *v = (video*)lpParameter; + v->on_process(); + return 0; +} + +static bool loop_once(video *v) +{ + // screen update notify + if(int updates = g_updates) { + g_updates = 0; + if(g_video->updating) { g_skips += updates-1; g_fps++; } + else g_skips += updates; + UpdateWindow(g_hAppWnd); + } + // update fps + DWORD msec = GetTickCount(); + if(v->calc_fps && msec >= g_msec+1000) { + double sec = (msec - g_msec)/1000.0; + char buffer[256], n = _snprintf(buffer, 128, "%s: %d fps", v->title, int(double(g_fps + g_skips)/sec)); + if(g_skips) _snprintf(buffer+n, 128, " - %d skipped = %d updates", int(g_skips/sec), int(g_fps/sec)); + SetWindowTextA(g_hAppWnd, buffer); + g_msec = msec; g_skips = g_fps = 0; + } + // event processing, including painting + MSG msg; + if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){ + if( msg.message == WM_QUIT ) { v->running = false; return false; } + if( !hAccelTable || !TranslateAccelerator(msg.hwnd, hAccelTable, &msg) ){ + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return true; // try again + } + return false; +} + +//! Do standard event loop +void video::main_loop() +{ + // let Windows draw and unroll the window + InvalidateRect(g_hAppWnd, 0, false); + g_msec = GetTickCount(); // let's stay for 0,5 sec + while(g_msec + 500 > GetTickCount()) { loop_once(this); Sleep(1); } + g_msec = GetTickCount(); + // now, start main process + if(threaded) { + g_handles[0] = CreateThread ( + NULL, // LPSECURITY_ATTRIBUTES security_attrs + 0, // SIZE_T stacksize + (LPTHREAD_START_ROUTINE) thread_video, + this, // argument + 0, 0); + if(!g_handles[0]) { DisplayError("Can't create thread"); return; } + else // harmless race is possible here + g_handles[1] = CreateEvent(NULL, false, false, NULL); + while(running) { + while(loop_once(this)); + YIELD_TO_THREAD(); // give time for processing when running on single CPU + DWORD r = MsgWaitForMultipleObjects(2, g_handles, false, INFINITE, QS_ALLINPUT^QS_MOUSEMOVE); + if(r == WAIT_OBJECT_0) break; // thread terminated + } + running = false; + if(WaitForSingleObject(g_handles[0], 3000) == WAIT_TIMEOUT){ + // there was not enough time for graceful shutdown, killing the example with code 1. + exit(1); + } + if(g_handles[0]) CloseHandle(g_handles[0]); + if(g_handles[1]) CloseHandle(g_handles[1]); + g_handles[0] = g_handles[1] = 0; + } + else on_process(); +} + +//! Refresh screen picture +bool video::next_frame() +{ + if(!running) return false; + g_updates++; // Fast but inaccurate counter. The data race here is benign. + if(!threaded) while(loop_once(this)); + else if(g_handles[1]) { + SetEvent(g_handles[1]); + YIELD_TO_THREAD(); + } + return true; +} + +//! Change window title +void video::show_title() +{ + if(g_hAppWnd) + SetWindowTextA(g_hAppWnd, title); +} + +#endif //__WINVIDEO_H__ diff --git a/examples/common/gui/xcode/tbbExample/OpenGLView.h b/examples/common/gui/xcode/tbbExample/OpenGLView.h new file mode 100644 index 0000000..971abeb --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/OpenGLView.h @@ -0,0 +1,60 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#import + +#if TARGET_OS_IPHONE + +#import +#import "OpenGLES/ES2/gl.h" + +@interface OpenGLView : UIView { + NSTimer *timer; + CGRect imageRect; +} + +@property (nonatomic, retain) NSTimer *timer; +@property (nonatomic) CGRect imageRect; + +- (void) drawRect:(CGRect)rect; +- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; + +@end + +#elif TARGET_OS_MAC + +#import +#import + +@interface OpenGLView : NSOpenGLView{ + NSTimer *timer; +} + +@property (nonatomic,retain) NSTimer *timer; + +- (void) drawRect:(NSRect)start; +- (void) mouseDown:(NSEvent *)theEvent; +- (void) keyDown:(NSEvent *)theEvent; +- (BOOL) acceptsFirstResponder; +- (void) viewDidEndLiveResize; + +@end + +#endif diff --git a/examples/common/gui/xcode/tbbExample/OpenGLView.m b/examples/common/gui/xcode/tbbExample/OpenGLView.m new file mode 100644 index 0000000..9560ea3 --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/OpenGLView.m @@ -0,0 +1,147 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#import +#import "OpenGLView.h" + +// defined in macvideo.cpp +extern char* window_title; +extern int cocoa_update; +extern int g_sizex, g_sizey; +extern unsigned int *g_pImg; +void on_mouse_func(int x, int y, int k); +void on_key_func(int x); + +bool initilized = false; + +#if TARGET_OS_IPHONE + +#import "OpenGLES/ES2/gl.h" + +@implementation OpenGLView + +@synthesize timer; +@synthesize imageRect; + +- (void)drawRect:(CGRect)start +{ + if (initilized == false) { + NSLog(@"INITIALIZE"); + timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES]; + imageRect = [[UIScreen mainScreen] bounds]; + CGFloat full_height = imageRect.size.height; + const float ratio=(float)g_sizex/g_sizey; + imageRect.size.height=imageRect.size.width/ratio; + imageRect.origin.y=(full_height-imageRect.size.height)/2; + initilized = true; + } + + CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB(); + CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, g_pImg, 4*g_sizex*g_sizey, NULL); + + CGImageRef inputImage = CGImageCreate(g_sizex, g_sizey, 8, 32, g_sizex * 4, colourSpace,(CGBitmapInfo)kCGImageAlphaNoneSkipLast, dataProvider, NULL, NO, kCGRenderingIntentDefault); + UIImage *image = [UIImage imageWithCGImage:inputImage]; + + CGDataProviderRelease(dataProvider); + CGColorSpaceRelease(colourSpace); + CGImageRelease(inputImage); + + [image drawInRect:imageRect]; + +} + +- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + CGPoint point = [[touches anyObject] locationInView:self]; + const int x = point.x; + const int y = point.y; + if ( (y-imageRect.origin.y) > 0 && y < (imageRect.origin.y + imageRect.size.height )) + on_mouse_func( x*g_sizex/(imageRect.size.width), (y-imageRect.origin.y)*g_sizey/imageRect.size.height,1); + [self setNeedsDisplay]; +} + +-(void) update_window{ + if( cocoa_update ) [self setNeedsDisplay]; +} + +@end + +#elif TARGET_OS_MAC + +#import + +@implementation OpenGLView + +@synthesize timer; + +- (void) drawRect:(NSRect)start +{ + if (initilized == false) { + NSLog(@"INITIALIZE"); + timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES]; + initilized = true; + } + glWindowPos2i(0, (int)self.visibleRect.size.height); + glPixelZoom( (float)self.visibleRect.size.width /(float)g_sizex, + -(float)self.visibleRect.size.height/(float)g_sizey); + glDrawPixels(g_sizex, g_sizey, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, g_pImg); + glFlush(); +} + +-(void) update_window{ + if( cocoa_update ) [self setNeedsDisplay:YES]; + if( window_title ) [_window setTitle:[NSString stringWithFormat:@"%s", window_title]]; +} + +-(void) keyDown:(NSEvent *)theEvent{ + on_key_func([theEvent.characters characterAtIndex:0]); +} + +-(void) mouseDown:(NSEvent *)theEvent{ + // mouse event for seismic and fractal + NSPoint point= theEvent.locationInWindow; + const int x = (int)point.x; + const int y = (int)point.y; + NSRect rect = self.visibleRect; + on_mouse_func(x*g_sizex/(int)rect.size.width,((int)rect.size.height-y)*g_sizey/(int)rect.size.height,1); + [self setNeedsDisplay:YES]; +} + +- (BOOL) acceptsFirstResponder +{ + return YES; +} + +- (void) rightMouseDown:(NSEvent *)theEvent +{ + return; +} + +-(void) viewDidEndLiveResize +{ + NSRect rect = self.visibleRect; + const int x=(int)rect.size.width; + const int y=(int)rect.size.height; + [_window setTitle:[NSString stringWithFormat:@"X=%d Y=%d", x,y]]; +} + +@end + +#endif diff --git a/examples/common/gui/xcode/tbbExample/PkgInfo b/examples/common/gui/xcode/tbbExample/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings b/examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.nib b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.nib new file mode 100644 index 0000000000000000000000000000000000000000..bbcd0057ed0aaf2c2790d9f47cf0c2bbd6ac98a6 GIT binary patch literal 3312 zcmZWr32;@_8UD`Q&jaMWAcQRokN{y#*klVK3ri#m@<>QR;Cb_M4HsVSi*F&sO!VNs zqODcjYB4xg+}mkgTCGxCM`~L{MXA(ws#dI3>xgCS4E^uD?*St(Gr7z8&%b=%_y6a1 z^u+9Bsi% zWUvuB3>07ziZBhcQHu+)26br1CTvCo7sEs+EL;K`-AJMzm*WZuT#XxWBW}gd@DP5E zhw(U`z?1kTp2joy4PLva@j7J{wBEeuoxYK#tKKvb#;FyMRWi)CfDUuztQ+*lpc!I2Rf3W68 za=o6r>r4(p6|;mSmWc*YE=G!_qE6I{`a@K6AtqqrMoP%dvBB)Ngd${0u(F5fkD6|V zhfs{kn1ZQoekBfBwfMJIax-mBCsXlmAB91(D{0Br;|7?H8JJ1M&&p^;oc{o33GG9a zq6~8|7xOS53&`*SEW{!##u6+=IhLUU%Tb9cRHFtfu#(=aCR}~k*AaG$H<*+v<%3&(FH4O|G-3 zkc3I(l1(_8uq?+7%U(}dk+J7(;(RD8t|z}4~Y zo`kE`xU)84#}lMjul&{NF51zReJ6rqNGL=dE{2JrVz@Z3t+B^)R@J$fQRldqwlifn z_m|BmTr}Wa$_9K9b|C5s&edwT*X-%B5`*YKNhCO`zn{?Za4VbR0!JXu85oEJ3tddl z`gtp7J!c$uVT;$?8AVxywVAR8(S;H}@>XmkQPihXt~|n4YA?1ThLR={ik0$p?jSB^ z?nMtSMM8`c<3!$JA}NJ5wxbt2(1%eQ8p3sEhZQ5))R5Q+O}D{_rf@u+h+1N-7$b6p zlx@rbYR1ukYIs>o?(M+=5+VhL|o&ME()nh9BX_RMGAD3GTq1*p0hzH}1i` zxDP+Y{T|~qh*n&hwzt>EJ6*vOtM!(XrhaL3YP-!Yiv~f~gfOUgtnRpDN9*EI7hHRX z)#+IgOkPvx&^U%D5EI2zF(K!QQ>RXe$)fNu_D~iNPzHn8iw99oN_C^S4ew51Z;H(q z7l;MIAmLw>wo`>?I_RQH-=^LBXz)FPNAVcJLp|Z4@9irVMPd@g_ww-C#&uo2#fon0 zHWS-?(4WFDJhk|fFS~ybPodgYjw6(I{v>mrT-=%}2V&(%lDCT^CV?dc9Q@0TwM*o;M|>D9KN0sV`wCxYlsQQE zB^$}&>`dJ=@mnHbF%htmCS$$nkaQD1e6QlagDzTGl)iUS8byCTPNN7XdZNQt%HSjs zPV|(qXS!JOI9Z&7Yi4dp=i=+nlI;Fm+RsL_F>EXw$Hucfmd^@UA)CM^vPrB+REXuG zQdEg*Q6pA}m131xEo#MuVogXIACmGyQhrD(2uXz@X+lVv7?LK1q@s{i9Fiu7q$we3 zY6d+vPt4qt4S9iBLiYq5Tf`QVc518q!@kB$nS*SRJAdgDhWgs-tjv4|{+X4tWt(cN zGN*ngSqes9gJUp}$eB;ad<8zjCu{_Lqs^m_%GIoqwXrSiGIl3>iXCKcu|Kgx>@a(m z9bq4^zp!KMBldUpIs1;CWZz3%%8~M<$jz}L% z|C6~qPA-<`$`x{0Zjv|1t@1{Ble}5JSniNJWn11Rcgu14M)?l;e))iWP(G$W8LCWF zmMQC$^-8nSs%%s?DG|j~qKc!W6`@?G>{50s4=Il-FDsuaU#YTcs3A39Emo(i^V9`u zxmuxCs@3XxwO!q+Ce^gstM;k=>ecGC>h)anzV~GN9)(F(yrHT)Na;xX}4*2XuGw$wMVq4wHLG(wf))w?G^1k z?S1VN?OW|T?WFd-F6$%pe7#IxpjYcF^i_JT-mY7EkDk^q*M)wiew%);{-FN6en3B@ zAJvcRU+X6g$xw`3V~jD*$TJFz3C1L&*qCCJ7>kXi#xi5MQDxK_O~wYJ&1g5SF?Jbu z8TT0X8TT7|j6vf;<00c=W1sP?vEMjgylT8|yki_QJ~oaUCyY~^ahZqsSYE)V@@c%B zSMW++%~$YMyq2%w^}La{@HU?2y}Xb2^8tPZ-^s7y*YNB34g4m43%`}$#qZ(2=Fjlw z_;2|O{6)T>AK*Z3R!P5uY|M}COE!;kQz{22cm{|En+ALn22ulP6o1V0sE0Vyyf hFf4FhAU7~MFg;Kns0yrw_md?5$}0S8_J3gA{{ii7$-e*q literal 0 HcmV?d00001 diff --git a/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib new file mode 100644 index 0000000..975382c --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/en.lproj/MainMenu.xib @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/common/gui/xcode/tbbExample/iOS.storyboard b/examples/common/gui/xcode/tbbExample/iOS.storyboard new file mode 100644 index 0000000..9906441 --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/iOS.storyboard @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/common/gui/xcode/tbbExample/main.m b/examples/common/gui/xcode/tbbExample/main.m new file mode 100644 index 0000000..600bdb6 --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/main.m @@ -0,0 +1,51 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#import +#import + +#if TARGET_OS_IPHONE + +#import +#import "tbbAppDelegate.h" + +void get_screen_resolution(int *x, int *y) { + // Getting landscape screen resolution in any case + CGRect imageRect = [[UIScreen mainScreen] bounds]; + *x=imageRect.size.width>imageRect.size.height?imageRect.size.width:imageRect.size.height; + *y=imageRect.size.width + +int cocoa_main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} +#endif diff --git a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h new file mode 100644 index 0000000..22570d8 --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.h @@ -0,0 +1,51 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// +// Created by Xcode* 4.3.2 +// + +#import + +#if TARGET_OS_IPHONE + +#import + +@interface tbbAppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end + +#elif TARGET_OS_MAC + +#import + +@interface tbbAppDelegate : NSObject { + __unsafe_unretained NSWindow *_window; +} + +@property (assign) IBOutlet NSWindow *window; + +- (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender; + +@end + +#endif diff --git a/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m new file mode 100644 index 0000000..125f334 --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/tbbAppDelegate.m @@ -0,0 +1,66 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#import "tbbAppDelegate.h" + +#if TARGET_OS_IPHONE + +@implementation tbbAppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + return YES; +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + exit(EXIT_SUCCESS); +} + +@end + +#elif TARGET_OS_MAC + +@implementation tbbAppDelegate + +@synthesize window = _window; + +//declared in macvideo.cpp file +extern int g_sizex, g_sizey; + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + // Insert code here to initialize your application + NSRect windowSize; + windowSize.size.height = g_sizey; + windowSize.size.width = g_sizex; + windowSize.origin=_window.frame.origin; + [_window setFrame:windowSize display:YES]; + +} + +- (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender +{ + return YES; +} + +@end + +#endif diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist b/examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist new file mode 100644 index 0000000..80bdf4f --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/tbbExample-Info.ios.plist @@ -0,0 +1,44 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + iOS + UIMainStoryboardFile + iOS + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist b/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist new file mode 100644 index 0000000..3f8fce4 --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/tbbExample-Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSApplicationCategoryType + public.app-category.business + LSEnvironment + + DYLD_LIBRARY_PATH + Contents/Resources:.:../Resources:/tmp:$DYLD_LIBRARY_PATH + LIBRARY_PATH + Contents/Resources:.:../:/tmp:$DYLD_LIBRARY_PATH + + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright 2005-2017 Intel Corporation. All Rights Reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch b/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch new file mode 100644 index 0000000..cc4ffcc --- /dev/null +++ b/examples/common/gui/xcode/tbbExample/tbbExample-Prefix.pch @@ -0,0 +1,36 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// +// Prefix header for all source files of the 'tbbExample' target in the 'tbbExample' project +// + +#import + +#if TARGET_OS_IPHONE +#ifdef __OBJC__ + #import + #import +#endif +#elif TARGET_OS_MAC +#ifdef __OBJC__ + #import +#endif +#endif diff --git a/examples/common/gui/xvideo.cpp b/examples/common/gui/xvideo.cpp new file mode 100644 index 0000000..e7d8c47 --- /dev/null +++ b/examples/common/gui/xvideo.cpp @@ -0,0 +1,386 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// Uncomment next line to disable shared memory features if you do not have libXext +// (http://www.xfree86.org/current/mit-shm.html) +//#define X_NOSHMEM + +// Note that it may happen that the build environment supports the shared-memory extension +// (so there's no build-time reason to disable the relevant code by defining X_NOSHMEM), +// but that using shared memory still fails at run time. +// This situation will (ultimately) cause the error handler set by XSetErrorHandler() +// to be invoked with XErrorEvent::minor_code==X_ShmAttach. The code below tries to make +// such a determination at XShmAttach() time, which seems plausible, but unfortunately +// it has also been observed in a specific environment that the error may be reported +// at a later time instead, even after video::init_window() has returned. +// It is not clear whether this may happen in that way in any environment where it might +// depend on the kind of display, e.g., local vs. over "ssh -X", so #define'ing X_NOSHMEM +// may not always be the appropriate solution, therefore an environment variable +// has been introduced to disable shared memory at run time. +// A diagnostic has been added to advise the user about possible workarounds. +// X_ShmAttach macro was changed to 1 due to recent changes to X11/extensions/XShm.h header. + +#include "video.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef X_NOSHMEM +#include +#include +#include +#include + +static XShmSegmentInfo shmseginfo; +static Pixmap pixmap = 0; +static bool already_called_X_ShmAttach = false; +static bool already_advised_about_NOSHMEM_workarounds = false; +static const char* NOSHMEM_env_var_name = "TBB_EXAMPLES_X_NOSHMEM"; +#endif +static char *display_name = NULL; +static Display *dpy = NULL; +static Screen *scrn; +static Visual *vis; +static Colormap cmap; +static GC gc; +static Window win, rootW; +static int dispdepth = 0; +static XGCValues xgcv; +static XImage *ximage; +static int x_error = 0; +static int vidtype = 3; +int g_sizex, g_sizey; +static video *g_video = 0; +unsigned int *g_pImg = 0; +static int g_fps = 0; +struct timeval g_time; +static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; +Atom _XA_WM_DELETE_WINDOW = 0;// like in Xatom.h + +///////////////////////////////////////////// public methods of video class /////////////////////// + +video::video() +{ + assert(g_video == 0); + g_video = this; title = "Video"; calc_fps = running = false; updating = true; +} + +inline void mask2bits(unsigned int mask, unsigned int &save, depth_t &shift) +{ + save = mask; if(!mask) { shift = dispdepth/3; return; } + shift = 0; while(!(mask&1)) ++shift, mask >>= 1; + int bits = 0; while(mask&1) ++bits, mask >>= 1; + shift += bits - 8; +} + +int xerr_handler(Display* dpy_, XErrorEvent *error) +{ + x_error = error->error_code; + if(g_video) g_video->running = false; +#ifndef X_NOSHMEM + if (error->minor_code==1/*X_ShmAttach*/ && already_called_X_ShmAttach && !already_advised_about_NOSHMEM_workarounds) + { + char err[256]; XGetErrorText(dpy_, x_error, err, 255); + fprintf(stderr, "Warning: Can't attach shared memory to display: %s (%d)\n", err, x_error); + fprintf(stderr, "If you are seeing a black output window, try setting %s environment variable to 1" + " to disable shared memory extensions (0 to re-enable, other values undefined)," + " or rebuilding with X_NOSHMEM defined in " __FILE__ "\n", NOSHMEM_env_var_name); + already_advised_about_NOSHMEM_workarounds = true; + } +#else + (void) dpy_; // warning prevention +#endif + return 0; +} + +bool video::init_window(int xsize, int ysize) +{ + { //enclose local variables before fail label + g_sizex = xsize; g_sizey = ysize; + + // Open the display + if (!dpy) { + dpy = XOpenDisplay(display_name); + if (!dpy) { + fprintf(stderr, "Can't open X11 display %s\n", XDisplayName(display_name)); + goto fail; + } + } + int theScreen = DefaultScreen(dpy); + scrn = ScreenOfDisplay(dpy, theScreen); + dispdepth = DefaultDepth(dpy, theScreen); + XVisualInfo vinfo; + if (!( (dispdepth >= 15 && dispdepth <= 32 && XMatchVisualInfo(dpy, theScreen, dispdepth, TrueColor, &vinfo) ) + || XMatchVisualInfo(dpy, theScreen, 24, TrueColor, &vinfo) + || XMatchVisualInfo(dpy, theScreen, 32, TrueColor, &vinfo) + || XMatchVisualInfo(dpy, theScreen, 16, TrueColor, &vinfo) + || XMatchVisualInfo(dpy, theScreen, 15, TrueColor, &vinfo) + )) { + fprintf(stderr, "Display has no appropriate True Color visual\n"); + goto fail; + } + vis = vinfo.visual; + depth = dispdepth = vinfo.depth; + mask2bits(vinfo.red_mask, red_mask, red_shift); + mask2bits(vinfo.green_mask, green_mask, green_shift); + mask2bits(vinfo.blue_mask, blue_mask, blue_shift); + rootW = RootWindow(dpy, theScreen); + cmap = XCreateColormap(dpy, rootW, vis, AllocNone); + XSetWindowAttributes attrs; + attrs.backing_store = Always; + attrs.colormap = cmap; + attrs.event_mask = StructureNotifyMask|KeyPressMask|ButtonPressMask|ButtonReleaseMask; + attrs.background_pixel = BlackPixelOfScreen(scrn); + attrs.border_pixel = WhitePixelOfScreen(scrn); + win = XCreateWindow(dpy, rootW, + 0, 0, xsize, ysize, 2, + dispdepth, InputOutput, vis, + CWBackingStore | CWColormap | CWEventMask | + CWBackPixel | CWBorderPixel, + &attrs); + if(!win) { + fprintf(stderr, "Can't create the window\n"); + goto fail; + } + XSizeHints sh; + sh.flags = PSize | PMinSize | PMaxSize; + sh.width = sh.min_width = sh.max_width = xsize; + sh.height = sh.min_height = sh.max_height = ysize; + XSetStandardProperties( dpy, win, g_video->title, g_video->title, None, NULL, 0, &sh ); + _XA_WM_DELETE_WINDOW = XInternAtom(dpy, "WM_DELETE_WINDOW", false); + XSetWMProtocols(dpy, win, &_XA_WM_DELETE_WINDOW, 1); + gc = XCreateGC(dpy, win, 0L, &xgcv); + XMapRaised(dpy, win); + XFlush(dpy); +#ifdef X_FULLSYNC + XSynchronize(dpy, true); +#endif + XSetErrorHandler(xerr_handler); + + int imgbytes = xsize*ysize*(dispdepth<=16?2:4); + const char *vidstr; +#ifndef X_NOSHMEM + int major, minor, pixmaps; + if(XShmQueryExtension(dpy) && + XShmQueryVersion(dpy, &major, &minor, &pixmaps)) + { // Shared memory + if(NULL!=getenv(NOSHMEM_env_var_name) && 0!=strcmp("0",getenv(NOSHMEM_env_var_name))) { + goto generic; + } + shmseginfo.shmid = shmget(IPC_PRIVATE, imgbytes, IPC_CREAT|0777); + if(shmseginfo.shmid < 0) { + fprintf(stderr, "Warning: Can't get shared memory: %s\n", strerror(errno)); + goto generic; + } + g_pImg = (unsigned int*)(shmseginfo.shmaddr = (char*)shmat(shmseginfo.shmid, 0, 0)); + if(g_pImg == (unsigned int*)-1) { + fprintf(stderr, "Warning: Can't attach to shared memory: %s\n", strerror(errno)); + shmctl(shmseginfo.shmid, IPC_RMID, NULL); + goto generic; + } + shmseginfo.readOnly = false; + if(!XShmAttach(dpy, &shmseginfo) || x_error) { + char err[256]; XGetErrorText(dpy, x_error, err, 255); + fprintf(stderr, "Warning: Can't attach shared memory to display: %s (%d)\n", err, x_error); + shmdt(shmseginfo.shmaddr); shmctl(shmseginfo.shmid, IPC_RMID, NULL); + goto generic; + } + already_called_X_ShmAttach = true; + +#ifndef X_NOSHMPIX + if(pixmaps && XShmPixmapFormat(dpy) == ZPixmap) + { // Pixmaps + vidtype = 2; vidstr = "X11 shared memory pixmap"; + pixmap = XShmCreatePixmap(dpy, win, (char*)g_pImg, &shmseginfo, xsize, ysize, dispdepth); + XSetWindowBackgroundPixmap(dpy, win, pixmap); + } else +#endif//!X_NOSHMPIX + { // Standard + vidtype = 1; vidstr = "X11 shared memory"; + ximage = XShmCreateImage(dpy, vis, dispdepth, + ZPixmap, 0, &shmseginfo, xsize, ysize); + if(!ximage) { + fprintf(stderr, "Can't create the shared image\n"); + goto fail; + } + assert(ximage->bytes_per_line == xsize*(dispdepth<=16?2:4)); + ximage->data = shmseginfo.shmaddr; + } + } else +#endif + { +#ifndef X_NOSHMEM +generic: +#endif + vidtype = 0; vidstr = "generic X11"; + g_pImg = new unsigned int[imgbytes/sizeof(int)]; + ximage = XCreateImage(dpy, vis, dispdepth, ZPixmap, 0, (char*)g_pImg, xsize, ysize, 32, imgbytes/ysize); + if(!ximage) { + fprintf(stderr, "Can't create the image\n"); + goto fail; + } + } + if( ximage ) { + // Note: It may be more efficient to adopt the server's byte order + // and swap once per get_color() call instead of once per pixel. + const uint32_t probe = 0x03020100; + const bool big_endian = (((const char*)(&probe))[0]==0x03); + ximage->byte_order = big_endian ? MSBFirst : LSBFirst; + } + printf("Note: using %s with %s visual for %d-bit color depth\n", vidstr, vis==DefaultVisual(dpy, theScreen)?"default":"non-default", dispdepth); + running = true; + return true; + } // end of enclosing local variables +fail: + terminate(); init_console(); + return false; +} + +bool video::init_console() +{ + if(!g_pImg && g_sizex && g_sizey) { + dispdepth = 24; red_shift = 16; vidtype = 3; // fake video + g_pImg = new unsigned int[g_sizex*g_sizey]; + running = true; + } + return true; +} + +void video::terminate() +{ + running = false; + if(dpy) { + vidtype = 3; // stop video + if(threaded) { pthread_mutex_lock(&g_mutex); pthread_mutex_unlock(&g_mutex); } + if(ximage) { XDestroyImage(ximage); ximage = 0; g_pImg = 0; } // it frees g_pImg for vidtype == 0 +#ifndef X_NOSHMEM + if(pixmap) XFreePixmap(dpy, pixmap); + if(shmseginfo.shmaddr) { XShmDetach(dpy, &shmseginfo); shmdt(shmseginfo.shmaddr); g_pImg = 0; } + if(shmseginfo.shmid >= 0) shmctl(shmseginfo.shmid, IPC_RMID, NULL); +#endif + if(gc) XFreeGC(dpy, gc); + if(win) XDestroyWindow(dpy, win); + XCloseDisplay(dpy); dpy = 0; + } + if(g_pImg) { delete[] g_pImg; g_pImg = 0; } // if was allocated for console mode +} + +video::~video() +{ + if(g_video) terminate(); + g_video = 0; +} + +//! Do standard event loop +void video::main_loop() +{ + struct timezone tz; gettimeofday(&g_time, &tz); + on_process(); +} + +//! Check for pending events once +bool video::next_frame() +{ + if(!running) return false; + //! try acquire mutex if threaded code, returns on failure + if(vidtype == 3 || threaded && pthread_mutex_trylock(&g_mutex)) + return running; + //! Refresh screen picture + g_fps++; +#ifndef X_NOSHMPIX + if(vidtype == 2 && updating) XClearWindow(dpy, win); +#endif + while( XPending(dpy) ) { + XEvent report; XNextEvent(dpy, &report); + switch( report.type ) { + case ClientMessage: + if(report.xclient.format != 32 || report.xclient.data.l[0] != _XA_WM_DELETE_WINDOW) break; + case DestroyNotify: + running = false; + case KeyPress: + on_key( XLookupKeysym(&report.xkey, 0) ); break; + case ButtonPress: + on_mouse( report.xbutton.x, report.xbutton.y, report.xbutton.button ); break; + case ButtonRelease: + on_mouse( report.xbutton.x, report.xbutton.y, -report.xbutton.button ); break; + } + } + struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz); + double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0); + if(sec > 1) { + memcpy(&g_time, &now_time, sizeof(g_time)); + if(calc_fps) { + double fps = g_fps; g_fps = 0; + char buffer[256]; snprintf(buffer, 256, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps/sec)); + XStoreName(dpy, win, buffer); + } +#ifndef X_FULLSYNC + XSync(dpy, false); // It is often better then using XSynchronize(dpy, true) +#endif//X_FULLSYNC + } + if(threaded) pthread_mutex_unlock(&g_mutex); + return true; +} + +//! Change window title +void video::show_title() +{ + if(vidtype < 3) + XStoreName(dpy, win, title); +} + +drawing_area::drawing_area(int x, int y, int sizex, int sizey) + : base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), + pixel_depth(dispdepth), ptr32(g_pImg), start_x(x), start_y(y), size_x(sizex), size_y(sizey) +{ + assert(x < g_sizex); assert(y < g_sizey); + assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey); + + index = base_index; // current index +} + +void drawing_area::update() +{ + if(!g_video->updating) return; +#ifndef X_NOSHMEM + switch(vidtype) { + case 0: +#endif + pthread_mutex_lock(&g_mutex); + if(vidtype == 0) XPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y); + pthread_mutex_unlock(&g_mutex); +#ifndef X_NOSHMEM + break; + case 1: + pthread_mutex_lock(&g_mutex); + if(vidtype == 1) XShmPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y, false); + pthread_mutex_unlock(&g_mutex); + break; + /*case 2: make it in next_frame(); break;*/ + } +#endif +} diff --git a/examples/common/index.html b/examples/common/index.html new file mode 100644 index 0000000..e20d0ad --- /dev/null +++ b/examples/common/index.html @@ -0,0 +1,397 @@ + + + + + + Intel® Threading Building Blocks. Common source code for samples + + + + + +

+ This directory contains common code that is used in the Intel® Threading Building Blocks (Intel® TBB) samples. +
+ This code is not intended to be used directly. It is incorporated automatically by the examples that need it. +

+ +
+
Directories
+ +
+
+
gui +
+ GUI code for examples that have graphical user interfaces. Currently supports: +
    +
  • GDI+*, DirectDraw*, Direct2D* (Windows* systems) +
  • OpenGL* (macOS* systems) +
  • X window (Linux* or macOS* systems) +
+ See the examples that use the GUI + (stereo, + tachyon, + seismic, + fractal) + for more details. +
+
+
utility +
Common driver and utility code for examples. Currently provides: +
    +
  • class FastRandom - a random number generator that uses linear congruental method + (fast_random.h) +
  • class thread_number_range - a class to specify the numbers of threads an example should use + (utility.h) +
  • support for command line interface - class cli_argument_pack and function parse_cli_arguments + (utility.h) +
+
+
+
+
+
Common information
+ +
+
+
Number of threads
+

+ Most Intel TBB examples allow to specify n-of-threads, the set of thread numbers that should be used to run an example. +
Usually, it is a range of the form low[:high[:(+|*|#)S]], where low and optional high + are non-negative integers or 'auto' for the default choice, and optional step expression (+|*|#)S + specifies how thread numbers are chosen within the range: +

    +
  • With +/*, the previous number is incremented/multiplied by S. + E.g., expression '12:16:+1' means 12,13,14,15,16 threads, and '1:16:*2' means 1,2,4,8,16 threads. +
  • With #, S is the desired number of steps between any subsequent powers of 2; + it must be a power of 2 on its own, with most meaningful values being 2, 4, and 8. + For a given number of threads, the actual step value is computed as the quotient + of the nearest smaller power of 2 divided by the number of steps, but is at least 1. + E.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32 threads; + note the step doubling at 8 and 16 to keep 4 steps between powers of 2. +
+ A default value for the number of threads can be customized in an example. If not customized, it is '1:auto:#4'. + The 'auto' parameter is substituted with a value returned by a specified function, which typically is + tbb::task_scheduler_init::default_num_threads(). +

+
+
+ +
+ Up to parent directory +
+
+
Legal Information:
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + diff --git a/examples/common/toolset.props b/examples/common/toolset.props new file mode 100644 index 0000000..44388c6 --- /dev/null +++ b/examples/common/toolset.props @@ -0,0 +1,9 @@ + + + + Intel C++ Compiler 15.0 [Intel(R) System Studio] + Intel C++ Compiler XE 15.0 + Intel C++ Compiler 16.0 + true + + diff --git a/examples/common/utility/fast_random.h b/examples/common/utility/fast_random.h new file mode 100644 index 0000000..e4bc425 --- /dev/null +++ b/examples/common/utility/fast_random.h @@ -0,0 +1,82 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef FAST_RANDOM_H_ +#define FAST_RANDOM_H_ +namespace utility{ +//------------------------------------------------------------------------ +// FastRandom +//------------------------------------------------------------------------ + +namespace internal{ + size_t GetPrime ( size_t seed ); +} + +//! A fast random number generator. +/** Uses linear congruential method. */ +class FastRandom { + size_t x, a; +public: + //! Get a random number. + unsigned short get() { + return get(x); + } + //! Get a random number for the given seed; update the seed for next use. + unsigned short get( size_t& seed ) { + unsigned short r = (unsigned short)(seed>>16); + seed = seed*a+1; + return r; + } + //! Construct a random number generator. + FastRandom( size_t seed ) { + x = seed*internal::GetPrime(seed); + a = internal::GetPrime(x); + } +}; +} + +namespace utility { +namespace internal{ +//! Table of primes used by fast random-number generator (FastRandom). + static const unsigned 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 + }; + size_t GetPrime ( size_t seed ) { + return Primes[seed%(sizeof(Primes)/sizeof(Primes[0]))]; + } +} +} + +#endif /* FAST_RANDOM_H_ */ diff --git a/examples/common/utility/utility.h b/examples/common/utility/utility.h new file mode 100644 index 0000000..6f186f0 --- /dev/null +++ b/examples/common/utility/utility.h @@ -0,0 +1,526 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef UTILITY_H_ +#define UTILITY_H_ + +#if __TBB_MIC_OFFLOAD +#pragma offload_attribute (push,target(mic)) +#include +#include +#pragma offload_attribute (pop) +#endif // __TBB_MIC_OFFLOAD + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// TBB headers should not be used, as some examples may need to be built without TBB. + +namespace utility{ + namespace internal{ + +#if (_MSC_VER >= 1600 || __cplusplus >= 201103L || __GXX_EXPERIMENTAL_CXX0X__) \ + && (_CPPLIB_VER || _LIBCPP_VERSION || __GLIBCXX__ && _UNIQUE_PTR_H ) \ + && (!__INTEL_COMPILER || __INTEL_COMPILER >= 1200 ) + // std::unique_ptr is available, and compiler can use it + #define smart_ptr std::unique_ptr + using std::swap; +#else + #if __INTEL_COMPILER && __GXX_EXPERIMENTAL_CXX0X__ + // std::unique_ptr is unavailable, so suppress std::auto_prt<> deprecation warning + #pragma warning(disable: 1478) + #endif + #define smart_ptr std::auto_ptr + // in some C++ libraries, std::swap does not work with std::auto_ptr + template + void swap( std::auto_ptr& ptr1, std::auto_ptr& ptr2 ) { + std::auto_ptr tmp; tmp = ptr2; ptr2 = ptr1; ptr1 = tmp; + } +#endif + + //TODO: add tcs + template + dest_type& string_to(std::string const& s, dest_type& result){ + std::stringstream stream(s); + stream>>result; + if ((!stream)||(stream.fail())){ + throw std::invalid_argument("error converting string '"+std::string(s)+"'"); + } + return result; + } + + template + dest_type string_to(std::string const& s){ + dest_type result; + return string_to(s,result); + } + + template + struct is_bool { static bool value(){return false;}}; + template<> + struct is_bool { static bool value(){return true;}}; + + class type_base { + type_base& operator=(const type_base&); + public: + const std::string name; + const std::string description; + + type_base (std::string a_name, std::string a_description) : name(a_name), description(a_description) {} + virtual void parse_and_store(const std::string & s) = 0; + virtual std::string value() const = 0; + virtual smart_ptr clone() const = 0; + virtual ~type_base(){} + }; + template + class type_impl : public type_base { + private: + type_impl& operator=(const type_impl&); + typedef bool(*validating_function_type)(const type&); + private: + type & target; + validating_function_type validating_function; + public: + type_impl(std::string a_name, std::string a_description, type & a_target, validating_function_type a_validating_function = NULL) + : type_base (a_name,a_description), target(a_target),validating_function(a_validating_function) + {}; + void parse_and_store (const std::string & s) /*override*/ { + try{ + const bool is_bool = internal::is_bool::value(); + if (is_bool && s.empty()){ + //to avoid directly assigning true + //(as it will impose additional layer of indirection) + //so, simply pass it as string + internal::string_to("1",target); + }else { + internal::string_to(s,target); + } + }catch(std::invalid_argument& e){ + std::stringstream str; + str <<"'"< + static bool is_null_c_str(t&){return false;} + static bool is_null_c_str(char* s){return s==NULL;} + std::string value() const /*override*/ { + std::stringstream str; + if (!is_null_c_str(target)) + str< clone() const /*override*/ { + return smart_ptr(new type_impl(*this)); + } + }; + + class argument{ + private: + smart_ptr p_type; + bool matched_; + public: + argument(argument const& other) + : p_type(other.p_type.get() ? (other.p_type->clone()).release() : NULL) + ,matched_(other.matched_) + {} + argument& operator=(argument a){ + this->swap(a); + return *this; + } + void swap(argument& other){ + internal::swap(p_type, other.p_type); + std::swap(matched_,other.matched_); + } + template + argument(std::string a_name, std::string a_description, type& dest, bool(*a_validating_function)(const type&)= NULL) + :p_type(new type_impl(a_name,a_description,dest,a_validating_function)) + ,matched_(false) + {} + std::string value()const{ + return p_type->value(); + } + std::string name()const{ + return p_type->name; + } + std::string description() const{ + return p_type->description; + } + void parse_and_store(const std::string & s){ + p_type->parse_and_store(s); + matched_=true; + } + bool is_matched() const{return matched_;} + }; + } // namespace internal + + class cli_argument_pack{ + typedef std::map args_map_type; + typedef std::vector args_display_order_type; + typedef std::vector positional_arg_names_type; + private: + args_map_type args_map; + args_display_order_type args_display_order; + positional_arg_names_type positional_arg_names; + std::set bool_args_names; + private: + void add_arg(internal::argument const& a){ + std::pair result = args_map.insert(std::make_pair(a.name(),a)); + if (!result.second){ + throw std::invalid_argument("argument with name: '"+a.name()+"' already registered"); + } + args_display_order.push_back(a.name()); + } + public: + template + cli_argument_pack& arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){ + internal::argument a(name,description,dest,validate); + add_arg(a); + if (internal::is_bool::value()){ + bool_args_names.insert(name); + } + return *this; + } + + //Positional means that argument name can be omitted in actual CL + //only key to match values for parameters with + template + cli_argument_pack& positional_arg(type& dest,std::string const& name, std::string const& description, bool(*validate)(const type &)= NULL){ + internal::argument a(name,description,dest,validate); + add_arg(a); + if (internal::is_bool::value()){ + bool_args_names.insert(name); + } + positional_arg_names.push_back(name); + return *this; + } + + void parse(std::size_t argc, char const* argv[]){ + { + std::size_t current_positional_index=0; + for (std::size_t j=1;jis_matched()){ + throw std::invalid_argument(std::string("several values specified for: '")+pa->name()+"' argument"); + } + pa->parse_and_store(argument_value); + } + } + } + std::string usage_string(const std::string& binary_name)const{ + std::string command_line_params; + std::string summary_description; + + for (args_display_order_type::const_iterator it = args_display_order.begin();it!=args_display_order.end();++it){ + const bool is_bool = (0!=bool_args_names.count((*it))); + args_map_type::const_iterator argument_it = args_map.find(*it); + //TODO: probably use of smarter assert would help here + assert(argument_it!=args_map.end()/*&&"args_display_order and args_map are out of sync"*/); + if (argument_it==args_map.end()){ + throw std::logic_error("args_display_order and args_map are out of sync"); + } + const internal::argument & a = (*argument_it).second; + command_line_params +=" [" + a.name() + (is_bool ?"":"=value")+ "]"; + summary_description +=" " + a.name() + " - " + a.description() +" ("+a.value() +")" + "\n"; + } + + std::string positional_arg_cl; + for (positional_arg_names_type::const_iterator it = positional_arg_names.begin();it!=positional_arg_names.end();++it){ + positional_arg_cl +=" ["+(*it); + } + for (std::size_t i=0;i + bool is_power_of_2( T val ) { + size_t intval = size_t(val); + return (intval&(intval-1)) == size_t(0); + } + int step_function_plus(int previous, double step){ + return static_cast(previous+step); + } + int step_function_multiply(int previous, double multiply){ + return static_cast(previous*multiply); + } + // "Power-of-2 ladder": nsteps is the desired number of steps between any subsequent powers of 2. + // The actual step is the quotient of the nearest smaller power of 2 divided by that number (but at least 1). + // E.g., '1:32:#4' means 1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32 + int step_function_power2_ladder(int previous, double nsteps){ + int steps = int(nsteps); + assert( is_power_of_2(steps) ); // must be a power of 2 + // The actual step is 1 until the value is twice as big as nsteps + if( previous < 2*steps ) + return previous+1; + // calculate the previous power of 2 + int prev_power2 = previous/2; // start with half the given value + int rshift = 1; // and with the shift of 1; + while( int shifted = prev_power2>>rshift ) { // shift the value right; while the result is non-zero, + prev_power2 |= shifted; // add the bits set in 'shifted'; + rshift <<= 1; // double the shift, as twice as many top bits are set; + } // repeat. + ++prev_power2; // all low bits set; now it's just one less than the desired power of 2 + assert( is_power_of_2(prev_power2) ); + assert( (prev_power2<=previous)&&(2*prev_power2>previous) ); + // The actual step value is the previous power of 2 divided by steps + return previous + (prev_power2/steps); + } + typedef int (* step_function_ptr_type)(int,double); + + struct step_function_descriptor { + char mnemonic; + step_function_ptr_type function; + public: + step_function_descriptor(char a_mnemonic, step_function_ptr_type a_function) : mnemonic(a_mnemonic), function(a_function) {} + private: + void operator=(step_function_descriptor const&); + }; + step_function_descriptor step_function_descriptors[] = { + step_function_descriptor('*',step_function_multiply), + step_function_descriptor('+',step_function_plus), + step_function_descriptor('#',step_function_power2_ladder) + }; + + template + inline size_t array_length(const T(&)[N]) + { + return N; + } + + struct thread_range_step { + step_function_ptr_type step_function; + double step_function_argument; + + thread_range_step ( step_function_ptr_type step_function_, double step_function_argument_) + :step_function(step_function_),step_function_argument(step_function_argument_) + { + if (!step_function_) + throw std::invalid_argument("step_function for thread range step should not be NULL"); + } + int operator()(int previous)const { + assert(0<=previous); // test 0<=first and loop discipline + const int ret = step_function(previous,step_function_argument); + assert(previous>(std::istream& input_stream, thread_range_step& step){ + char function_char; + double function_argument; + input_stream >> function_char >> function_argument; + size_t i = 0; + while ((i= array_length(step_function_descriptors)){ + throw std::invalid_argument("unknown step function mnemonic: "+std::string(1,function_char)); + } else if ((function_char=='#') && !is_power_of_2(function_argument)) { + throw std::invalid_argument("the argument of # should be a power of 2"); + } + step.step_function = step_function_descriptors[i].function; + step.step_function_argument = function_argument; + return input_stream; + } + }; + } // namespace internal + + struct thread_number_range{ + int (*auto_number_of_threads)(); + int first; // 0<=first (0 can be used as a special value) + int last; // first<=last + + internal::thread_range_step step; + + thread_number_range( int (*auto_number_of_threads_)(),int low_=1, int high_=-1 + , internal::thread_range_step step_ = internal::thread_range_step(internal::step_function_power2_ladder,4) + ) + : auto_number_of_threads(auto_number_of_threads_), first(low_), last((high_>-1) ? high_ : auto_number_of_threads_()) + ,step(step_) + { + if (first<0) { + throw std::invalid_argument("negative value not allowed"); + } + if (first>last) { + throw std::invalid_argument("decreasing sequence not allowed"); + } + } + friend std::istream& operator>>(std::istream& i, thread_number_range& range){ + try{ + std::string s; + i>>s; + struct string_to_number_of_threads{ + int auto_value; + string_to_number_of_threads(int auto_value_):auto_value(auto_value_){} + int operator()(const std::string & value)const{ + return (value=="auto")? auto_value : internal::string_to(value); + } + }; + string_to_number_of_threads string_to_number_of_threads(range.auto_number_of_threads()); + int low, high; + std::size_t colon = s.find(':'); + if ( colon == std::string::npos ){ + low = high = string_to_number_of_threads(s); + } else { + //it is a range + std::size_t second_colon = s.find(':',colon+1); + + low = string_to_number_of_threads(std::string(s, 0, colon)); //not copying the colon + high = string_to_number_of_threads(std::string(s, colon+1, second_colon - (colon+1))); //not copying the colons + if (second_colon != std::string::npos){ + internal::string_to(std::string(s,second_colon + 1),range.step); + } + } + range = thread_number_range(range.auto_number_of_threads,low,high,range.step); + }catch(std::invalid_argument&){ + i.setstate(std::ios::failbit); + throw; + } + return i; + } + friend std::ostream& operator<<(std::ostream& o, thread_number_range const& range){ + using namespace internal; + size_t i = 0; + for (; i < array_length(step_function_descriptors) && step_function_descriptors[i].function != range.step.step_function; ++i ) {} + if (i >= array_length(step_function_descriptors)){ + throw std::invalid_argument("unknown step function for thread range"); + } + o<(argv), cli_pack); + } +} + +#endif /* UTILITY_H_ */ diff --git a/examples/concurrent_hash_map/count_strings/Makefile b/examples/concurrent_hash_map/count_strings/Makefile new file mode 100644 index 0000000..6553233 --- /dev/null +++ b/examples/concurrent_hash_map/count_strings/Makefile @@ -0,0 +1,59 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=count_strings +ARGS= +PERF_RUN_ARGS=auto 10000000 silent + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: *.cpp + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) + +debug: *.cpp + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) + +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) + diff --git a/examples/concurrent_hash_map/count_strings/Makefile.windows b/examples/concurrent_hash_map/count_strings/Makefile.windows new file mode 100644 index 0000000..3bb0b5f --- /dev/null +++ b/examples/concurrent_hash_map/count_strings/Makefile.windows @@ -0,0 +1,51 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=Count_Strings +ARGS= +PERF_RUN_ARGS=auto 10000000 silent + +# The C++ compiler options + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test +release: compiler_check + $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: compiler_check + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +compiler_check: + @echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + @cmd.exe /C del compiler_test +perf_build: release +perf_run: + $(PROG) $(PERF_RUN_ARGS) + diff --git a/examples/concurrent_hash_map/count_strings/count_strings.cpp b/examples/concurrent_hash_map/count_strings/count_strings.cpp new file mode 100644 index 0000000..9ce1000 --- /dev/null +++ b/examples/concurrent_hash_map/count_strings/count_strings.cpp @@ -0,0 +1,235 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// Workaround for ICC 11.0 not finding __sync_fetch_and_add_4 on some of the Linux platforms. +#if __linux__ && defined(__INTEL_COMPILER) +#define __sync_fetch_and_add(ptr,addend) _InterlockedExchangeAdd(const_cast(reinterpret_cast(ptr)), addend) +#endif +#include +#include +#include +#include +#include +#include "tbb/concurrent_hash_map.h" +#include "tbb/blocked_range.h" +#include "tbb/parallel_for.h" +#include "tbb/tick_count.h" +#include "tbb/task_scheduler_init.h" +#include "tbb/tbb_allocator.h" +#include "../../common/utility/utility.h" + + +//! String type with scalable allocator. +/** On platforms with non-scalable default memory allocators, the example scales + better if the string allocator is changed to tbb::tbb_allocator. */ +typedef std::basic_string,tbb::tbb_allocator > MyString; + +using namespace tbb; +using namespace std; + +//! Set to true to counts. +static bool verbose = false; +static bool silent = false; +//! Problem size +long N = 1000000; +const int size_factor = 2; + +//! A concurrent hash table that maps strings to ints. +typedef concurrent_hash_map StringTable; + +//! Function object for counting occurrences of strings. +struct Tally { + StringTable& table; + Tally( StringTable& table_ ) : table(table_) {} + void operator()( const blocked_range range ) const { + for( MyString* p=range.begin(); p!=range.end(); ++p ) { + StringTable::accessor a; + table.insert( a, *p ); + a->second += 1; + } + } +}; + +static MyString* Data; + +static void CountOccurrences(int nthreads) { + StringTable table; + + tick_count t0 = tick_count::now(); + parallel_for( blocked_range( Data, Data+N, 1000 ), Tally(table) ); + tick_count t1 = tick_count::now(); + + int n = 0; + for( StringTable::iterator i=table.begin(); i!=table.end(); ++i ) { + if( verbose && nthreads ) + printf("%s %d\n",i->first.c_str(),i->second); + n += i->second; + } + + if ( !silent ) printf("total = %d unique = %u time = %g\n", n, unsigned(table.size()), (t1-t0).seconds()); +} + +/// Generator of random words + +struct Sound { + const char *chars; + int rates[3];// beginning, middle, ending +}; +Sound Vowels[] = { + {"e", {445,6220,1762}}, {"a", {704,5262,514}}, {"i", {402,5224,162}}, {"o", {248,3726,191}}, + {"u", {155,1669,23}}, {"y", {4,400,989}}, {"io", {5,512,18}}, {"ia", {1,329,111}}, + {"ea", {21,370,16}}, {"ou", {32,298,4}}, {"ie", {0,177,140}}, {"ee", {2,183,57}}, + {"ai", {17,206,7}}, {"oo", {1,215,7}}, {"au", {40,111,2}}, {"ua", {0,102,4}}, + {"ui", {0,104,1}}, {"ei", {6,94,3}}, {"ue", {0,67,28}}, {"ay", {1,42,52}}, + {"ey", {1,14,80}}, {"oa", {5,84,3}}, {"oi", {2,81,1}}, {"eo", {1,71,5}}, + {"iou", {0,61,0}}, {"oe", {2,46,9}}, {"eu", {12,43,0}}, {"iu", {0,45,0}}, + {"ya", {12,19,5}}, {"ae", {7,18,10}}, {"oy", {0,10,13}}, {"ye", {8,7,7}}, + {"ion", {0,0,20}}, {"ing", {0,0,20}}, {"ium", {0,0,10}}, {"er", {0,0,20}} +}; +Sound Consonants[] = { + {"r", {483,1414,1110}}, {"n", {312,1548,1114}}, {"t", {363,1653,251}}, {"l", {424,1341,489}}, + {"c", {734,735,260}}, {"m", {732,785,161}}, {"d", {558,612,389}}, {"s", {574,570,405}}, + {"p", {519,361,98}}, {"b", {528,356,30}}, {"v", {197,598,16}}, {"ss", {3,191,567}}, + {"g", {285,430,42}}, {"st", {142,323,180}}, {"h", {470,89,30}}, {"nt", {0,350,231}}, + {"ng", {0,117,442}}, {"f", {319,194,19}}, {"ll", {1,414,83}}, {"w", {249,131,64}}, + {"k", {154,179,47}}, {"nd", {0,279,92}}, {"bl", {62,235,0}}, {"z", {35,223,16}}, + {"sh", {112,69,79}}, {"ch", {139,95,25}}, {"th", {70,143,39}}, {"tt", {0,219,19}}, + {"tr", {131,104,0}}, {"pr", {186,41,0}}, {"nc", {0,223,2}}, {"j", {184,32,1}}, + {"nn", {0,188,20}}, {"rt", {0,148,51}}, {"ct", {0,160,29}}, {"rr", {0,182,3}}, + {"gr", {98,87,0}}, {"ck", {0,92,86}}, {"rd", {0,81,88}}, {"x", {8,102,48}}, + {"ph", {47,101,10}}, {"br", {115,43,0}}, {"cr", {92,60,0}}, {"rm", {0,131,18}}, + {"ns", {0,124,18}}, {"sp", {81,55,4}}, {"sm", {25,29,85}}, {"sc", {53,83,1}}, + {"rn", {0,100,30}}, {"cl", {78,42,0}}, {"mm", {0,116,0}}, {"pp", {0,114,2}}, + {"mp", {0,99,14}}, {"rs", {0,96,16}}, /*{"q", {52,57,1}},*/ {"rl", {0,97,7}}, + {"rg", {0,81,15}}, {"pl", {56,39,0}}, {"sn", {32,62,1}}, {"str", {38,56,0}}, + {"dr", {47,44,0}}, {"fl", {77,13,1}}, {"fr", {77,11,0}}, {"ld", {0,47,38}}, + {"ff", {0,62,20}}, {"lt", {0,61,19}}, {"rb", {0,75,4}}, {"mb", {0,72,7}}, + {"rc", {0,76,1}}, {"gg", {0,74,1}}, {"pt", {1,56,10}}, {"bb", {0,64,1}}, + {"sl", {48,17,0}}, {"dd", {0,59,2}}, {"gn", {3,50,4}}, {"rk", {0,30,28}}, + {"nk", {0,35,20}}, {"gl", {40,14,0}}, {"wh", {45,6,0}}, {"ntr", {0,50,0}}, + {"rv", {0,47,1}}, {"ght", {0,19,29}}, {"sk", {23,17,5}}, {"nf", {0,46,0}}, + {"cc", {0,45,0}}, {"ln", {0,41,0}}, {"sw", {36,4,0}}, {"rp", {0,36,4}}, + {"dn", {0,38,0}}, {"ps", {14,19,5}}, {"nv", {0,38,0}}, {"tch", {0,21,16}}, + {"nch", {0,26,11}}, {"lv", {0,35,0}}, {"wn", {0,14,21}}, {"rf", {0,32,3}}, + {"lm", {0,30,5}}, {"dg", {0,34,0}}, {"ft", {0,18,15}}, {"scr", {23,10,0}}, + {"rch", {0,24,6}}, {"rth", {0,23,7}}, {"rh", {13,15,0}}, {"mpl", {0,29,0}}, + {"cs", {0,1,27}}, {"gh", {4,10,13}}, {"ls", {0,23,3}}, {"ndr", {0,25,0}}, + {"tl", {0,23,1}}, {"ngl", {0,25,0}}, {"lk", {0,15,9}}, {"rw", {0,23,0}}, + {"lb", {0,23,1}}, {"tw", {15,8,0}}, /*{"sq", {15,8,0}},*/ {"chr", {18,4,0}}, + {"dl", {0,23,0}}, {"ctr", {0,22,0}}, {"nst", {0,21,0}}, {"lc", {0,22,0}}, + {"sch", {16,4,0}}, {"ths", {0,1,20}}, {"nl", {0,21,0}}, {"lf", {0,15,6}}, + {"ssn", {0,20,0}}, {"xt", {0,18,1}}, {"xp", {0,20,0}}, {"rst", {0,15,5}}, + {"nh", {0,19,0}}, {"wr", {14,5,0}} +}; +const int VowelsNumber = sizeof(Vowels)/sizeof(Sound); +const int ConsonantsNumber = sizeof(Consonants)/sizeof(Sound); +int VowelsRatesSum[3] = {0,0,0}, ConsonantsRatesSum[3] = {0,0,0}; + +int CountRateSum(Sound sounds[], const int num, const int part) +{ + int sum = 0; + for(int i = 0; i < num; i++) + sum += sounds[i].rates[part]; + return sum; +} + +const char *GetLetters(int type, const int part) +{ + Sound *sounds; int rate, i = 0; + if(type & 1) + sounds = Vowels, rate = rand() % VowelsRatesSum[part]; + else + sounds = Consonants, rate = rand() % ConsonantsRatesSum[part]; + do { + rate -= sounds[i++].rates[part]; + } while(rate > 0); + return sounds[--i].chars; +} + +static void CreateData() { + for(int i = 0; i < 3; i++) { + ConsonantsRatesSum[i] = CountRateSum(Consonants, ConsonantsNumber, i); + VowelsRatesSum[i] = CountRateSum(Vowels, VowelsNumber, i); + } + for( int i=0; i + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + count_strings + {3AA40693-F93D-4D4B-B32E-068F511A252C} + count_strings + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/concurrent_hash_map/count_strings/readme.html b/examples/concurrent_hash_map/count_strings/readme.html new file mode 100644 index 0000000..e6352ac --- /dev/null +++ b/examples/concurrent_hash_map/count_strings/readme.html @@ -0,0 +1,401 @@ + + + + + + Intel® Threading Building Blocks. Count_strings sample + + + + + +

+ The example counts the number of unique words in a text. +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
count_strings.cpp +
Source code for the example. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

+ General build directions can be found here. +

+
+
+ +
+
Usage
+ +
+
+
count_strings -h +
Prints the help for command line options +
count_strings [n-of-threads=value] [n-of-strings=value] [verbose] [silent] +
count_strings [n-of-threads [n-of-strings]] [verbose] [silent] +
n-of-threads is the number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.
+ n-of-strings is a number of strings.
+ verbose - enables printing of extra information during execution.
+ silent - no output except elapsed time.
+
To run a short version of this example, e.g., for use with Intel® Parallel Inspector: +
Build a debug version of the example. +
Run it with a small number of strings and the desired number of threads, e.g., count_strings 2 10000. +
+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1b90bf7 --- /dev/null +++ b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj @@ -0,0 +1,305 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A1F593A60B8F042A00073279 /* count_strings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* count_strings.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 8DD76F6C0486A84900D96B5E /* count_strings */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = count_strings; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593A50B8F042A00073279 /* count_strings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = count_strings.cpp; path = ../count_strings.cpp; sourceTree = SOURCE_ROOT; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* count_strings */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = count_strings; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + A1F593A50B8F042A00073279 /* count_strings.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* count_strings */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* count_strings */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "count_strings" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = count_strings; + productInstallPath = "$(HOME)/bin"; + productName = count_strings; + productReference = 8DD76F6C0486A84900D96B5E /* count_strings */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* count_strings */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* count_strings */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593A60B8F042A00073279 /* count_strings.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = count_strings; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = count_strings; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = count_strings; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = count_strings; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "count_strings" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/concurrent_hash_map/index.html b/examples/concurrent_hash_map/index.html new file mode 100644 index 0000000..e4d77d8 --- /dev/null +++ b/examples/concurrent_hash_map/index.html @@ -0,0 +1,344 @@ + + + + + + Intel® Threading Building Blocks. Samples on concurrent_hash_map container + + + + + +

+ This directory has examples of the concurrent_hash_map container. +

+ +
+
Directories
+ +
+
+
count_strings +
Concurrently inserts strings into a concurrent_hash_map container. +
+
+
+
+ Up to parent directory +
+
+
Legal Information:
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/concurrent_priority_queue/index.html b/examples/concurrent_priority_queue/index.html new file mode 100644 index 0000000..0525b10 --- /dev/null +++ b/examples/concurrent_priority_queue/index.html @@ -0,0 +1,344 @@ + + + + + + Intel® Threading Building Blocks. Samples on concurrent_priority_queue container + + + + + +

+ This directory has examples of the concurrent_priority_queue container. +

+ +
+
Directories
+ +
+
+
shortpath +
Solves the single source shortest path problem using a concurrent_priority_queue container. +
+
+
+
+ Up to parent directory +
+
+
Legal Information:
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/concurrent_priority_queue/shortpath/Makefile b/examples/concurrent_priority_queue/shortpath/Makefile new file mode 100644 index 0000000..1b2c262 --- /dev/null +++ b/examples/concurrent_priority_queue/shortpath/Makefile @@ -0,0 +1,61 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=shortpath +ARGS=4 N=1000 start=0 end=999 verbose +PERF_RUN_ARGS=auto N=1000 start=0 end=99 silent + +# icpc by default +ifneq (,$(shell which icc 2>/dev/null)) + CXX=icpc +endif + +# autodetect C++11 support +include ../../common/examples-common.inc + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: *.cpp + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) $(CXX0XFLAGS) + +debug: *.cpp + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) $(CXX0XFLAGS) + +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) diff --git a/examples/concurrent_priority_queue/shortpath/Makefile.windows b/examples/concurrent_priority_queue/shortpath/Makefile.windows new file mode 100644 index 0000000..f02416e --- /dev/null +++ b/examples/concurrent_priority_queue/shortpath/Makefile.windows @@ -0,0 +1,50 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=shortpath +ARGS=4 N=1000 start=0 end=999 verbose +PERF_RUN_ARGS=auto N=1000 start=0 end=99 silent + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test +release: + $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +compiler_check: + @$(CXX) >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + +perf_build: release + +perf_run: + $(PROG) $(PERF_RUN_ARGS) diff --git a/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln new file mode 100644 index 0000000..c4c6ba2 --- /dev/null +++ b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shortpath", "shortpath.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj new file mode 100644 index 0000000..22aed9c --- /dev/null +++ b/examples/concurrent_priority_queue/shortpath/msvs/shortpath.vcxproj @@ -0,0 +1,201 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + shortpath + {3AA40693-F93D-4D4B-B32E-068F511A252A} + shortpath + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/concurrent_priority_queue/shortpath/readme.html b/examples/concurrent_priority_queue/shortpath/readme.html new file mode 100644 index 0000000..7f745b2 --- /dev/null +++ b/examples/concurrent_priority_queue/shortpath/readme.html @@ -0,0 +1,427 @@ + + + + + + Intel® Threading Building Blocks. Shortpath sample + + + + + +

+ This directory contains a simple example that solves the single source + shortest path problem. +

+ It is parameterized by N, a number of nodes, and a start and end node in [0..N). + A graph is generated with N nodes and some random number of connections between those nodes. + A parallel algorithm based on A* is used to find the shortest path. +

+ This algorithm varies from serial A* in that it needs to add nodes back to + the open set when the g estimate (shortest path from start to the node) is improved, + even if the node has already been "visited". This is because nodes are added and removed + from the open-set in parallel, resulting in some less optimal paths being explored. + The open-set is implemented with the concurrent_priority_queue. +

+ Note that since we re-visit nodes, the f estimate (on which the priority queue is sorted) + is not technically needed, so we could use this same parallel algorithm with just a concurrent_queue. + However, keeping the f estimate and using concurrent_priority_queue + results in much better performance. +

+ Silent mode prints run time only, + regular mode prints the shortest path length, + and verbose mode prints out the shortest path. +

+ The generated graph follows a pattern in which the closer two pairs of + node ids are together, the fewer hops there are in a typical path + between those nodes. So, for example, the path between 5 and 7 likely + has few hops whereas 14 to 78 has more and 0 to 9999 has even more, + etc. +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
shortpath.cpp +
Driver. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel® C++ Compiler (Windows* systems only). +
xcode +
Contains macOS* Xcode* workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+
Usage
+ +
+
+
shortpath -h +
Prints the help for command line options +
shortpath [#threads=value] [verbose] [silent] [N=value] [start=value] [end=value] [#threads] +
#threads is the number of threads to use; a range of the form low[:high] where low and optional high are non-negative integers, or 'auto' for the TBB default.
+ verbose print full path to screen
+ silent limits output to timing info; overrides verbose
+ N number of nodes in graph
+ start node to start path at
+ end node to end path at
+
To run a short version of this example, e.g., for use with Intel® Parallel Inspector: +
Build a debug version of the example + (see the build instructions). +
Run it with a small problem size and the desired number of threads, e.g., shortpath 4 N=20 start=0 end=19. +
+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/concurrent_priority_queue/shortpath/shortpath.cpp b/examples/concurrent_priority_queue/shortpath/shortpath.cpp new file mode 100644 index 0000000..5c436b8 --- /dev/null +++ b/examples/concurrent_priority_queue/shortpath/shortpath.cpp @@ -0,0 +1,369 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include +#include +#include + +#include "tbb/atomic.h" +#include "tbb/tick_count.h" +#include "tbb/task_scheduler_init.h" +#include "tbb/task_group.h" +#include "tbb/concurrent_priority_queue.h" +#include "tbb/spin_mutex.h" +#include "tbb/parallel_for.h" +#include "tbb/blocked_range.h" +#include "../../common/utility/utility.h" +#include "../../common/utility/fast_random.h" + +#if defined(_MSC_VER) && defined(_Wp64) + // Workaround for overzealous compiler warnings in /Wp64 mode + #pragma warning (disable: 4267) +#endif /* _MSC_VER && _Wp64 */ + +using namespace std; +using namespace tbb; + +struct point { + double x, y; + point() {} + point(double _x, double _y) : x(_x), y(_y) {} + point(const point& p) : x(p.x), y(p.y) {} +}; + +double get_distance(const point& p1, const point& p2) { + double xdiff=p1.x-p2.x, ydiff=p1.y-p2.y; + return sqrt(xdiff*xdiff + ydiff*ydiff); +} + +// generates random points on 2D plane within a box of maxsize width & height +point generate_random_point(utility::FastRandom& mr) { + const size_t maxsize=500; + double x = (double)(mr.get() % maxsize); + double y = (double)(mr.get() % maxsize); + return point(x,y); +} + +// weighted toss makes closer nodes (in the point vector) heavily connected +bool die_toss(size_t a, size_t b, utility::FastRandom& mr) { + int node_diff = std::abs((int)(a-b)); + // near nodes + if (node_diff < 16) return true; + // mid nodes + if (node_diff < 64) return ((int)mr.get() % 8 == 0); + // far nodes + if (node_diff < 512) return ((int)mr.get() % 16 == 0); + return false; +} + +typedef vector point_set; +typedef size_t vertex_id; +typedef std::pair vertex_rec; +typedef vector > edge_set; + +bool verbose = false; // prints bin details and other diagnostics to screen +bool silent = false; // suppress all output except for time +size_t N = 1000; // number of vertices +size_t src = 0; // start of path +size_t dst = N-1; // end of path +double INF=100000.0; // infinity +size_t grainsize = 16; // number of vertices per task on average +size_t max_spawn; // max tasks to spawn +tbb::atomic num_spawn; // number of active tasks + +point_set vertices; // vertices +edge_set edges; // edges +vector predecessor; // for recreating path from src to dst + +vector f_distance; // estimated distances at particular vertex +vector g_distance; // current shortest distances from src vertex +spin_mutex *locks; // a lock for each vertex +task_group *sp_group; // task group for tasks executing sub-problems + +class compare_f { +public: + bool operator()(const vertex_rec& u, const vertex_rec& v) const { + return u.second>v.second; + } +}; + +concurrent_priority_queue open_set; // tentative vertices + +void shortpath_helper(); + +#if !__TBB_CPP11_LAMBDAS_PRESENT +class shortpath_helper_functor { +public: + shortpath_helper_functor() {}; + void operator() () const { shortpath_helper(); } +}; +#endif + +void shortpath() { + sp_group = new task_group; + g_distance[src] = 0.0; // src's distance from src is zero + f_distance[src] = get_distance(vertices[src], vertices[dst]); // estimate distance from src to dst + open_set.push(make_pair(src,f_distance[src])); // push src into open_set +#if __TBB_CPP11_LAMBDAS_PRESENT + sp_group->run([](){ shortpath_helper(); }); +#else + sp_group->run( shortpath_helper_functor() ); +#endif + sp_group->wait(); + delete sp_group; +} + +void shortpath_helper() { + vertex_rec u_rec; + while (open_set.try_pop(u_rec)) { + vertex_id u = u_rec.first; + if (u==dst) continue; + double f = u_rec.second; + double old_g_u = 0.0; + { + spin_mutex::scoped_lock l(locks[u]); + if (f > f_distance[u]) continue; // prune search space + old_g_u = g_distance[u]; + } + for (size_t i=0; irun([]{ shortpath_helper(); }); +#else + sp_group->run( shortpath_helper_functor() ); +#endif + } + else --num_spawn; + } + } + } + --num_spawn; +} + +void make_path(vertex_id src, vertex_id dst, vector& path) { + vertex_id at = predecessor[dst]; + if (at == N) path.push_back(src); + else if (at == src) { path.push_back(src); path.push_back(dst); } + else { make_path(src, at, path); path.push_back(dst); } +} + +void print_path() { + vector path; + double path_length=0.0; + make_path(src, dst, path); + if (verbose) printf("\n "); + for (size_t i=0; i", (int)path[i]); + else printf("(%4d)\n", (int)path[i]); + } + } + if (verbose) printf("Total distance = %5.1f\n", path_length); + else if (!silent) printf(" %5.1f\n", path_length); +} + +int get_default_num_threads() { + static int threads = 0; + if (threads == 0) + threads = tbb::task_scheduler_init::default_num_threads(); + return threads; +} + +#if !__TBB_CPP11_LAMBDAS_PRESENT +class gen_vertices { +public: + gen_vertices() {} + void operator() (blocked_range& r) const { + utility::FastRandom my_random((unsigned int)r.begin()); + for (size_t i=r.begin(); i!=r.end(); ++i) { + vertices[i] = generate_random_point(my_random); + } + } +}; + +class gen_edges { +public: + gen_edges() {} + void operator() (blocked_range& r) const { + utility::FastRandom my_random((unsigned int)r.begin()); + for (size_t i=r.begin(); i!=r.end(); ++i) { + for (size_t j=0; j& r) const { + for (size_t i=r.begin(); i!=r.end(); ++i) { + f_distance[i] = g_distance[i] = INF; + predecessor[i] = N; + } + } +}; +#endif + +void InitializeGraph() { + task_scheduler_init init(get_default_num_threads()); + vertices.resize(N); + edges.resize(N); + predecessor.resize(N); + g_distance.resize(N); + f_distance.resize(N); + locks = new spin_mutex[N]; + if (verbose) printf("Generating vertices...\n"); +#if __TBB_CPP11_LAMBDAS_PRESENT + parallel_for(blocked_range(0,N,64), + [&](blocked_range& r) { + utility::FastRandom my_random(r.begin()); + for (size_t i=r.begin(); i!=r.end(); ++i) { + vertices[i] = generate_random_point(my_random); + } + }, simple_partitioner()); +#else + parallel_for(blocked_range(0,N,64), gen_vertices(), simple_partitioner()); +#endif + if (verbose) printf("Generating edges...\n"); +#if __TBB_CPP11_LAMBDAS_PRESENT + parallel_for(blocked_range(0,N,64), + [&](blocked_range& r) { + utility::FastRandom my_random(r.begin()); + for (size_t i=r.begin(); i!=r.end(); ++i) { + for (size_t j=0; j(0,N,64), gen_edges(), simple_partitioner()); +#endif + for (size_t i=0; i(0,N), + [&](blocked_range& r) { + for (size_t i=r.begin(); i!=r.end(); ++i) { + f_distance[i] = g_distance[i] = INF; + predecessor[i] = N; + } + }); +#else + parallel_for(blocked_range(0,N), reset_vertices()); +#endif +} + +int main(int argc, char *argv[]) { + try { + utility::thread_number_range threads(get_default_num_threads); + utility::parse_cli_arguments(argc, argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + .positional_arg(threads,"#threads",utility::thread_number_range_desc) + .arg(verbose,"verbose"," print diagnostic output to screen") + .arg(silent,"silent"," limits output to timing info; overrides verbose") + .arg(N,"N"," number of vertices") + .arg(src,"start"," start of path") + .arg(dst,"end"," end of path") + ); + if (silent) verbose = false; // make silent override verbose + else + printf("shortpath will run with %d vertices to find shortest path between vertices" + " %d and %d using %d:%d threads.\n", + (int)N, (int)src, (int)dst, (int)threads.first, (int)threads.last); + + if (dst >= N) { + if (verbose) + printf("end value %d is invalid for %d vertices; correcting to %d\n", (int)dst, (int)N, (int)N-1); + dst = N-1; + } + + num_spawn = 0; + max_spawn = N/grainsize; + tick_count t0, t1; + InitializeGraph(); + for (int n_thr=threads.first; n_thr<=threads.last; n_thr=threads.step(n_thr)) { + ResetGraph(); + task_scheduler_init init(n_thr); + t0 = tick_count::now(); + shortpath(); + t1 = tick_count::now(); + if (!silent) { + if (predecessor[dst] != N) { + printf("%d threads: [%6.6f] The shortest path from vertex %d to vertex %d is:", + (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst); + print_path(); + } + else { + printf("%d threads: [%6.6f] There is no path from vertex %d to vertex %d\n", + (int)n_thr, (t1-t0).seconds(), (int)src, (int)dst); + } + } else + utility::report_elapsed_time((t1-t0).seconds()); + } + ReleaseGraph(); + return 0; + } catch(std::exception& e) { + cerr<<"error occurred. error text is :\"" </dev/null)) +CXX=icc +endif # which icc + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: *.cpp + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) + +debug: *.cpp + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) + +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) diff --git a/examples/graph/binpack/Makefile.windows b/examples/graph/binpack/Makefile.windows new file mode 100644 index 0000000..36beb1a --- /dev/null +++ b/examples/graph/binpack/Makefile.windows @@ -0,0 +1,50 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=binpack +ARGS= 4 N=1000 +PERF_RUN_ARGS=auto N=1000 silent + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test +release: + $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +compiler_check: + @$(CXX) >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + +perf_build: release + +perf_run: + $(PROG) $(PERF_RUN_ARGS) diff --git a/examples/graph/binpack/binpack.cpp b/examples/graph/binpack/binpack.cpp new file mode 100644 index 0000000..fbc7fad --- /dev/null +++ b/examples/graph/binpack/binpack.cpp @@ -0,0 +1,300 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + + +/* Bin-packing algorithm that attempts to use minimal number of bins B of + size V to contain N items of varying sizes. */ + +#include +#include +#include +#include +#include "tbb/atomic.h" +#include "tbb/task_scheduler_init.h" +#include "tbb/tick_count.h" +#include "tbb/flow_graph.h" +#include "../../common/utility/utility.h" + +using tbb::tick_count; +using tbb::task_scheduler_init; +using namespace tbb::flow; + +typedef size_t size_type; // to represent non-zero indices, capacities, etc. +typedef size_t value_type; // the type of items we are attempting to pack into bins +typedef std::vector bin; // we use a simple vector to represent a bin +// Our bin packers will be function nodes in the graph that take value_type items and +// return a dummy value. They will also implicitly send packed bins to the bin_buffer +// node, and unused items back to the value_pool node: +typedef multifunction_node, rejecting> bin_packer; +// Items are placed into a pool that all bin packers grab from, represent by a queue_node: +typedef queue_node value_pool; +// Packed bins are placed in this buffer waiting to be serially printed and/or accounted for: +typedef buffer_node bin_buffer; +// Packed bins are taken from the_bin_buffer and processed by the_writer: +typedef function_node bin_writer; +// Items are injected into the graph when this node sends them to the_value_pool: +typedef source_node value_source; + +// User-specified globals with default values +size_type V = 42; // desired capacity for each bin +size_type N = 1000; // number of elements to generate +bool verbose = false; // prints bin details and other diagnostics to screen +bool silent = false; // suppress all output except for time +int num_bin_packers=-1; // number of concurrent bin packers in operation; default is #threads; + // larger values can result in more bins at less than full capacity +size_type optimality=1; // 1 (default) is highest the algorithm can obtain; larger numbers run faster + +// Calculated globals +size_type min_B; // lower bound on the optimal number of bins +size_type B; // the answer, i.e. number of bins used by the algorithm +size_type *input_array; // stores randomly generated input values +value_type item_sum; // sum of all randomly generated input values +tbb::atomic packed_sum; // sum of all values currently packed into all bins +tbb::atomic packed_items; // number of values currently packed into all bins +tbb::atomic active_bins; // number of active bin_packers +bin_packer **bins; // the array of bin packers + +// This class is the Body type for bin_packer +class bin_filler { + typedef bin_packer::output_ports_type ports_type; + bin my_bin; // the current bin that this bin_filler is packing + size_type my_used; // capacity of bin used by current contents (not to be confused with my_bin.size()) + size_type relax, relax_val; // relaxation counter for determining when to settle for a non-full bin + bin_packer* my_bin_packer; // ptr to the bin packer that this body object is associated with + size_type bin_index; // index of the encapsulating bin packer in the global bins array + value_type looking_for; // the minimum size of item this bin_packer will accept + value_pool* the_value_pool; // the queue of incoming values + bool done; // flag to indicate that this binpacker has been deactivated + public: + bin_filler(size_t bidx, value_pool* _q) : + my_used(0), relax(0), relax_val(0), my_bin_packer(NULL), bin_index(bidx), looking_for(V), the_value_pool(_q), done(false) {} + void operator()(const value_type& item, ports_type& p) { + if (!my_bin_packer) my_bin_packer = bins[bin_index]; + if (done) get<0>(p).try_put(item); // this bin_packer is done packing items; put item back to pool + else if (item > V) { // signal that packed_sum has reached item_sum at some point + size_type remaining = active_bins--; + if (remaining == 1 && packed_sum == item_sum) { // this is the last bin and it has seen everything + // this bin_packer may not have seen everything, so stay active + if (my_used>0) get<1>(p).try_put(my_bin); + my_bin.clear(); + my_used = 0; + looking_for = V; + ++active_bins; + } + else if (remaining == 1) { // this is the last bin, but there are remaining items + get<0>(p).try_put(V+1); // send out signal + ++active_bins; + } + else if (remaining > 1) { // this is not the last bin; deactivate + if (my_used < V/(1+optimality*.1)) { // this bin is ill-utilized; throw back items and deactivate + packed_sum -= my_used; + packed_items -= my_bin.size(); + for (size_type i=0; i(p).try_put(my_bin[i]); + the_value_pool->remove_successor(*my_bin_packer); // deactivate + done = true; + get<0>(p).try_put(V+1); // send out signal + } + else { // this bin is well-utilized; send out bin and deactivate + the_value_pool->remove_successor(*my_bin_packer); // build no more bins + done = true; + if (my_used>0) get<1>(p).try_put(my_bin); + get<0>(p).try_put(V+1); // send out signal + } + } + } + else if (item <= V-my_used && item >= looking_for) { // this item can be packed + my_bin.push_back(item); + my_used += item; + packed_sum += item; + ++packed_items; + looking_for = V-my_used; + relax = 0; + if (packed_sum == item_sum) { + get<0>(p).try_put(V+1); // send out signal + } + if (my_used == V) { + get<1>(p).try_put(my_bin); + my_bin.clear(); + my_used = 0; + looking_for = V; + } + } + else { // this item can't be packed; relax constraints + ++relax; + if (relax >= (N-packed_items)/optimality) { // this bin_packer has looked through enough items + relax = 0; + --looking_for; // accept a wider range of items + if (looking_for == 0 && my_used < V/(1+optimality*.1) && my_used > 0 && active_bins > 1) { + // this bin_packer is ill-utilized and can't find items; deactivate and throw back items + size_type remaining = active_bins--; + if (remaining > 1) { // not the last bin_packer + the_value_pool->remove_successor(*my_bin_packer); // deactivate + done = true; + } + else active_bins++; // can't deactivate last bin_packer + packed_sum -= my_used; + packed_items -= my_bin.size(); + for (size_type i=0; i(p).try_put(my_bin[i]); + my_bin.clear(); + my_used = 0; + } + else if (looking_for == 0 && (my_used >= V/(1+optimality*.1) || active_bins == 1)) { + // this bin_packer can't find items but is well-utilized, so send it out and reset + get<1>(p).try_put(my_bin); + my_bin.clear(); + my_used = 0; + looking_for = V; + } + } + get<0>(p).try_put(item); // put unused item back to pool + } + } +}; + +// source node uses this to send the values to the value_pool +class item_generator { + size_type counter; +public: + item_generator() : counter(0) {} + bool operator()(value_type& m) { + if (counter my_max) my_max = sum; + avg += sum; + running_count += sum; + if (verbose) + std::cout << "]=" << sum << "; Done/Packed/Total cap: " << running_count << "/" << packed_sum << "/" << item_sum + << " items:" << item_count << "/" << packed_items << "/" << N << " B=" << B << std::endl; + if (item_count == N) { // should be the last; print stats + avg = avg/(double)B; + if (!silent) + std::cout << "SUMMARY: #Bins used: " << B << "; Avg size: " << avg << "; Max size: " << my_max + << "; Min size: " << my_min << "\n Lower bound on optimal #bins: " << min_B + << "; Start #bins: " << num_bin_packers << std::endl; + } + return continue_msg(); // need to return something + } +}; + +int get_default_num_threads() { + static int threads = 0; + if (threads == 0) + threads = task_scheduler_init::default_num_threads(); + return threads; +} + +int main(int argc, char *argv[]) { + try { + utility::thread_number_range threads(get_default_num_threads); + utility::parse_cli_arguments(argc, argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + .positional_arg(threads,"#threads",utility::thread_number_range_desc) + .arg(verbose,"verbose"," print diagnostic output to screen") + .arg(silent,"silent"," limits output to timing info; overrides verbose") + .arg(N,"N"," number of values to pack") + .arg(V,"V"," capacity of each bin") + .arg(num_bin_packers,"#packers"," number of concurrent bin packers to use " + "(default=#threads)") + .arg(optimality,"optimality","controls optimality of solution; 1 is highest, use\n" + " larger numbers for less optimal but faster solution") + ); + + if (silent) verbose = false; // make silent override verbose + // Generate random input data + srand(42); + input_array = new value_type[N]; + item_sum = 0; + for (size_type i=0; i(*(bins[i])), the_value_pool); + make_edge(output_port<1>(*(bins[i])), the_bin_buffer); + } + bin_writer the_writer(g, 1, bin_printer()); + make_edge(the_bin_buffer, the_writer); + the_source.activate(); + g.wait_for_all(); + for (int i=0; i + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + binpack + {C931C7A2-074E-4150-9E7A-39A03250411E} + binpack + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/binpack/readme.html b/examples/graph/binpack/readme.html new file mode 100644 index 0000000..d4689da --- /dev/null +++ b/examples/graph/binpack/readme.html @@ -0,0 +1,415 @@ + + + + + + Intel® Threading Building Blocks. Binpack sample + + + + + +

+ This directory contains a simple tbb::flow example that performs + binpacking of N integer values into a near-optimal number of bins + of capacity V. +

+ It features a source_node which passes randomly + generated integer values of size<=V to a queue_node. Multiple + function_nodes set about taking values from this queue_node and + packing them into bins according to a best-fit policy. Items that + cannot be made to fit are rejected and returned to the queue. When + a bin is packed as well as it can be, it is passed to a buffer_node + where it waits to be picked up by another function_node. This final + function nodes gathers stats about the bin and optionally prints its + contents. When all bins are accounted for, it optionally prints a + summary of the quality of the bin-packing. +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
binpack.cpp +
Driver. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel® C++ Compiler (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+
Usage
+ +
+
+
binpack -h +
Prints the help for command line options +
binpack [#threads=value] [verbose] [silent] [N=value] [V=value] [#packers=value] [optimality=value] [#threads] +
#threads is the number of threads to use; a range of the form low[:high] where low and optional high are non-negative integers, or 'auto' for the TBB default.
+ verbose print diagnostic output to screen
+ silent limits output to timing info; overrides verbose
+ N number of values to pack
+ V capacity of each bin
+ #packers number of concurrent bin packers to use (default=#threads)
+ optimality controls optimality of solution; 1 is highest, use larger numbers for less optimal but faster solution
+
To run a short version of this example, e.g., for use with Intel® Parallel Inspector: +
Build a debug version of the example + (see the build instructions). +
Run it with a small problem size and the desired number of threads, e.g., binpack 4 N=100. +
+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj b/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj new file mode 100644 index 0000000..58bde8e --- /dev/null +++ b/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj @@ -0,0 +1,305 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; }; + 0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; }; + A1F593A60B8F042A00073279 /* binpack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* binpack.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + 0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; + 8DD76F6C0486A84900D96B5E /* Binpack */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Binpack; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593A50B8F042A00073279 /* binpack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = binpack.cpp; path = ../binpack.cpp; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* Binpack */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = Binpack; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + A1F593A50B8F042A00073279 /* binpack.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* Binpack */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 0E8A7310136F4A4600453C80 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* Binpack */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Binpack" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Binpack; + productInstallPath = "$(HOME)/bin"; + productName = Binpack; + productReference = 8DD76F6C0486A84900D96B5E /* Binpack */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* Binpack */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* Binpack */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593A60B8F042A00073279 /* binpack.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Binpack; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Binpack; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Binpack; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Binpack; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Binpack" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/graph/cholesky/Makefile b/examples/graph/cholesky/Makefile new file mode 100644 index 0000000..66b7aed --- /dev/null +++ b/examples/graph/cholesky/Makefile @@ -0,0 +1,56 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=cholesky +ARGS=4 2 + +# The C++ compiler +ifneq (,$(shell which icpc 2>/dev/null)) +CXX=icpc +endif # which icpc + +ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib -Wl,-rpath,$(MKLROOT)/lib +# MKL support +override MKL_LIBS += -lmkl_core -lmkl_sequential -lmkl_intel +else +ifeq ($(shell uname), Linux) +LIBS+= -lrt +endif +# MKL support +override MKL_LIBS += -lmkl_rt +endif + +# C++0x support +override CXXFLAGS += -std=c++0x + +all: release test + +release: *.cpp + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(MKL_LIBS) $(LIBS) + +debug: *.cpp + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(MKL_LIBS) $(LIBS) + +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) diff --git a/examples/graph/cholesky/Makefile.windows b/examples/graph/cholesky/Makefile.windows new file mode 100644 index 0000000..b34237a --- /dev/null +++ b/examples/graph/cholesky/Makefile.windows @@ -0,0 +1,50 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=Cholesky +ARGS=4 2 + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _WIN32_WINNT=0x0501 $(CXXFLAGS) +MYLDFLAGS = /INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +# MKL support +MKL_LIBS1 = $(TBB_TARGET_ARCH) +MKL_LIBS2 = $(MKL_LIBS1:ia32=mkl_core.lib mkl_sequential.lib mkl_intel_c.lib) +MKL_LIBS = $(MKL_LIBS2:intel64=mkl_core.lib mkl_sequential.lib mkl_intel_lp64.lib) + +all: release test +release: compiler_check + $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: compiler_check + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +compiler_check: + @echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + @cmd.exe /C del compiler_test diff --git a/examples/graph/cholesky/cholesky.cpp b/examples/graph/cholesky/cholesky.cpp new file mode 100644 index 0000000..20c6d2b --- /dev/null +++ b/examples/graph/cholesky/cholesky.cpp @@ -0,0 +1,715 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include +#include +#include +#include +#include +#include + +#include "mkl_lapack.h" +#include "mkl.h" + +#include "tbb/tbb_config.h" +#include "tbb/flow_graph.h" +#include "tbb/tick_count.h" +#include "tbb/task_scheduler_init.h" + +// Application command line arguments parsing +#include "../../common/utility/utility.h" + +/************************************************************ + FORWARD DECLARATIONS +************************************************************/ + +/********************************************** + Read or generate a positive-definite matrix + -- reads from file if fname != NULL + -- sets n to matrix size + -- allocates and reads values in to A + -- otherwise generates a matrix + -- uses n to determine size + -- allocates and generates values in to A +**********************************************/ +void matrix_init( double * &A, int &n, const char *fname ); + +/********************************************** + Writes a lower triangular matrix to a file + -- first line of file is n + -- subsequently 1 row per line +**********************************************/ +void matrix_write ( double *A, int n, const char *fname, bool is_triangular = false ); + +/************************************************************ + GLOBAL VARIABLES +************************************************************/ +bool g_benchmark_run = false; +int g_num_tbb_threads = tbb::task_scheduler_init::default_num_threads(); +int g_n = -1, g_b = -1, g_num_trials = 1; +char *g_input_file_name = NULL; +char *g_output_prefix = NULL; +std::string g_alg_name; + +// Creates tiled array +static double ***create_tile_array( double *A, int n, int b ) { + const int p = n/b; + double ***tile = (double ***)calloc( sizeof( double ** ), p ); + + for ( int j = 0; j < p; ++j ) { + tile[j] = (double **)calloc( sizeof( double * ), p ); + } + + for ( int j = 0; j < p; ++j ) { + for ( int i = 0; i < p; ++i ) { + double *temp_block = (double *)calloc( sizeof( double ), b*b ); + + for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) { + for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) { + temp_block[T_j*b+T_i] = A[A_j*n+A_i]; + } + } + + tile[j][i] = temp_block; + } + } + return tile; +} + +static void collapse_tile_array( double ***tile, double *A, int n, int b ) { + const int p = n/b; + + for ( int j = 0; j < p; ++j ) { + for ( int i = 0; i < p; ++i ) { + double *temp_block = tile[j][i]; + + for ( int A_j = j*b, T_j = 0; T_j < b; ++A_j, ++T_j ) { + for ( int A_i = i*b, T_i = 0; T_i < b; ++A_i, ++T_i ) { + A[A_j*n+A_i] = temp_block[T_j*b+T_i]; + } + } + + free( temp_block ); + tile[j][i] = NULL; + } + + free( tile[j] ); + } + + free( tile ); +} + +/************************************************************ + Helper base class: algorithm +************************************************************/ +class algorithm { + + std::string name; + bool is_tiled; + + bool check_if_valid( double *A0, double *C, double *A, int n ) { + char transa = 'n', transb = 't'; + double alpha = 1; + double beta = 0; + + for ( int i = 0; i < n; ++i ) { + for ( int j = i+1; j < n; ++j ) { + A0[j*n+i] = 0.; + } + } + + dgemm ( &transa, &transb, &n, &n, &n, &alpha, A0, &n, A0, &n, &beta, C, &n ); + + for ( int j = 0; j < n; ++j ) { + for ( int i = 0; i < n; ++i ) { + const double epsilon = std::abs( A[j*n+i]*0.1 ); + + if ( std::abs( C[j*n+i] - A[j*n+i] ) > epsilon ) { + printf( "ERROR: %s did not validate at C(%d,%d) = %lf != A(%d,%d) = %lf\n", + name.c_str(), i, j, C[j*n+i], i, j, A[j*n+i] ); + printf( "ERROR: %g; %g < %g < %g\n", epsilon, A[j*n+i] - epsilon, C[j*n+i], A[j*n+i] + epsilon ); + return false; + } + } + } + return true; + } + +public: + algorithm( const std::string& alg_name, bool t ) : name(alg_name), is_tiled(t) {} + + double operator() ( double *A, int n, int b, int trials ) { + tbb::tick_count t0, t1; + double elapsed_time = 0.0; + double *A0 = (double *)calloc( sizeof( double ), n*n ); + double *C = (double *)calloc( sizeof( double ), n*n ); + + for ( int t = 0; t < trials+1; ++t ) { + if ( is_tiled ) { + double ***tile = create_tile_array( A, n, b ); + t0 = tbb::tick_count::now(); + func( tile, n, b ); + t1 = tbb::tick_count::now(); + + collapse_tile_array( tile, A0, n, b ); + } + else { + memcpy( A0, A, sizeof( double )*n*n ); + t0 = tbb::tick_count::now(); + func( A0, n, b ); + t1 = tbb::tick_count::now(); + } + + if ( t ) elapsed_time += (t1-t0).seconds(); + + if( !g_benchmark_run && !check_if_valid( A0, C, A, n ) ) { + if ( g_output_prefix ) { + std::string s( g_output_prefix ); + s += "_" + name + ".txt"; + matrix_write( A0, g_n, s.c_str(), true ); + free( A0 ); + free( C ); + return 0.; + } + } + } + + if ( g_output_prefix ) { + std::string s( g_output_prefix ); + s += "_" + name + ".txt"; + matrix_write( A0, g_n, s.c_str(), true ); + } + + printf( "%s %d %d %d %d %lf %lf\n", name.c_str(), g_num_tbb_threads, trials, n, b, elapsed_time, elapsed_time/trials ); + free( A0 ); + free( C ); + return elapsed_time; + } + +protected: + // Main algorithm body function must be defined in any direved class + virtual void func( void * ptr, int n, int b ) = 0; +}; + +/***********************************************************/ + +static void call_dpotf2( double ***tile, int b, int k ) { + double *A_block = tile[k][k]; + char uplo = 'l'; + int info = 0; + dpotf2( &uplo, &b, A_block, &b, &info ); + return; +} + +static void call_dtrsm( double ***tile, int b, int k, int j ) { + double *A_block = tile[k][j]; + double *L_block = tile[k][k]; + char uplo = 'l', side = 'r', transa = 't', diag = 'n'; + double alpha = 1; + dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b ); + return; +} + +static void call_dsyr2k( double ***tile, int b, int k, int j, int i ) { + double *A_block = tile[i][j]; + char transa = 'n', transb = 't'; + char uplo = 'l'; + double alpha = -1; + double beta = 1; + + if ( i == j ) { // Diagonal block + double *L_block = tile[k][i]; + dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b ); + } else { // Non-diagonal block + double *L2_block = tile[k][i]; + double *L1_block = tile[k][j]; + dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b ); + } + return; +} + +class algorithm_crout : public algorithm +{ +public: + algorithm_crout() : algorithm("crout_cholesky", true) {} + +protected: + virtual void func( void * ptr, int n, int b ) { + double ***tile = (double ***)ptr; + const int p = n/b; + + for ( int k = 0; k < p; ++k ) { + call_dpotf2( tile, b, k ); + + for ( int j = k+1; j < p; ++j ) { + call_dtrsm( tile, b, k, j ); + + for ( int i = k+1; i <= j; ++i ) { + call_dsyr2k( tile, b, k, j, i ); + } + } + } + } +}; + +class algorithm_dpotrf : public algorithm +{ +public: + algorithm_dpotrf() : algorithm("dpotrf_cholesky", false) {} + +protected: + virtual void func( void * ptr, int n, int /* b */ ) { + double *A = (double *)ptr; + int lda = n; + int info = 0; + char uplo = 'l'; + dpotrf( &uplo, &n, A, &lda, &info ); + } +}; + +/************************************************************ + Begin data join graph based version of cholesky +************************************************************/ + +typedef union { + char a[4]; + size_t tag; +} tag_t; + +typedef double * tile_t; + +typedef std::pair< tag_t, tile_t > tagged_tile_t; +typedef tbb::flow::tuple< tagged_tile_t > t1_t; +typedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t > t2_t; +typedef tbb::flow::tuple< tagged_tile_t, tagged_tile_t, tagged_tile_t > t3_t; + +typedef tbb::flow::multifunction_node< tagged_tile_t, t1_t > dpotf2_node_t; +typedef tbb::flow::multifunction_node< t2_t, t2_t > dtrsm_node_t; +typedef tbb::flow::multifunction_node< t3_t, t3_t > dsyr2k_node_t; + +typedef tbb::flow::join_node< t2_t, tbb::flow::tag_matching > dtrsm_join_t; +typedef tbb::flow::join_node< t3_t, tbb::flow::tag_matching > dsyr2k_join_t; + +class dpotf2_body { + int p; + int b; +public: + dpotf2_body( int p_, int b_ ) : p(p_), b(b_) {} + + void operator()( const tagged_tile_t &in, dpotf2_node_t::output_ports_type &ports ) { + int k = in.first.a[0]; + tile_t A_block = in.second; + tag_t t; + t.tag = 0; + t.a[0] = k; + char uplo = 'l'; + int info = 0; + dpotf2( &uplo, &b, A_block, &b, &info ); + + // Send to dtrsms in same column + // k == k j == k + t.a[2] = k; + for ( int j = k+1; j < p; ++j ) { + t.a[1] = j; + tbb::flow::get<0>( ports ).try_put( std::make_pair( t, A_block ) ); + } + } +}; + +class dtrsm_body { + int p; + int b; +public: + dtrsm_body( int p_, int b_ ) : p(p_), b(b_) {} + + void operator()( const t2_t &in, dtrsm_node_t::output_ports_type &ports ) { + using tbb::flow::get; + + tagged_tile_t in0 = get<0>( in ); + tagged_tile_t in1 = get<1>( in ); + int k = in0.first.a[0]; + int j = in0.first.a[1]; + tile_t L_block = in0.second; + tile_t A_block = in1.second; + tag_t t; + t.tag = 0; + t.a[0] = k; + char uplo = 'l', side = 'r', transa = 't', diag = 'n'; + double alpha = 1; + dtrsm( &side, &uplo, &transa, &diag, &b, &b, &alpha, L_block, &b, A_block, &b); + + // Send to rest of my row + t.a[1] = j; + for ( int i = k+1; i <= j; ++i ) { + t.a[2] = i; + get<0>( ports ).try_put( std::make_pair( t, A_block ) ); + } + + // Send to transposed row + t.a[2] = j; + for ( int i = j; i < p; ++i ) { + t.a[1] = i; + get<1>( ports ).try_put( std::make_pair( t, A_block ) ); + } + } +}; + +class dsyr2k_body { + int p; + int b; +public: + dsyr2k_body( int p_, int b_ ) : p(p_), b(b_) {} + + void operator()( const t3_t &in, dsyr2k_node_t::output_ports_type &ports ) { + using tbb::flow::get; + + tag_t t; + t.tag = 0; + char transa = 'n', transb = 't'; + char uplo = 'l'; + double alpha = -1; + double beta = 1; + + tagged_tile_t in0 = get<0>( in ); + tagged_tile_t in1 = get<1>( in ); + tagged_tile_t in2 = get<2>( in ); + int k = in2.first.a[0]; + int j = in2.first.a[1]; + int i = in2.first.a[2]; + + tile_t A_block = in2.second; + if ( i == j ) { // Diagonal block + tile_t L_block = in0.second; + dsyrk( &uplo, &transa, &b, &b, &alpha, L_block, &b, &beta, A_block, &b ); + } else { // Non-diagonal block + tile_t L1_block = in0.second; + tile_t L2_block = in1.second; + dgemm( &transa, &transb, &b, &b, &b, &alpha, L1_block, &b, L2_block, &b, &beta, A_block, &b ); + } + + // All outputs flow to next step + t.a[0] = k+1; + t.a[1] = j; + t.a[2] = i; + if ( k != p-1 && j == k+1 && i == k+1 ) { + get<0>( ports ).try_put( std::make_pair( t, A_block ) ); + } + + if ( k < p-2 ) { + if ( i == k+1 && j > i ) { + t.a[0] = k+1; + t.a[1] = j; + get<1>( ports ).try_put( std::make_pair( t, A_block ) ); + } + + if ( j != k+1 && i != k+1 ) { + t.a[0] = k+1; + t.a[1] = j; + t.a[2] = i; + get<2>( ports ).try_put( std::make_pair( t, A_block ) ); + } + } + } +}; + +struct tagged_tile_to_size_t { + size_t operator()( const tagged_tile_t &t ) { + return t.first.tag; + } +}; + +class algorithm_join : public algorithm +{ +public: + algorithm_join() : algorithm("data_join_cholesky", true) {} + +protected: + virtual void func( void * ptr, int n, int b ) { + using tbb::flow::unlimited; + using tbb::flow::output_port; + using tbb::flow::input_port; + + double ***tile = (double ***)ptr; + const int p = n/b; + tbb::flow::graph g; + + dpotf2_node_t dpotf2_node( g, unlimited, dpotf2_body(p, b) ); + dtrsm_node_t dtrsm_node( g, unlimited, dtrsm_body(p, b) ); + dsyr2k_node_t dsyr2k_node( g, unlimited, dsyr2k_body(p, b) ); + dtrsm_join_t dtrsm_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t() ); + dsyr2k_join_t dsyr2k_join( g, tagged_tile_to_size_t(), tagged_tile_to_size_t(), tagged_tile_to_size_t() ); + + make_edge( output_port<0>( dsyr2k_node ), dpotf2_node ); + + make_edge( output_port<0>( dpotf2_node ), input_port<0>( dtrsm_join ) ); + make_edge( output_port<1>( dsyr2k_node ), input_port<1>( dtrsm_join ) ); + make_edge( dtrsm_join, dtrsm_node ); + + make_edge( output_port<0>( dtrsm_node ), input_port<0>( dsyr2k_join ) ); + make_edge( output_port<1>( dtrsm_node ), input_port<1>( dsyr2k_join ) ); + make_edge( output_port<2>( dsyr2k_node ), input_port<2>( dsyr2k_join ) ); + make_edge( dsyr2k_join, dsyr2k_node ); + + // Now we need to send out the tiles to their first nodes + tag_t t; + t.tag = 0; + t.a[0] = 0; + t.a[1] = 0; + t.a[2] = 0; + + // Send to feedback input of first dpotf2 + // k == 0, j == 0, i == 0 + dpotf2_node.try_put( std::make_pair( t, tile[0][0] ) ); + + // Send to feedback input (port 1) of each dtrsm + // k == 0, j == 1..p-1 + for ( int j = 1; j < p; ++j ) { + t.a[1] = j; + input_port<1>( dtrsm_join ).try_put( std::make_pair( t, tile[0][j] ) ); + } + + // Send to feedback input (port 2) of each dsyr2k + // k == 0 + for ( int i = 1; i < p; ++i ) { + t.a[2] = i; + + for ( int j = i; j < p; ++j ) { + t.a[1] = j; + input_port<2>( dsyr2k_join ).try_put( std::make_pair( t, tile[i][j] ) ); + } + } + + g.wait_for_all(); + } +}; + +/************************************************************ + End data join graph based version of cholesky +************************************************************/ + +/************************************************************ + Begin dependence graph based version of cholesky +************************************************************/ + +typedef tbb::flow::continue_node< tbb::flow::continue_msg > continue_type; +typedef continue_type * continue_ptr_type; + +#if !__TBB_CPP11_LAMBDAS_PRESENT +// Using helper functor classes (instead of built-in C++ 11 lambda functions) +class call_dpotf2_functor +{ + double ***tile; + int b, k; +public: + call_dpotf2_functor( double ***tile_, int b_, int k_ ) + : tile(tile_), b(b_), k(k_) {} + + void operator()( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); } +}; + +class call_dtrsm_functor +{ + double ***tile; + int b, k, j; +public: + call_dtrsm_functor( double ***tile_, int b_, int k_, int j_ ) + : tile(tile_), b(b_), k(k_), j(j_) {} + + void operator()( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); } +}; + +class call_dsyr2k_functor +{ + double ***tile; + int b, k, j, i; +public: + call_dsyr2k_functor( double ***tile_, int b_, int k_, int j_, int i_ ) + : tile(tile_), b(b_), k(k_), j(j_), i(i_) {} + + void operator()( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); } +}; + +#endif // !__TBB_CPP11_LAMBDAS_PRESENT + +class algorithm_depend : public algorithm +{ +public: + algorithm_depend() : algorithm("depend_cholesky", true) {} + +protected: + virtual void func( void * ptr, int n, int b ) { + double ***tile = (double ***)ptr; + + const int p = n/b; + continue_ptr_type *c = new continue_ptr_type[p]; + continue_ptr_type **t = new continue_ptr_type *[p]; + continue_ptr_type ***u = new continue_ptr_type **[p]; + + tbb::flow::graph g; + for ( int k = p-1; k >= 0; --k ) { + c[k] = new continue_type( g, +#if __TBB_CPP11_LAMBDAS_PRESENT + [=]( const tbb::flow::continue_msg & ) { call_dpotf2( tile, b, k ); } ); +#else + call_dpotf2_functor( tile, b, k ) ); +#endif // __TBB_CPP11_LAMBDAS_PRESENT + t[k] = new continue_ptr_type[p]; + u[k] = new continue_ptr_type *[p]; + + for ( int j = k+1; j < p; ++j ) { + t[k][j] = new continue_type( g, +#if __TBB_CPP11_LAMBDAS_PRESENT + [=]( const tbb::flow::continue_msg & ) { call_dtrsm( tile, b, k, j ); } ); +#else + call_dtrsm_functor( tile, b, k, j ) ); +#endif // __TBB_CPP11_LAMBDAS_PRESENT + make_edge( *c[k], *t[k][j] ); + u[k][j] = new continue_ptr_type[p]; + + for ( int i = k+1; i <= j; ++i ) { + u[k][j][i] = new continue_type( g, +#if __TBB_CPP11_LAMBDAS_PRESENT + [=]( const tbb::flow::continue_msg & ) { call_dsyr2k( tile, b, k, j, i ); } ); +#else + call_dsyr2k_functor( tile, b, k, j, i ) ); +#endif // __TBB_CPP11_LAMBDAS_PRESENT + + if ( k < p-2 && k+1 != j && k+1 != i ) { + make_edge( *u[k][j][i], *u[k+1][j][i] ); + } + + make_edge( *t[k][j], *u[k][j][i] ); + + if ( i != j ) { + make_edge( *t[k][i], *u[k][j][i] ); + } + + if ( k < p-2 && j > i && i == k+1 ) { + make_edge( *u[k][j][i], *t[i][j] ); + } + } + } + + if ( k != p-1 ) { + make_edge( *u[k][k+1][k+1], *c[k+1] ); + } + } + + c[0]->try_put( tbb::flow::continue_msg() ); + g.wait_for_all(); + } +}; // class algorithm_depend + +/************************************************************ + End dependence graph based version of cholesky +************************************************************/ + +bool process_args( int argc, char *argv[] ) { + utility::parse_cli_arguments( argc, argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + .positional_arg( g_n, "size", "the row/column size of NxN matrix (size <= 46000)" ) + .positional_arg( g_b, "blocksize", "the block size; size must be a multiple of the blocksize" ) + .positional_arg( g_num_trials, "num_trials", "the number of times to run each algorithm" ) + .positional_arg( g_output_prefix, "output_prefix", + "if provided the prefix will be preappended to output files:\n" + " output_prefix_posdef.txt\n" + " output_prefix_X.txt; where X is the algorithm used\n" + " if output_prefix is not provided, no output will be written" ) + .positional_arg( g_alg_name, "algorithm", "name of the used algorithm - can be dpotrf, crout, depend or join" ) + .positional_arg( g_num_tbb_threads, "num_tbb_threads", "number of started TBB threads" ) + + .arg( g_input_file_name, "input_file", "if provided it will be read to get the input matrix" ) + .arg( g_benchmark_run, "-x", "skips all validation" ) + ); + + if ( g_n > 46000 ) { + printf( "ERROR: invalid 'size' value (must be less or equal 46000): %d\n", g_n ); + return false; + } + + if ( g_n%g_b != 0 ) { + printf( "ERROR: size %d must be a multiple of the blocksize %d\n", g_n, g_b ); + return false; + } + + if ( g_n/g_b > 256 ) { + // Because tile index size is 1 byte only in tag_t type + printf( "ERROR: size / blocksize must be less or equal 256, but %d / %d = %d\n", g_n, g_b, g_n/g_b ); + return false; + } + + if ( g_b == -1 || (g_n == -1 && g_input_file_name == NULL) ) { + return false; + } + + return true; +} + +int main(int argc, char *argv[]) { + typedef std::map< std::string, algorithm * > algmap_t; + algmap_t algmap; + + // Init algorithms + algmap.insert(std::pair("dpotrf", new algorithm_dpotrf)); + algmap.insert(std::pair("crout", new algorithm_crout)); + algmap.insert(std::pair("depend", new algorithm_depend)); + algmap.insert(std::pair("join", new algorithm_join)); + + if ( !process_args( argc, argv ) ) { + printf( "ERROR: Invalid arguments. Run: %s -h\n", argv[0] ); + exit( 1 ); + } + + tbb::task_scheduler_init init( g_num_tbb_threads ); + double *A = NULL; + + // Read input matrix + matrix_init( A, g_n, g_input_file_name ); + + // Write input matrix if output_prefix is set and we didn't read from a file + if ( !g_input_file_name && g_output_prefix ) { + std::string s( g_output_prefix ); + s += "_posdef.txt"; + matrix_write( A, g_n, s.c_str() ); + } + + if ( g_alg_name.empty() ) { + for ( algmap_t::iterator i = algmap.begin(); i != algmap.end(); ++i ) { + algorithm* const alg = i->second; + (*alg)( A, g_n, g_b, g_num_trials ); + } + } + else { + algmap_t::iterator alg_iter = algmap.find(g_alg_name); + + if ( alg_iter != algmap.end() ) { + algorithm* const alg = alg_iter->second; + (*alg)( A, g_n, g_b, g_num_trials ); + } + else { + printf( "ERROR: Invalid algorithm name: %s\n", g_alg_name.c_str() ); + exit( 2 ); + } + } + + free( A ); + return 0; +} diff --git a/examples/graph/cholesky/init.cpp b/examples/graph/cholesky/init.cpp new file mode 100644 index 0000000..a09c472 --- /dev/null +++ b/examples/graph/cholesky/init.cpp @@ -0,0 +1,138 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include +#include +#include +#include +#include + +static void posdef_gen( double * A, int n ) +{ + /* Allocate memory for the matrix and its transpose */ + double *L = (double *)calloc( sizeof( double ), n*n ); + assert( L ); + + double *LT = (double *)calloc( sizeof( double ), n*n) ; + assert( LT ); + + memset( A, 0, sizeof( double )*n*n ); + + /* Generate a conditioned matrix and fill it with random numbers */ + for ( int j = 0; j < n; ++j ) { + for ( int k = 0; k < j; ++k ) { + // The initial value has to be between [0,1]. + L[k*n+j] = ( ( (j*k) / ((double)(j+1)) / ((double)(k+2)) * 2.0) - 1.0 ) / ((double)n); + } + + L[j*n+j] = 1; + } + + /* Compute transpose of the matrix */ + for ( int i = 0; i < n; ++i ) { + for ( int j = 0; j < n; ++j ) { + LT[j*n+i] = L[i*n+j]; + } + } + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, n, n, n, 1, L, n, LT, n, 0, A, n ); + + free( L ); + free( LT ); +} + +// Read the matrix from the input file +void matrix_init( double * &A, int &n, const char *fname ) { + if( fname ) { + int i; + int j; + FILE *fp; + + fp = fopen( fname, "r" ); + if ( fp == NULL ) { + fprintf( stderr, "\nFile does not exist\n" ); + exit( 0 ); + } + if ( fscanf( fp, "%d", &n ) <= 0 ) { + fprintf( stderr,"\nCouldn't read n from %s\n", fname ); + exit( 1 ); + } + A = (double *)calloc( sizeof( double ), n*n ); + for ( i = 0; i < n; ++i ) { + for ( j = 0; j <= i; ++j ) { + if( fscanf( fp, "%lf ", &A[i*n+j] ) <= 0) { + fprintf( stderr,"\nMatrix size incorrect %i %i\n", i, j ); + exit( 1 ); + } + if ( i != j ) { + A[j*n+i] = A[i*n+j]; + } + } + } + fclose( fp ); + } else { + A = (double *)calloc( sizeof( double ), n*n ); + posdef_gen( A, n ); + } +} + +// write matrix to file +void matrix_write ( double *A, int n, const char *fname, bool is_triangular = false ) +{ + if( fname ) { + int i = 0; + int j = 0; + FILE *fp = NULL; + + fp = fopen( fname, "w" ); + if ( fp == NULL ) { + fprintf( stderr, "\nCould not open file %s for writing.\n", fname ); + exit( 0 ); + } + fprintf( fp, "%d\n", n ); + for ( i = 0; i < n; ++i) { + for ( j = 0; j <= i; ++j ) { + fprintf( fp, "%lf ", A[j*n+i] ); + } + if ( !is_triangular ) { + for ( ; j < n; ++j ) { + fprintf( fp, "%lf ", A[i*n+j] ); + } + } else { + for ( ; j < n; ++j ) { + fprintf( fp, "%lf ", 0.0 ); + } + } + fprintf( fp, "\n" ); + } + if ( is_triangular ) { + fprintf( fp, "\n" ); + for ( i = 0; i < n; ++i ) { + for ( j = 0; j < i; ++j ) { + fprintf( fp, "%lf ", 0.0 ); + } + for ( ; j < n; ++j ) { + fprintf( fp, "%lf ", A[i*n+j] ); + } + fprintf( fp, "\n" ); + } + } + fclose( fp ); + } +} diff --git a/examples/graph/cholesky/msvs/cholesky.sln b/examples/graph/cholesky/msvs/cholesky.sln new file mode 100644 index 0000000..87ed855 --- /dev/null +++ b/examples/graph/cholesky/msvs/cholesky.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cholesky", "cholesky.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A252E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/graph/cholesky/msvs/cholesky.vcxproj b/examples/graph/cholesky/msvs/cholesky.vcxproj new file mode 100644 index 0000000..d906a46 --- /dev/null +++ b/examples/graph/cholesky/msvs/cholesky.vcxproj @@ -0,0 +1,206 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + cholesky + {3AA40693-F93D-4D4B-B32E-068F511A252E} + cholesky + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + GenerateParallelCode + + + tbb_debug.lib;mkl_rt.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(MKLROOT)\lib\ia32;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + GenerateParallelCode + + + tbb_debug.lib;mkl_rt.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(MKLROOT)\lib\intel64;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + GenerateParallelCode + + + tbb.lib;mkl_rt.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(MKLROOT)\lib\ia32;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(MKLROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + GenerateParallelCode + + + tbb.lib;mkl_rt.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(MKLROOT)\lib\intel64;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/cholesky/readme.html b/examples/graph/cholesky/readme.html new file mode 100644 index 0000000..647ff31 --- /dev/null +++ b/examples/graph/cholesky/readme.html @@ -0,0 +1,415 @@ + + + + + + Intel® Threading Building Blocks. Cholesky sample + + + + + +

+ This directory contains an example of several versions of Cholesky Factorization algorithm. +
+
dpotrf: An implementation that calls the Intel® Math Kernel Library (Intel® MKL) dpotrf function to directly perform the factorization. This can be a serial implementation or threaded implementation depending on the version of the Intel MKL library that is linked against. +
+
crout: A serial implementation that uses the Crout-Cholesky algorithm for factorization. The same approach is parallelized for the other Intel® Threading Building Blocks (Intel® TBB) based approaches below. +
+
depend: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph. This version uses a dependence graph made solely of continue_node objects. This an inspector-executor approach, where a loop nest that is similar to the serial implementation is used to create an unrolled version of the computation. Where the Intel MKL calls would have been made in the original serial implementation of Crout-Cholesky, instead nodes are created and these nodes are linked by edges to the other nodes that they are dependent upon. The resulting graph is relatively large, with a node for each instance of each Intel MKL call. For example, there are many nodes that call dtrsm; one for each invocation of dtrsm in the serial implementation. The is very little overhead in message management for this version and so it is often the highest performing. +
+
join: A parallel version of Crout-Cholesky factorization that uses an Intel TBB flow graph. This version uses a data flow approach. This is a small, compact graph that passes tiles along its edges. There is one node per type of Intel MKL call, plus join_nodes that combine the inputs required for each call. So for example, there is only a single node that applies all calls to dtrsm. This node is invoked when the tiles that hold the inputs and outputs for an invocation are matched together in the tag-matching join_node that precedes it. The tag represents the iteration values of the i, j, k loops in the serial implementation at that invocation of the call. There is some overhead in message matching and forwarding, so it may not perform as well as the dependence graph implementation. +
+
This sample code requires a recent Intel TBB library (one that supports the flow graph). And also the Intel MKL library. +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
cholesky.cpp +
Source code for example. +
init.cpp +
Source code for example. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+

Also, you need to source Intel MKL environment variables.

+
+
+ +
+
Usage
+ +
+
+
cholesky [size=value] [blocksize=value] [num_trials=value] [output_prefix=value] [algorithm=value] [num_tbb_threads=value] [input_file=value] [-x] [-h] [size [blocksize [num_trials [output_prefix [algorithm [num_tbb_threads]]]]]] +
where: +
size - the row/column size of NxN matrix (size <= 46000) +
blocksize - the block size; size must be a multiple of the blocksize +
num_trials - the number of times to run each algorithm +
output_prefix - if provided the prefix will be preappended to output files: + output_prefix_posdef.txt and + output_prefix_X.txt; where X is the algorithm used +
if output_prefix is not provided, no output will be written +
algorithm - name of the used algorithm - can be dpotrf, crout, depend or join +
num_tbb_threads - number of started TBB threads +
input_file - if provided it will be read to get the input matrix +
-x - skips all validation +
-h - show this message +
+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj b/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj new file mode 100644 index 0000000..63a3b2c --- /dev/null +++ b/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj @@ -0,0 +1,309 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A1F593A60B8F042A00073279 /* Cholesky.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Cholesky.cpp */; }; + A1F593A60B8F053A00073279 /* init.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F053A00073279 /* init.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 8DD76F6C0486A84900D96B5E /* Cholesky */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Cholesky; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593A50B8F042A00073279 /* Cholesky.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Cholesky.cpp; path = ../Cholesky.cpp; sourceTree = SOURCE_ROOT; }; + A1F593A50B8F053A00073279 /* init.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = init.cpp; path = ../init.cpp; sourceTree = SOURCE_ROOT; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* Cholesky */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = Cholesky; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + A1F593A50B8F042A00073279 /* Cholesky.cpp */, + A1F593A50B8F053A00073279 /* init.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* Cholesky */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* Cholesky */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Cholesky" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Cholesky; + productInstallPath = "$(HOME)/bin"; + productName = Cholesky; + productReference = 8DD76F6C0486A84900D96B5E /* Cholesky */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "cholesky" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* Cholesky */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* Cholesky */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593A60B8F042A00073279 /* Cholesky.cpp in Sources */, + A1F593A60B8F053A00073279 /* init.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Cholesky; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Cholesky; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Cholesky; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Cholesky; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Cholesky" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Cholesky" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/graph/dining_philosophers/Makefile b/examples/graph/dining_philosophers/Makefile new file mode 100644 index 0000000..8ef3a6e --- /dev/null +++ b/examples/graph/dining_philosophers/Makefile @@ -0,0 +1,55 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=dining_philosophers +ARGS= auto 5 +LIGHT_ARGS= auto 3 + +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: dining_philosophers.cpp + $(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) + +debug: dining_philosophers.cpp + $(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) + +clean: + rm -f $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +light_test: + $(run_cmd) ./$(PROG) $(LIGHT_ARGS) diff --git a/examples/graph/dining_philosophers/Makefile.windows b/examples/graph/dining_philosophers/Makefile.windows new file mode 100644 index 0000000..170cc4e --- /dev/null +++ b/examples/graph/dining_philosophers/Makefile.windows @@ -0,0 +1,46 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=dining_philosophers +ARGS= auto 5 +LIGHT_ARGS= auto 3 + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test +release: + $(CXX) ./dining_philosophers.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: + $(CXX) ./dining_philosophers.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +light_test: + $(PROG) $(LIGHT_ARGS) + diff --git a/examples/graph/dining_philosophers/dining_philosophers.cpp b/examples/graph/dining_philosophers/dining_philosophers.cpp new file mode 100644 index 0000000..35bc448 --- /dev/null +++ b/examples/graph/dining_philosophers/dining_philosophers.cpp @@ -0,0 +1,306 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#if _MSC_VER + // Suppress "decorated name length exceeded, name was truncated" warning + #pragma warning (disable: 4503) +#endif + +#include "tbb/flow_graph.h" +#include "tbb/task_scheduler_init.h" +#include "tbb/tick_count.h" +#include "tbb/tbb_thread.h" +#include "tbb/atomic.h" +#include "tbb/spin_mutex.h" +#include +#include "../../common/utility/utility.h" +#include +#include + +// Each philosopher is an object, and is invoked in the think() function_node, the +// eat() function_node and forward() multifunction_node. +// +// The graph is constructed, and each think() function_node is started with a continue_msg. +// +// The philosopher will think, then gather two chopsticks, eat, place the chopsticks back, +// and if they have not completed the required number of cycles, will start to think() again +// by sending a continue_msg to their corresponding think() function_node. +// +// The reserving join has as its inputs the left and right chopstick queues an a queue +// that stores the continue_msg emitted by the function_node after think()ing is done. +// When all three inputs are available, a tuple of the inputs will be forwarded to the +// eat() function_node. The output of the eat() function_node is sent to the forward() +// multifunction_node. + +const tbb::tick_count::interval_t think_time(1.0); +const tbb::tick_count::interval_t eat_time(1.0); +const int num_times = 10; + +tbb::tick_count t0; +bool verbose = false; + +const char *names[] = { "Archimedes", "Bakunin", "Confucius", "Democritus", "Euclid" + , "Favorinus", "Geminus", "Heraclitus", "Ichthyas", "Jason of Nysa", + "Kant", "Lavrov", "Metrocles", "Nausiphanes", "Onatas", "Phaedrus", + "Quillot", "Russell", "Socrates", "Thales", "Udayana", + "Vernadsky", "Wittgenstein", "Xenophilus", "Yen Yuan", "Zenodotus" +}; +const int NumPhilosophers = sizeof(names) / sizeof(char*); + +struct RunOptions { + utility::thread_number_range threads; + int number_of_philosophers; + bool silent; + RunOptions(utility::thread_number_range threads_, int number_of_philosophers_, bool silent_) : + threads(threads_), number_of_philosophers(number_of_philosophers_), silent(silent_) { } +}; + +RunOptions ParseCommandLine(int argc, char *argv[]) { + int auto_threads = tbb::task_scheduler_init::default_num_threads(); + utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads, auto_threads, auto_threads); + int nPhilosophers = 5; + bool verbose = false; + char charbuf[100]; + std::sprintf(charbuf, "%d", NumPhilosophers); + std::string pCount = "how many philosophers, from 2-"; + pCount += charbuf; + + utility::cli_argument_pack cli_pack; + cli_pack.positional_arg(threads, "n-of_threads", utility::thread_number_range_desc) + .positional_arg(nPhilosophers, "n-of-philosophers", pCount) + .arg(verbose,"verbose","verbose output"); + utility::parse_cli_arguments(argc, argv, cli_pack); + if(nPhilosophers < 2 || nPhilosophers > NumPhilosophers) { + std::cout << "Number of philosophers (" << nPhilosophers << ") out of range [2:" << NumPhilosophers << "]\n"; + std::cout << cli_pack.usage_string(argv[0]) << std::flush; + std::exit(1); + } + return RunOptions(threads, nPhilosophers,!verbose); +} + + +tbb::spin_mutex my_mutex; + +class chopstick {}; + +using namespace tbb::flow; + +typedef tbb::flow::tuple join_output; +typedef join_node< join_output, reserving > join_node_type; + +typedef function_node think_node_type; +typedef function_node eat_node_type; +typedef multifunction_node forward_node_type; + +class philosopher { +public: + + philosopher( const char *name ) : + my_name(name), my_count(num_times) { } + + ~philosopher() { + } + + void check(); + const char *name() const { return my_name; } + +private: + + friend std::ostream& operator<<(std::ostream& o, philosopher const &p); + + const char *my_name; + int my_count; + + friend class think_node_body; + friend class eat_node_body; + friend class forward_node_body; + + void think( ); + void eat(); + void forward( const continue_msg &in, forward_node_type::output_ports_type &out_ports ); +}; + +std::ostream& operator<<(std::ostream& o, philosopher const &p) { + o << "< philosopher[" << reinterpret_cast(const_cast(&p)) << "] " << p.name() + << ", my_count=" << p.my_count; + return o; +} + +class think_node_body { + philosopher& my_philosopher; +public: + think_node_body( philosopher &p ) : my_philosopher(p) { } + think_node_body( const think_node_body &other ) : my_philosopher(other.my_philosopher) { } + continue_msg operator()( continue_msg /*m*/) { + my_philosopher.think(); + return continue_msg(); + } +}; + +class eat_node_body { + philosopher &my_philosopher; +public: + eat_node_body( philosopher &p) : my_philosopher(p) {} + eat_node_body( const eat_node_body &other ) : my_philosopher(other.my_philosopher) { } + continue_msg operator()(const join_output &in) { + my_philosopher.eat(); + return continue_msg(); + } +}; + +class forward_node_body { + philosopher &my_philosopher; +public: + forward_node_body( philosopher &p) : my_philosopher(p) {} + forward_node_body( const forward_node_body &other ) : my_philosopher(other.my_philosopher) { } + void operator()( const continue_msg &in, forward_node_type::output_ports_type &out) { + my_philosopher.forward( in, out); + } +}; + +void philosopher::check() { + if ( my_count != 0 ) { + std::printf("ERROR: philosopher %s still had to run %d more times\n", name(), my_count); + std::exit(1); + } +} + +void philosopher::forward( const continue_msg &/*in*/, forward_node_type::output_ports_type &out_ports ) { + if(my_count < 0) abort(); + --my_count; + (void)tbb::flow::get<1>(out_ports).try_put(chopstick()); + (void)tbb::flow::get<2>(out_ports).try_put(chopstick()); + if (my_count > 0) { + (void)tbb::flow::get<0>(out_ports).try_put(continue_msg()); //start thinking again + } else { + if(verbose) { + tbb::spin_mutex::scoped_lock lock(my_mutex); + std::printf("%s has left the building\n", name()); + } + } +} + +void philosopher::eat() { + if(verbose) { + tbb::spin_mutex::scoped_lock lock(my_mutex); + std::printf("%s eating\n", name()); + } + tbb::this_tbb_thread::sleep(eat_time); + if(verbose) { + tbb::spin_mutex::scoped_lock lock(my_mutex); + std::printf("%s done eating\n", name()); + } +} + +void philosopher::think() { + if(verbose) { + tbb::spin_mutex::scoped_lock lock(my_mutex); + std::printf("%s thinking\n", name()); + } + tbb::this_tbb_thread::sleep(think_time); + if(verbose) { + tbb::spin_mutex::scoped_lock lock(my_mutex); + std::printf("%s done thinking\n", name()); + } +} + +typedef queue_node thinking_done_type; + +int main(int argc, char *argv[]) { + try { + tbb::tick_count main_time = tbb::tick_count::now(); + int num_threads; + int num_philosophers; + + RunOptions options = ParseCommandLine(argc, argv); + num_philosophers = options.number_of_philosophers; + verbose = !options.silent; + + for(num_threads = options.threads.first; num_threads <= options.threads.last; num_threads = options.threads.step(num_threads)) { + + tbb::task_scheduler_init init(num_threads); + + graph g; + + if(verbose) std::cout << std::endl << num_philosophers << " philosophers with " + << num_threads << " threads" << std::endl << std::endl; + t0 = tbb::tick_count::now(); + + std::vector > places(num_philosophers, queue_node(g)); + std::vector philosophers; + philosophers.reserve(num_philosophers); + std::vector think_nodes; + think_nodes.reserve(num_philosophers); + std::vector done_vector(num_philosophers, thinking_done_type(g)); + std::vector join_vector(num_philosophers,join_node_type(g)); + std::vector eat_nodes; + eat_nodes.reserve(num_philosophers); + std::vector forward_nodes; + forward_nodes.reserve(num_philosophers); + for ( int i = 0; i < num_philosophers; ++i ) { + places[i].try_put(chopstick()); + philosophers.push_back( philosopher( names[i] ) ); // allowed because of default generated assignment + if(verbose) { + tbb::spin_mutex::scoped_lock lock(my_mutex); + std::cout << "Built philosopher " << philosophers[i] << std::endl; + } + think_nodes.push_back(new think_node_type(g, unlimited, think_node_body(philosophers[i]))); + eat_nodes.push_back( new eat_node_type(g, unlimited, eat_node_body(philosophers[i]))); + forward_nodes.push_back( new forward_node_type(g, unlimited, forward_node_body(philosophers[i]))); + } + + // attach chopstick buffers and think function_nodes to joins + for(int i = 0; i < num_philosophers; ++i) { + make_edge( *think_nodes[i], done_vector[i] ); + make_edge( done_vector[i], input_port<0>(join_vector[i]) ); + make_edge( places[i], input_port<1>(join_vector[i]) ); // left chopstick + make_edge( places[(i+1) % num_philosophers], input_port<2>(join_vector[i]) ); // right chopstick + make_edge( join_vector[i], *eat_nodes[i] ); + make_edge( *eat_nodes[i], *forward_nodes[i] ); + make_edge( output_port<0>(*forward_nodes[i]), *think_nodes[i] ); + make_edge( output_port<1>(*forward_nodes[i]), places[i] ); + make_edge( output_port<2>(*forward_nodes[i]), places[(i+1) % num_philosophers] ); + } + + // start all the philosophers thinking + for(int i = 0; i < num_philosophers; ++i) think_nodes[i]->try_put(continue_msg()); + + g.wait_for_all(); + + tbb::tick_count t1 = tbb::tick_count::now(); + if(verbose) std::cout << std::endl << num_philosophers << " philosophers with " + << num_threads << " threads have taken " << (t1-t0).seconds() << "seconds" << std::endl; + + for ( int i = 0; i < num_philosophers; ++i ) philosophers[i].check(); + + for(int i = 0; i < num_philosophers; ++i) { + delete think_nodes[i]; + delete eat_nodes[i]; + delete forward_nodes[i]; + } + } + + utility::report_elapsed_time((tbb::tick_count::now() - main_time).seconds()); + return 0; + } catch(std::exception& e) { + std::cerr<<"error occurred. error text is :\"" < + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + dining_philosophers + {3894d1d2-a574-4937-ad56-726758efe5b7} + dining_philosophers + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/dining_philosophers/readme.html b/examples/graph/dining_philosophers/readme.html new file mode 100644 index 0000000..38e93cb --- /dev/null +++ b/examples/graph/dining_philosophers/readme.html @@ -0,0 +1,383 @@ + + + + + + Intel® Threading Building Blocks. Dining_philosophers sample + + + + + +

+ The Dining Philosophers problem demonstrates tbb::flow and the use of the reserving join node to + solve the potential deadlock. +

+ This program runs some number of philosophers in parallel, each thinking and then waiting for chopsticks + to be available before eating. Eating and thinking are implemented with sleep(). The chopstick positions are represented by a queue_node with one item. +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
dining_philosophers.cpp +
Source code for the example. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj b/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj new file mode 100644 index 0000000..fc04882 --- /dev/null +++ b/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj @@ -0,0 +1,305 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A1F593A60B8F042A00073279 /* dining_philosophers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* dining_philosophers.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 8DD76F6C0486A84900D96B5E /* dining_philosophers */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dining_philosophers; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593A50B8F042A00073279 /* dining_philosophers.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = dining_philosophers.cpp; path = ../dining_philosophers.cpp; sourceTree = SOURCE_ROOT; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* dining_philosophers */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = dining_philosophers; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + A1F593A50B8F042A00073279 /* dining_philosophers.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* dining_philosophers */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* dining_philosophers */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "dining_philosophers" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = dining_philosophers; + productInstallPath = "$(HOME)/bin"; + productName = dining_philosophers; + productReference = 8DD76F6C0486A84900D96B5E /* dining_philosophers */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "dining_philosophers" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* dining_philosophers */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* dining_philosophers */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593A60B8F042A00073279 /* dining_philosophers.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = dining_philosophers; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = dining_philosophers; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = dining_philosophers; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = dining_philosophers; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "dining_philosophers" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "dining_philosophers" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/graph/fgbzip2/Makefile b/examples/graph/fgbzip2/Makefile new file mode 100644 index 0000000..698d44d --- /dev/null +++ b/examples/graph/fgbzip2/Makefile @@ -0,0 +1,57 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. + +run_cmd= +PROG=fgbzip2 +ARGS=-b=9 -a=async_node $(PROG) +PERF_RUN_ARGS=-b=9 -a=async_node $(PROG) + +# icpc by default +ifneq (,$(shell which icc 2>/dev/null)) + CXX=icpc +endif + +# autodetect C++11 support +include ../../common/examples-common.inc + +ifeq ($(shell uname), Linux) +LIBS+= -lrt -lpthread +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: + $(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS) + +debug: + $(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS) $(CXX0XFLAGS) + +clean: + $(RM) $(PROG) *.o *.d *.bz2 + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) diff --git a/examples/graph/fgbzip2/Makefile.windows b/examples/graph/fgbzip2/Makefile.windows new file mode 100644 index 0000000..bb5a55a --- /dev/null +++ b/examples/graph/fgbzip2/Makefile.windows @@ -0,0 +1,54 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +run_cmd= +PROG=fgbzip2 +ARGS=-b=9 -a=async_node $(PROG).exe +PERF_RUN_ARGS=-b=9 -a=async_node $(PROG).exe + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_WARNINGS /D _CRT_NONSTDC_NO_DEPRECATE /wd4267 /wd4244 +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test + +release: + $(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + +debug: + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest *.bz2 + +test: + $(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(PROG) $(PERF_RUN_ARGS) + diff --git a/examples/graph/fgbzip2/blocksort.cpp b/examples/graph/fgbzip2/blocksort.cpp new file mode 100644 index 0000000..de4d980 --- /dev/null +++ b/examples/graph/fgbzip2/blocksort.cpp @@ -0,0 +1,1146 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Block sorting machinery ---*/ +/*--- blocksort.cpp ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + +/*---------------------------------------------*/ +/*--- Fallback O(N log(N)^2) sorting ---*/ +/*--- algorithm, for repetitive blocks ---*/ +/*---------------------------------------------*/ + +/*---------------------------------------------*/ +static +__inline__ +void fallbackSimpleSort ( UInt32* fmap, + UInt32* eclass, + Int32 lo, + Int32 hi ) +{ + Int32 i, j, tmp; + UInt32 ec_tmp; + + if (lo == hi) return; + + if (hi - lo > 3) { + for ( i = hi-4; i >= lo; i-- ) { + tmp = fmap[i]; + ec_tmp = eclass[tmp]; + for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 ) + fmap[j-4] = fmap[j]; + fmap[j-4] = tmp; + } + } + + for ( i = hi-1; i >= lo; i-- ) { + tmp = fmap[i]; + ec_tmp = eclass[tmp]; + for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ ) + fmap[j-1] = fmap[j]; + fmap[j-1] = tmp; + } +} + + +/*---------------------------------------------*/ +#define fswap(zz1, zz2) \ + { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } + +#define fvswap(zzp1, zzp2, zzn) \ +{ \ + Int32 yyp1 = (zzp1); \ + Int32 yyp2 = (zzp2); \ + Int32 yyn = (zzn); \ + while (yyn > 0) { \ + fswap(fmap[yyp1], fmap[yyp2]); \ + yyp1++; yyp2++; yyn--; \ + } \ +} + + +#define fmin(a,b) ((a) < (b)) ? (a) : (b) + +#define fpush(lz,hz) { stackLo[sp] = lz; \ + stackHi[sp] = hz; \ + sp++; } + +#define fpop(lz,hz) { sp--; \ + lz = stackLo[sp]; \ + hz = stackHi[sp]; } + +#define FALLBACK_QSORT_SMALL_THRESH 10 +#define FALLBACK_QSORT_STACK_SIZE 100 + + +static +void fallbackQSort3 ( UInt32* fmap, + UInt32* eclass, + Int32 loSt, + Int32 hiSt ) +{ + Int32 unLo, unHi, ltLo, gtHi, n, m; + Int32 sp, lo, hi; + UInt32 med, r, r3; + Int32 stackLo[FALLBACK_QSORT_STACK_SIZE]; + Int32 stackHi[FALLBACK_QSORT_STACK_SIZE]; + + r = 0; + + sp = 0; + fpush ( loSt, hiSt ); + + while (sp > 0) { + + AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 ); + + fpop ( lo, hi ); + if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) { + fallbackSimpleSort ( fmap, eclass, lo, hi ); + continue; + } + + /* Random partitioning. Median of 3 sometimes fails to + avoid bad cases. Median of 9 seems to help but + looks rather expensive. This too seems to work but + is cheaper. Guidance for the magic constants + 7621 and 32768 is taken from Sedgewick's algorithms + book, chapter 35. + */ + r = ((r * 7621) + 1) % 32768; + r3 = r % 3; + if (r3 == 0) med = eclass[fmap[lo]]; else + if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else + med = eclass[fmap[hi]]; + + unLo = ltLo = lo; + unHi = gtHi = hi; + + while (1) { + while (1) { + if (unLo > unHi) break; + n = (Int32)eclass[fmap[unLo]] - (Int32)med; + if (n == 0) { + fswap(fmap[unLo], fmap[ltLo]); + ltLo++; unLo++; + continue; + }; + if (n > 0) break; + unLo++; + } + while (1) { + if (unLo > unHi) break; + n = (Int32)eclass[fmap[unHi]] - (Int32)med; + if (n == 0) { + fswap(fmap[unHi], fmap[gtHi]); + gtHi--; unHi--; + continue; + }; + if (n < 0) break; + unHi--; + } + if (unLo > unHi) break; + fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--; + } + + AssertD ( unHi == unLo-1, "fallbackQSort3(2)" ); + + if (gtHi < ltLo) continue; + + n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n); + m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m); + + n = lo + unLo - ltLo - 1; + m = hi - (gtHi - unHi) + 1; + + if (n - lo > hi - m) { + fpush ( lo, n ); + fpush ( m, hi ); + } else { + fpush ( m, hi ); + fpush ( lo, n ); + } + } +} + +#undef fmin +#undef fpush +#undef fpop +#undef fswap +#undef fvswap +#undef FALLBACK_QSORT_SMALL_THRESH +#undef FALLBACK_QSORT_STACK_SIZE + + +/*---------------------------------------------*/ +/* Pre: + nblock > 0 + eclass exists for [0 .. nblock-1] + ((UChar*)eclass) [0 .. nblock-1] holds block + ptr exists for [0 .. nblock-1] + + Post: + ((UChar*)eclass) [0 .. nblock-1] holds block + All other areas of eclass destroyed + fmap [0 .. nblock-1] holds sorted order + bhtab [ 0 .. 2+(nblock/32) ] destroyed +*/ + +#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) +#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) +#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) +#define WORD_BH(zz) bhtab[(zz) >> 5] +#define UNALIGNED_BH(zz) ((zz) & 0x01f) + +static +void fallbackSort ( UInt32* fmap, + UInt32* eclass, + UInt32* bhtab, + Int32 nblock, + Int32 verb ) +{ + Int32 ftab[257]; + Int32 ftabCopy[256]; + Int32 H, i, j, k, l, r, cc, cc1; + Int32 nNotDone; + Int32 nBhtab; + UChar* eclass8 = (UChar*)eclass; + + /*-- + Initial 1-char radix sort to generate + initial fmap and initial BH bits. + --*/ + if (verb >= 4) + VPrintf0 ( " bucket sorting ...\n" ); + for (i = 0; i < 257; i++) ftab[i] = 0; + for (i = 0; i < nblock; i++) ftab[eclass8[i]]++; + for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i]; + for (i = 1; i < 257; i++) ftab[i] += ftab[i-1]; + + for (i = 0; i < nblock; i++) { + j = eclass8[i]; + k = ftab[j] - 1; + ftab[j] = k; + fmap[k] = i; + } + + nBhtab = 2 + (nblock / 32); + for (i = 0; i < nBhtab; i++) bhtab[i] = 0; + for (i = 0; i < 256; i++) SET_BH(ftab[i]); + + /*-- + Inductively refine the buckets. Kind-of an + "exponential radix sort" (!), inspired by the + Manber-Myers suffix array construction algorithm. + --*/ + + /*-- set sentinel bits for block-end detection --*/ + for (i = 0; i < 32; i++) { + SET_BH(nblock + 2*i); + CLEAR_BH(nblock + 2*i + 1); + } + + /*-- the log(N) loop --*/ + H = 1; + while (1) { + + if (verb >= 4) + VPrintf1 ( " depth %6d has ", H ); + + j = 0; + for (i = 0; i < nblock; i++) { + if (ISSET_BH(i)) j = i; + k = fmap[i] - H; if (k < 0) k += nblock; + eclass[k] = j; + } + + nNotDone = 0; + r = -1; + while (1) { + + /*-- find the next non-singleton bucket --*/ + k = r + 1; + while (ISSET_BH(k) && UNALIGNED_BH(k)) k++; + if (ISSET_BH(k)) { + while (WORD_BH(k) == 0xffffffff) k += 32; + while (ISSET_BH(k)) k++; + } + l = k - 1; + if (l >= nblock) break; + while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++; + if (!ISSET_BH(k)) { + while (WORD_BH(k) == 0x00000000) k += 32; + while (!ISSET_BH(k)) k++; + } + r = k - 1; + if (r >= nblock) break; + + /*-- now [l, r] bracket current bucket --*/ + if (r > l) { + nNotDone += (r - l + 1); + fallbackQSort3 ( fmap, eclass, l, r ); + + /*-- scan bucket and generate header bits-- */ + cc = -1; + for (i = l; i <= r; i++) { + cc1 = eclass[fmap[i]]; + if (cc != cc1) { SET_BH(i); cc = cc1; }; + } + } + } + + if (verb >= 4) + VPrintf1 ( "%6d unresolved strings\n", nNotDone ); + + H *= 2; + if (H > nblock || nNotDone == 0) break; + } + + /*-- + Reconstruct the original block in + eclass8 [0 .. nblock-1], since the + previous phase destroyed it. + --*/ + if (verb >= 4) + VPrintf0 ( " reconstructing block ...\n" ); + j = 0; + for (i = 0; i < nblock; i++) { + while (ftabCopy[j] == 0) j++; + ftabCopy[j]--; + eclass8[fmap[i]] = (UChar)j; + } + AssertH ( j < 256, 1005 ); +} + +#undef SET_BH +#undef CLEAR_BH +#undef ISSET_BH +#undef WORD_BH +#undef UNALIGNED_BH + + +/*---------------------------------------------*/ +/*--- The main, O(N^2 log(N)) sorting ---*/ +/*--- algorithm. Faster for "normal" ---*/ +/*--- non-repetitive blocks. ---*/ +/*---------------------------------------------*/ + +/*---------------------------------------------*/ +static +__inline__ +Bool mainGtU ( UInt32 i1, + UInt32 i2, + UChar* block, + UInt16* quadrant, + UInt32 nblock, + Int32* budget ) +{ + Int32 k; + UChar c1, c2; + UInt16 s1, s2; + + AssertD ( i1 != i2, "mainGtU" ); + /* 1 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 2 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 3 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 4 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 5 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 6 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 7 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 8 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 9 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 10 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 11 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + /* 12 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + i1++; i2++; + + k = nblock + 8; + + do { + /* 1 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 2 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 3 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 4 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 5 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 6 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 7 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + /* 8 */ + c1 = block[i1]; c2 = block[i2]; + if (c1 != c2) return (c1 > c2); + s1 = quadrant[i1]; s2 = quadrant[i2]; + if (s1 != s2) return (s1 > s2); + i1++; i2++; + + if (i1 >= nblock) i1 -= nblock; + if (i2 >= nblock) i2 -= nblock; + + k -= 8; + (*budget)--; + } + while (k >= 0); + + return False; +} + + +/*---------------------------------------------*/ +/*-- + Knuth's increments seem to work better + than Incerpi-Sedgewick here. Possibly + because the number of elements to sort + is usually small, typically <= 20. +--*/ +static +Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280, + 9841, 29524, 88573, 265720, + 797161, 2391484 }; + +static +void mainSimpleSort ( UInt32* ptr, + UChar* block, + UInt16* quadrant, + Int32 nblock, + Int32 lo, + Int32 hi, + Int32 d, + Int32* budget ) +{ + Int32 i, j, h, bigN, hp; + UInt32 v; + + bigN = hi - lo + 1; + if (bigN < 2) return; + + hp = 0; + while (incs[hp] < bigN) hp++; + hp--; + + for (; hp >= 0; hp--) { + h = incs[hp]; + + i = lo + h; + while (True) { + + /*-- copy 1 --*/ + if (i > hi) break; + v = ptr[i]; + j = i; + while ( mainGtU ( + ptr[j-h]+d, v+d, block, quadrant, nblock, budget + ) ) { + ptr[j] = ptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) break; + } + ptr[j] = v; + i++; + + /*-- copy 2 --*/ + if (i > hi) break; + v = ptr[i]; + j = i; + while ( mainGtU ( + ptr[j-h]+d, v+d, block, quadrant, nblock, budget + ) ) { + ptr[j] = ptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) break; + } + ptr[j] = v; + i++; + + /*-- copy 3 --*/ + if (i > hi) break; + v = ptr[i]; + j = i; + while ( mainGtU ( + ptr[j-h]+d, v+d, block, quadrant, nblock, budget + ) ) { + ptr[j] = ptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) break; + } + ptr[j] = v; + i++; + + if (*budget < 0) return; + } + } +} + + +/*---------------------------------------------*/ +/*-- + The following is an implementation of + an elegant 3-way quicksort for strings, + described in a paper "Fast Algorithms for + Sorting and Searching Strings", by Robert + Sedgewick and Jon L. Bentley. +--*/ + +#define mswap(zz1, zz2) \ + { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } + +#define mvswap(zzp1, zzp2, zzn) \ +{ \ + Int32 yyp1 = (zzp1); \ + Int32 yyp2 = (zzp2); \ + Int32 yyn = (zzn); \ + while (yyn > 0) { \ + mswap(ptr[yyp1], ptr[yyp2]); \ + yyp1++; yyp2++; yyn--; \ + } \ +} + +static +__inline__ +UChar mmed3 ( UChar a, UChar b, UChar c ) +{ + UChar t; + if (a > b) { t = a; a = b; b = t; }; + if (b > c) { + b = c; + if (a > b) b = a; + } + return b; +} + +#define mmin(a,b) ((a) < (b)) ? (a) : (b) + +#define mpush(lz,hz,dz) { stackLo[sp] = lz; \ + stackHi[sp] = hz; \ + stackD [sp] = dz; \ + sp++; } + +#define mpop(lz,hz,dz) { sp--; \ + lz = stackLo[sp]; \ + hz = stackHi[sp]; \ + dz = stackD [sp]; } + + +#define mnextsize(az) (nextHi[az]-nextLo[az]) + +#define mnextswap(az,bz) \ + { Int32 tz; \ + tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \ + tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \ + tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; } + + +#define MAIN_QSORT_SMALL_THRESH 20 +#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) +#define MAIN_QSORT_STACK_SIZE 100 + +static +void mainQSort3 ( UInt32* ptr, + UChar* block, + UInt16* quadrant, + Int32 nblock, + Int32 loSt, + Int32 hiSt, + Int32 dSt, + Int32* budget ) +{ + Int32 unLo, unHi, ltLo, gtHi, n, m, med; + Int32 sp, lo, hi, d; + + Int32 stackLo[MAIN_QSORT_STACK_SIZE]; + Int32 stackHi[MAIN_QSORT_STACK_SIZE]; + Int32 stackD [MAIN_QSORT_STACK_SIZE]; + + Int32 nextLo[3]; + Int32 nextHi[3]; + Int32 nextD [3]; + + sp = 0; + mpush ( loSt, hiSt, dSt ); + + while (sp > 0) { + + AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 ); + + mpop ( lo, hi, d ); + if (hi - lo < MAIN_QSORT_SMALL_THRESH || + d > MAIN_QSORT_DEPTH_THRESH) { + mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget ); + if (*budget < 0) return; + continue; + } + + med = (Int32) + mmed3 ( block[ptr[ lo ]+d], + block[ptr[ hi ]+d], + block[ptr[ (lo+hi)>>1 ]+d] ); + + unLo = ltLo = lo; + unHi = gtHi = hi; + + while (True) { + while (True) { + if (unLo > unHi) break; + n = ((Int32)block[ptr[unLo]+d]) - med; + if (n == 0) { + mswap(ptr[unLo], ptr[ltLo]); + ltLo++; unLo++; continue; + }; + if (n > 0) break; + unLo++; + } + while (True) { + if (unLo > unHi) break; + n = ((Int32)block[ptr[unHi]+d]) - med; + if (n == 0) { + mswap(ptr[unHi], ptr[gtHi]); + gtHi--; unHi--; continue; + }; + if (n < 0) break; + unHi--; + } + if (unLo > unHi) break; + mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--; + } + + AssertD ( unHi == unLo-1, "mainQSort3(2)" ); + + if (gtHi < ltLo) { + mpush(lo, hi, d+1 ); + continue; + } + + n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n); + m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m); + + n = lo + unLo - ltLo - 1; + m = hi - (gtHi - unHi) + 1; + + nextLo[0] = lo; nextHi[0] = n; nextD[0] = d; + nextLo[1] = m; nextHi[1] = hi; nextD[1] = d; + nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1; + + if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); + if (mnextsize(1) < mnextsize(2)) mnextswap(1,2); + if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); + + AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" ); + AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" ); + + mpush (nextLo[0], nextHi[0], nextD[0]); + mpush (nextLo[1], nextHi[1], nextD[1]); + mpush (nextLo[2], nextHi[2], nextD[2]); + } +} + +#undef mswap +#undef mvswap +#undef mpush +#undef mpop +#undef mmin +#undef mnextsize +#undef mnextswap +#undef MAIN_QSORT_SMALL_THRESH +#undef MAIN_QSORT_DEPTH_THRESH +#undef MAIN_QSORT_STACK_SIZE + + +/*---------------------------------------------*/ +/* Pre: + nblock > N_OVERSHOOT + block32 exists for [0 .. nblock-1 +N_OVERSHOOT] + ((UChar*)block32) [0 .. nblock-1] holds block + ptr exists for [0 .. nblock-1] + + Post: + ((UChar*)block32) [0 .. nblock-1] holds block + All other areas of block32 destroyed + ftab [0 .. 65536 ] destroyed + ptr [0 .. nblock-1] holds sorted order + if (*budget < 0), sorting was abandoned +*/ + +#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8]) +#define SETMASK (1 << 21) +#define CLEARMASK (~(SETMASK)) + +static +void mainSort ( UInt32* ptr, + UChar* block, + UInt16* quadrant, + UInt32* ftab, + Int32 nblock, + Int32 verb, + Int32* budget ) +{ + Int32 i, j, k, ss, sb; + Int32 runningOrder[256]; + Bool bigDone[256]; + Int32 copyStart[256]; + Int32 copyEnd [256]; + UChar c1; + Int32 numQSorted; + UInt16 s; + if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" ); + + /*-- set up the 2-byte frequency table --*/ + for (i = 65536; i >= 0; i--) ftab[i] = 0; + + j = block[0] << 8; + i = nblock-1; + for (; i >= 3; i -= 4) { + quadrant[i] = 0; + j = (j >> 8) | ( ((UInt16)block[i]) << 8); + ftab[j]++; + quadrant[i-1] = 0; + j = (j >> 8) | ( ((UInt16)block[i-1]) << 8); + ftab[j]++; + quadrant[i-2] = 0; + j = (j >> 8) | ( ((UInt16)block[i-2]) << 8); + ftab[j]++; + quadrant[i-3] = 0; + j = (j >> 8) | ( ((UInt16)block[i-3]) << 8); + ftab[j]++; + } + for (; i >= 0; i--) { + quadrant[i] = 0; + j = (j >> 8) | ( ((UInt16)block[i]) << 8); + ftab[j]++; + } + + /*-- (emphasises close relationship of block & quadrant) --*/ + for (i = 0; i < BZ_N_OVERSHOOT; i++) { + block [nblock+i] = block[i]; + quadrant[nblock+i] = 0; + } + + if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); + + /*-- Complete the initial radix sort --*/ + for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; + + s = block[0] << 8; + i = nblock-1; + for (; i >= 3; i -= 4) { + s = (s >> 8) | (block[i] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i; + s = (s >> 8) | (block[i-1] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i-1; + s = (s >> 8) | (block[i-2] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i-2; + s = (s >> 8) | (block[i-3] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i-3; + } + for (; i >= 0; i--) { + s = (s >> 8) | (block[i] << 8); + j = ftab[s] -1; + ftab[s] = j; + ptr[j] = i; + } + + /*-- + Now ftab contains the first loc of every small bucket. + Calculate the running order, from smallest to largest + big bucket. + --*/ + for (i = 0; i <= 255; i++) { + bigDone [i] = False; + runningOrder[i] = i; + } + + { + Int32 vv; + Int32 h = 1; + do h = 3 * h + 1; while (h <= 256); + do { + h = h / 3; + for (i = h; i <= 255; i++) { + vv = runningOrder[i]; + j = i; + while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) { + runningOrder[j] = runningOrder[j-h]; + j = j - h; + if (j <= (h - 1)) goto zero; + } + zero: + runningOrder[j] = vv; + } + } while (h != 1); + } + + /*-- + The main sorting loop. + --*/ + + numQSorted = 0; + + for (i = 0; i <= 255; i++) { + + /*-- + Process big buckets, starting with the least full. + Basically this is a 3-step process in which we call + mainQSort3 to sort the small buckets [ss, j], but + also make a big effort to avoid the calls if we can. + --*/ + ss = runningOrder[i]; + + /*-- + Step 1: + Complete the big bucket [ss] by quicksorting + any unsorted small buckets [ss, j], for j != ss. + Hopefully previous pointer-scanning phases have already + completed many of the small buckets [ss, j], so + we don't have to sort them at all. + --*/ + for (j = 0; j <= 255; j++) { + if (j != ss) { + sb = (ss << 8) + j; + if ( ! (ftab[sb] & SETMASK) ) { + Int32 lo = ftab[sb] & CLEARMASK; + Int32 hi = (ftab[sb+1] & CLEARMASK) - 1; + if (hi > lo) { + if (verb >= 4) + VPrintf4 ( " qsort [0x%x, 0x%x] " + "done %d this %d\n", + ss, j, numQSorted, hi - lo + 1 ); + mainQSort3 ( + ptr, block, quadrant, nblock, + lo, hi, BZ_N_RADIX, budget + ); + numQSorted += (hi - lo + 1); + if (*budget < 0) return; + } + } + ftab[sb] |= SETMASK; + } + } + + AssertH ( !bigDone[ss], 1006 ); + + /*-- + Step 2: + Now scan this big bucket [ss] so as to synthesise the + sorted order for small buckets [t, ss] for all t, + including, magically, the bucket [ss,ss] too. + This will avoid doing Real Work in subsequent Step 1's. + --*/ + { + for (j = 0; j <= 255; j++) { + copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK; + copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1; + } + for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) { + k = ptr[j]-1; if (k < 0) k += nblock; + c1 = block[k]; + if (!bigDone[c1]) + ptr[ copyStart[c1]++ ] = k; + } + for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) { + k = ptr[j]-1; if (k < 0) k += nblock; + c1 = block[k]; + if (!bigDone[c1]) + ptr[ copyEnd[c1]-- ] = k; + } + } + + AssertH ( (copyStart[ss]-1 == copyEnd[ss]) + || + /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1. + Necessity for this case is demonstrated by compressing + a sequence of approximately 48.5 million of character + 251; 1.0.0/1.0.1 will then die here. */ + (copyStart[ss] == 0 && copyEnd[ss] == nblock-1), + 1007 ) + + for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK; + + /*-- + Step 3: + The [ss] big bucket is now done. Record this fact, + and update the quadrant descriptors. Remember to + update quadrants in the overshoot area too, if + necessary. The "if (i < 255)" test merely skips + this updating for the last bucket processed, since + updating for the last bucket is pointless. + + The quadrant array provides a way to incrementally + cache sort orderings, as they appear, so as to + make subsequent comparisons in fullGtU() complete + faster. For repetitive blocks this makes a big + difference (but not big enough to be able to avoid + the fallback sorting mechanism, exponential radix sort). + + The precise meaning is: at all times: + + for 0 <= i < nblock and 0 <= j <= nblock + + if block[i] != block[j], + + then the relative values of quadrant[i] and + quadrant[j] are meaningless. + + else { + if quadrant[i] < quadrant[j] + then the string starting at i lexicographically + precedes the string starting at j + + else if quadrant[i] > quadrant[j] + then the string starting at j lexicographically + precedes the string starting at i + + else + the relative ordering of the strings starting + at i and j has not yet been determined. + } + --*/ + bigDone[ss] = True; + + if (i < 255) { + Int32 bbStart = ftab[ss << 8] & CLEARMASK; + Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; + Int32 shifts = 0; + + while ((bbSize >> shifts) > 65534) shifts++; + + for (j = bbSize-1; j >= 0; j--) { + Int32 a2update = ptr[bbStart + j]; + UInt16 qVal = (UInt16)(j >> shifts); + quadrant[a2update] = qVal; + if (a2update < BZ_N_OVERSHOOT) + quadrant[a2update + nblock] = qVal; + } + AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 ); + } + + } + + if (verb >= 4) + VPrintf3 ( " %d pointers, %d sorted, %d scanned\n", + nblock, numQSorted, nblock - numQSorted ); +} + +#undef BIGFREQ +#undef SETMASK +#undef CLEARMASK + + +/*---------------------------------------------*/ +/* Pre: + nblock > 0 + arr2 exists for [0 .. nblock-1 +N_OVERSHOOT] + ((UChar*)arr2) [0 .. nblock-1] holds block + arr1 exists for [0 .. nblock-1] + + Post: + ((UChar*)arr2) [0 .. nblock-1] holds block + All other areas of block destroyed + ftab [ 0 .. 65536 ] destroyed + arr1 [0 .. nblock-1] holds sorted order +*/ +void BZ2_blockSort ( EState* s ) +{ + UInt32* ptr = s->ptr; + UChar* block = s->block; + UInt32* ftab = s->ftab; + Int32 nblock = s->nblock; + Int32 verb = s->verbosity; + Int32 wfact = s->workFactor; + UInt16* quadrant; + Int32 budget; + Int32 budgetInit; + Int32 i; + + if (nblock < 10000) { + fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); + } else { + /* Calculate the location for quadrant, remembering to get + the alignment right. Assumes that &(block[0]) is at least + 2-byte aligned -- this should be ok since block is really + the first section of arr2. + */ + i = nblock+BZ_N_OVERSHOOT; + if (i & 1) i++; + quadrant = (UInt16*)(&(block[i])); + + /* (wfact-1) / 3 puts the default-factor-30 + transition point at very roughly the same place as + with v0.1 and v0.9.0. + Not that it particularly matters any more, since the + resulting compressed stream is now the same regardless + of whether or not we use the main sort or fallback sort. + */ + if (wfact < 1 ) wfact = 1; + if (wfact > 100) wfact = 100; + budgetInit = nblock * ((wfact-1) / 3); + budget = budgetInit; + + mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget ); + if (verb >= 3) + VPrintf3 ( " %d work, %d block, ratio %5.2f\n", + budgetInit - budget, + nblock, + (float)(budgetInit - budget) / + (float)(nblock==0 ? 1 : nblock) ); + if (budget < 0) { + if (verb >= 2) + VPrintf0 ( " too repetitive; using fallback" + " sorting algorithm\n" ); + fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); + } + } + + s->origPtr = -1; + for (i = 0; i < s->nblock; i++) + if (ptr[i] == 0) + { s->origPtr = i; break; }; + + AssertH( s->origPtr != -1, 1003 ); +} + + +/*-------------------------------------------------------------*/ +/*--- end blocksort.c ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/bzlib.cpp b/examples/graph/fgbzip2/bzlib.cpp new file mode 100644 index 0000000..4971e8a --- /dev/null +++ b/examples/graph/fgbzip2/bzlib.cpp @@ -0,0 +1,1624 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Library top-level functions. ---*/ +/*--- bzlib.cpp ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + +/* CHANGES + 0.9.0 -- original version. + 0.9.0a/b -- no changes in this file. + 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress(). + fixed bzWrite/bzRead to ignore zero-length requests. + fixed bzread to correctly handle read requests after EOF. + wrong parameter order in call to bzDecompressInit in + bzBuffToBuffDecompress. Fixed. +*/ + +#include "bzlib_private.h" + + +/*---------------------------------------------------*/ +/*--- Compression stuff ---*/ +/*---------------------------------------------------*/ + + +/*---------------------------------------------------*/ +#ifndef BZ_NO_STDIO +void BZ2_bz__AssertH__fail ( int errcode ) +{ + fprintf(stderr, + "\n\nbzip2/libbzip2: internal error number %d.\n" + "This is a bug in bzip2/libbzip2, %s.\n" + "Please report it to me at: jseward@bzip.org. If this happened\n" + "when you were using some program which uses libbzip2 as a\n" + "component, you should also report this bug to the author(s)\n" + "of that program. Please make an effort to report this bug;\n" + "timely and accurate bug reports eventually lead to higher\n" + "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", + errcode, + BZ2_bzlibVersion() + ); + + if (errcode == 1007) { + fprintf(stderr, + "\n*** A special note about internal error number 1007 ***\n" + "\n" + "Experience suggests that a common cause of i.e. 1007\n" + "is unreliable memory or other hardware. The 1007 assertion\n" + "just happens to cross-check the results of huge numbers of\n" + "memory reads/writes, and so acts (unintendedly) as a stress\n" + "test of your memory system.\n" + "\n" + "I suggest the following: try compressing the file again,\n" + "possibly monitoring progress in detail with the -vv flag.\n" + "\n" + "* If the error cannot be reproduced, and/or happens at different\n" + " points in compression, you may have a flaky memory system.\n" + " Try a memory-test program. I have used Memtest86\n" + " (www.memtest86.com). At the time of writing it is free (GPLd).\n" + " Memtest86 tests memory much more thorougly than your BIOSs\n" + " power-on test, and may find failures that the BIOS doesn't.\n" + "\n" + "* If the error can be repeatably reproduced, this is a bug in\n" + " bzip2, and I would very much like to hear about it. Please\n" + " let me know, and, ideally, save a copy of the file causing the\n" + " problem -- without which I will be unable to investigate it.\n" + "\n" + ); + } + + exit(3); +} +#endif + + +/*---------------------------------------------------*/ +static +int bz_config_ok ( void ) +{ + if (sizeof(int) != 4) return 0; + if (sizeof(short) != 2) return 0; + if (sizeof(char) != 1) return 0; + return 1; +} + + +/*---------------------------------------------------*/ +static +void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) +{ + void* v = malloc ( items * size ); + return v; +} + +static +void default_bzfree ( void* opaque, void* addr ) +{ + if (addr != NULL) free ( addr ); +} + + +/*---------------------------------------------------*/ +static +void prepare_new_block ( EState* s ) +{ + Int32 i; + s->nblock = 0; + s->numZ = 0; + s->state_out_pos = 0; + BZ_INITIALISE_CRC ( s->blockCRC ); + for (i = 0; i < 256; i++) s->inUse[i] = False; + s->blockNo++; +} + + +/*---------------------------------------------------*/ +static +void init_RL ( EState* s ) +{ + s->state_in_ch = 256; + s->state_in_len = 0; +} + + +static +Bool isempty_RL ( EState* s ) +{ + if (s->state_in_ch < 256 && s->state_in_len > 0) + return False; else + return True; +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzCompressInit) + ( bz_stream* strm, + int blockSize100k, + int verbosity, + int workFactor ) +{ + Int32 n; + EState* s; + + if (!bz_config_ok()) return BZ_CONFIG_ERROR; + + if (strm == NULL || + blockSize100k < 1 || blockSize100k > 9 || + workFactor < 0 || workFactor > 250) + return BZ_PARAM_ERROR; + + if (workFactor == 0) workFactor = 30; + if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; + if (strm->bzfree == NULL) strm->bzfree = default_bzfree; + + s = (EState*)BZALLOC( sizeof(EState) ); + if (s == NULL) return BZ_MEM_ERROR; + s->strm = strm; + + s->arr1 = NULL; + s->arr2 = NULL; + s->ftab = NULL; + + n = 100000 * blockSize100k; + s->arr1 = (UInt32*)BZALLOC( n * sizeof(UInt32) ); + s->arr2 = (UInt32*)BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); + s->ftab = (UInt32*)BZALLOC( 65537 * sizeof(UInt32) ); + + if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { + if (s->arr1 != NULL) BZFREE(s->arr1); + if (s->arr2 != NULL) BZFREE(s->arr2); + if (s->ftab != NULL) BZFREE(s->ftab); + if (s != NULL) BZFREE(s); + return BZ_MEM_ERROR; + } + + s->blockNo = 0; + s->state = BZ_S_INPUT; + s->mode = BZ_M_RUNNING; + s->combinedCRC = 0; + s->blockSize100k = blockSize100k; + s->nblockMAX = 100000 * blockSize100k - 19; + s->verbosity = verbosity; + s->workFactor = workFactor; + + s->block = (UChar*)s->arr2; + s->mtfv = (UInt16*)s->arr1; + s->zbits = NULL; + s->ptr = (UInt32*)s->arr1; + + strm->state = s; + strm->total_in_lo32 = 0; + strm->total_in_hi32 = 0; + strm->total_out_lo32 = 0; + strm->total_out_hi32 = 0; + init_RL ( s ); + prepare_new_block ( s ); + return BZ_OK; +} + + +/*---------------------------------------------------*/ +static +void add_pair_to_block ( EState* s ) +{ + Int32 i; + UChar ch = (UChar)(s->state_in_ch); + for (i = 0; i < s->state_in_len; i++) { + BZ_UPDATE_CRC( s->blockCRC, ch ); + } + s->inUse[s->state_in_ch] = True; + switch (s->state_in_len) { + case 1: + s->block[s->nblock] = (UChar)ch; s->nblock++; + break; + case 2: + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + break; + case 3: + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + break; + default: + s->inUse[s->state_in_len-4] = True; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = ((UChar)(s->state_in_len-4)); + s->nblock++; + break; + } +} + + +/*---------------------------------------------------*/ +static +void flush_RL ( EState* s ) +{ + if (s->state_in_ch < 256) add_pair_to_block ( s ); + init_RL ( s ); +} + + +/*---------------------------------------------------*/ +#define ADD_CHAR_TO_BLOCK(zs,zchh0) \ +{ \ + UInt32 zchh = (UInt32)(zchh0); \ + /*-- fast track the common case --*/ \ + if (zchh != zs->state_in_ch && \ + zs->state_in_len == 1) { \ + UChar ch = (UChar)(zs->state_in_ch); \ + BZ_UPDATE_CRC( zs->blockCRC, ch ); \ + zs->inUse[zs->state_in_ch] = True; \ + zs->block[zs->nblock] = (UChar)ch; \ + zs->nblock++; \ + zs->state_in_ch = zchh; \ + } \ + else \ + /*-- general, uncommon cases --*/ \ + if (zchh != zs->state_in_ch || \ + zs->state_in_len == 255) { \ + if (zs->state_in_ch < 256) \ + add_pair_to_block ( zs ); \ + zs->state_in_ch = zchh; \ + zs->state_in_len = 1; \ + } else { \ + zs->state_in_len++; \ + } \ +} + + +/*---------------------------------------------------*/ +static +Bool copy_input_until_stop ( EState* s ) +{ + Bool progress_in = False; + + if (s->mode == BZ_M_RUNNING) { + + /*-- fast track the common case --*/ + while (True) { + /*-- block full? --*/ + if (s->nblock >= s->nblockMAX) break; + /*-- no input? --*/ + if (s->strm->avail_in == 0) break; + progress_in = True; + ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); + s->strm->next_in++; + s->strm->avail_in--; + s->strm->total_in_lo32++; + if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; + } + + } else { + + /*-- general, uncommon case --*/ + while (True) { + /*-- block full? --*/ + if (s->nblock >= s->nblockMAX) break; + /*-- no input? --*/ + if (s->strm->avail_in == 0) break; + /*-- flush/finish end? --*/ + if (s->avail_in_expect == 0) break; + progress_in = True; + ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); + s->strm->next_in++; + s->strm->avail_in--; + s->strm->total_in_lo32++; + if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; + s->avail_in_expect--; + } + } + return progress_in; +} + + +/*---------------------------------------------------*/ +static +Bool copy_output_until_stop ( EState* s ) +{ + Bool progress_out = False; + + while (True) { + + /*-- no output space? --*/ + if (s->strm->avail_out == 0) break; + + /*-- block done? --*/ + if (s->state_out_pos >= s->numZ) break; + + progress_out = True; + *(s->strm->next_out) = s->zbits[s->state_out_pos]; + s->state_out_pos++; + s->strm->avail_out--; + s->strm->next_out++; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + return progress_out; +} + + +/*---------------------------------------------------*/ +static +Bool handle_compress ( bz_stream* strm ) +{ + Bool progress_in = False; + Bool progress_out = False; + EState* s = (EState*)strm->state; + + while (True) { + + if (s->state == BZ_S_OUTPUT) { + progress_out |= copy_output_until_stop ( s ); + if (s->state_out_pos < s->numZ) break; + if (s->mode == BZ_M_FINISHING && + s->avail_in_expect == 0 && + isempty_RL(s)) break; + prepare_new_block ( s ); + s->state = BZ_S_INPUT; + if (s->mode == BZ_M_FLUSHING && + s->avail_in_expect == 0 && + isempty_RL(s)) break; + } + + if (s->state == BZ_S_INPUT) { + progress_in |= copy_input_until_stop ( s ); + if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { + flush_RL ( s ); + BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); + s->state = BZ_S_OUTPUT; + } + else + if (s->nblock >= s->nblockMAX) { + BZ2_compressBlock ( s, False ); + s->state = BZ_S_OUTPUT; + } + else + if (s->strm->avail_in == 0) { + break; + } + } + + } + + return progress_in || progress_out; +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) +{ + Bool progress; + EState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = (EState*)strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + preswitch: + switch (s->mode) { + + case BZ_M_IDLE: + return BZ_SEQUENCE_ERROR; + + case BZ_M_RUNNING: + if (action == BZ_RUN) { + progress = handle_compress ( strm ); + return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; + } + else + if (action == BZ_FLUSH) { + s->avail_in_expect = strm->avail_in; + s->mode = BZ_M_FLUSHING; + goto preswitch; + } + else + if (action == BZ_FINISH) { + s->avail_in_expect = strm->avail_in; + s->mode = BZ_M_FINISHING; + goto preswitch; + } + else + return BZ_PARAM_ERROR; + + case BZ_M_FLUSHING: + if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; + if (s->avail_in_expect != s->strm->avail_in) + return BZ_SEQUENCE_ERROR; + progress = handle_compress ( strm ); + if (s->avail_in_expect > 0 || !isempty_RL(s) || + s->state_out_pos < s->numZ) return BZ_FLUSH_OK; + s->mode = BZ_M_RUNNING; + return BZ_RUN_OK; + + case BZ_M_FINISHING: + if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; + if (s->avail_in_expect != s->strm->avail_in) + return BZ_SEQUENCE_ERROR; + progress = handle_compress ( strm ); + if (!progress) return BZ_SEQUENCE_ERROR; + if (s->avail_in_expect > 0 || !isempty_RL(s) || + s->state_out_pos < s->numZ) return BZ_FINISH_OK; + s->mode = BZ_M_IDLE; + return BZ_STREAM_END; + } + return BZ_OK; /*--not reached--*/ +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) +{ + EState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = (EState*)strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + if (s->arr1 != NULL) BZFREE(s->arr1); + if (s->arr2 != NULL) BZFREE(s->arr2); + if (s->ftab != NULL) BZFREE(s->ftab); + BZFREE(strm->state); + + strm->state = NULL; + + return BZ_OK; +} + + +/*---------------------------------------------------*/ +/*--- Decompression stuff ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzDecompressInit) + ( bz_stream* strm, + int verbosity, + int small ) +{ + DState* s; + + if (!bz_config_ok()) return BZ_CONFIG_ERROR; + + if (strm == NULL) return BZ_PARAM_ERROR; + if (small != 0 && small != 1) return BZ_PARAM_ERROR; + if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; + + if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; + if (strm->bzfree == NULL) strm->bzfree = default_bzfree; + + s = (DState*)BZALLOC( sizeof(DState) ); + if (s == NULL) return BZ_MEM_ERROR; + s->strm = strm; + strm->state = s; + s->state = BZ_X_MAGIC_1; + s->bsLive = 0; + s->bsBuff = 0; + s->calculatedCombinedCRC = 0; + strm->total_in_lo32 = 0; + strm->total_in_hi32 = 0; + strm->total_out_lo32 = 0; + strm->total_out_hi32 = 0; + s->smallDecompress = (Bool)small; + s->ll4 = NULL; + s->ll16 = NULL; + s->tt = NULL; + s->currBlockNo = 0; + s->verbosity = verbosity; + + return BZ_OK; +} + + +/*---------------------------------------------------*/ +/* Return True iff data corruption is discovered. + Returns False if there is no problem. +*/ +static +Bool unRLE_obuf_to_output_FAST ( DState* s ) +{ + UChar k1; + + if (s->blockRandomised) { + + while (True) { + /* try to finish existing run */ + while (True) { + if (s->strm->avail_out == 0) return False; + if (s->state_out_len == 0) break; + *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; + BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); + s->state_out_len--; + s->strm->next_out++; + s->strm->avail_out--; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + /* can a new run be started? */ + if (s->nblock_used == s->save_nblock+1) return False; + + /* Only caused by corrupt data stream? */ + if (s->nblock_used > s->save_nblock+1) + return True; + + s->state_out_len = 1; + s->state_out_ch = s->k0; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 2; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 3; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + s->state_out_len = ((Int32)k1) + 4; + BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; + s->k0 ^= BZ_RAND_MASK; s->nblock_used++; + } + + } else { + + /* restore */ + UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC; + UChar c_state_out_ch = s->state_out_ch; + Int32 c_state_out_len = s->state_out_len; + Int32 c_nblock_used = s->nblock_used; + Int32 c_k0 = s->k0; + UInt32* c_tt = s->tt; + UInt32 c_tPos = s->tPos; + char* cs_next_out = s->strm->next_out; + unsigned int cs_avail_out = s->strm->avail_out; + Int32 ro_blockSize100k = s->blockSize100k; + /* end restore */ + + UInt32 avail_out_INIT = cs_avail_out; + Int32 s_save_nblockPP = s->save_nblock+1; + unsigned int total_out_lo32_old; + + while (True) { + + /* try to finish existing run */ + if (c_state_out_len > 0) { + while (True) { + if (cs_avail_out == 0) goto return_notr; + if (c_state_out_len == 1) break; + *( (UChar*)(cs_next_out) ) = c_state_out_ch; + BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); + c_state_out_len--; + cs_next_out++; + cs_avail_out--; + } + s_state_out_len_eq_one: + { + if (cs_avail_out == 0) { + c_state_out_len = 1; goto return_notr; + }; + *( (UChar*)(cs_next_out) ) = c_state_out_ch; + BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); + cs_next_out++; + cs_avail_out--; + } + } + /* Only caused by corrupt data stream? */ + if (c_nblock_used > s_save_nblockPP) + return True; + + /* can a new run be started? */ + if (c_nblock_used == s_save_nblockPP) { + c_state_out_len = 0; goto return_notr; + }; + c_state_out_ch = c_k0; + BZ_GET_FAST_C(k1); c_nblock_used++; + if (k1 != c_k0) { + c_k0 = k1; goto s_state_out_len_eq_one; + }; + if (c_nblock_used == s_save_nblockPP) + goto s_state_out_len_eq_one; + + c_state_out_len = 2; + BZ_GET_FAST_C(k1); c_nblock_used++; + if (c_nblock_used == s_save_nblockPP) continue; + if (k1 != c_k0) { c_k0 = k1; continue; }; + + c_state_out_len = 3; + BZ_GET_FAST_C(k1); c_nblock_used++; + if (c_nblock_used == s_save_nblockPP) continue; + if (k1 != c_k0) { c_k0 = k1; continue; }; + + BZ_GET_FAST_C(k1); c_nblock_used++; + c_state_out_len = ((Int32)k1) + 4; + BZ_GET_FAST_C(c_k0); c_nblock_used++; + } + + return_notr: + total_out_lo32_old = s->strm->total_out_lo32; + s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out); + if (s->strm->total_out_lo32 < total_out_lo32_old) + s->strm->total_out_hi32++; + + /* save */ + s->calculatedBlockCRC = c_calculatedBlockCRC; + s->state_out_ch = c_state_out_ch; + s->state_out_len = c_state_out_len; + s->nblock_used = c_nblock_used; + s->k0 = c_k0; + s->tt = c_tt; + s->tPos = c_tPos; + s->strm->next_out = cs_next_out; + s->strm->avail_out = cs_avail_out; + /* end save */ + } + return False; +} + + + +/*---------------------------------------------------*/ +Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab ) +{ + Int32 nb, na, mid; + nb = 0; + na = 256; + do { + mid = (nb + na) >> 1; + if (indx >= cftab[mid]) nb = mid; else na = mid; + } + while (na - nb != 1); + return nb; +} + + +/*---------------------------------------------------*/ +/* Return True iff data corruption is discovered. + Returns False if there is no problem. +*/ +static +Bool unRLE_obuf_to_output_SMALL ( DState* s ) +{ + UChar k1; + + if (s->blockRandomised) { + + while (True) { + /* try to finish existing run */ + while (True) { + if (s->strm->avail_out == 0) return False; + if (s->state_out_len == 0) break; + *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; + BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); + s->state_out_len--; + s->strm->next_out++; + s->strm->avail_out--; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + /* can a new run be started? */ + if (s->nblock_used == s->save_nblock+1) return False; + + /* Only caused by corrupt data stream? */ + if (s->nblock_used > s->save_nblock+1) + return True; + + s->state_out_len = 1; + s->state_out_ch = s->k0; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 2; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 3; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + k1 ^= BZ_RAND_MASK; s->nblock_used++; + s->state_out_len = ((Int32)k1) + 4; + BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; + s->k0 ^= BZ_RAND_MASK; s->nblock_used++; + } + + } else { + + while (True) { + /* try to finish existing run */ + while (True) { + if (s->strm->avail_out == 0) return False; + if (s->state_out_len == 0) break; + *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; + BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); + s->state_out_len--; + s->strm->next_out++; + s->strm->avail_out--; + s->strm->total_out_lo32++; + if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; + } + + /* can a new run be started? */ + if (s->nblock_used == s->save_nblock+1) return False; + + /* Only caused by corrupt data stream? */ + if (s->nblock_used > s->save_nblock+1) + return True; + + s->state_out_len = 1; + s->state_out_ch = s->k0; + BZ_GET_SMALL(k1); s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 2; + BZ_GET_SMALL(k1); s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + s->state_out_len = 3; + BZ_GET_SMALL(k1); s->nblock_used++; + if (s->nblock_used == s->save_nblock+1) continue; + if (k1 != s->k0) { s->k0 = k1; continue; }; + + BZ_GET_SMALL(k1); s->nblock_used++; + s->state_out_len = ((Int32)k1) + 4; + BZ_GET_SMALL(s->k0); s->nblock_used++; + } + + } +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) +{ + Bool corrupt; + DState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = (DState*)strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + while (True) { + if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; + if (s->state == BZ_X_OUTPUT) { + if (s->smallDecompress) + corrupt = unRLE_obuf_to_output_SMALL ( s ); else + corrupt = unRLE_obuf_to_output_FAST ( s ); + if (corrupt) return BZ_DATA_ERROR; + if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { + BZ_FINALISE_CRC ( s->calculatedBlockCRC ); + if (s->verbosity >= 3) + VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, + s->calculatedBlockCRC ); + if (s->verbosity >= 2) VPrintf0 ( "]" ); + if (s->calculatedBlockCRC != s->storedBlockCRC) + return BZ_DATA_ERROR; + s->calculatedCombinedCRC + = (s->calculatedCombinedCRC << 1) | + (s->calculatedCombinedCRC >> 31); + s->calculatedCombinedCRC ^= s->calculatedBlockCRC; + s->state = BZ_X_BLKHDR_1; + } else { + return BZ_OK; + } + } + if (s->state >= BZ_X_MAGIC_1) { + Int32 r = BZ2_decompress ( s ); + if (r == BZ_STREAM_END) { + if (s->verbosity >= 3) + VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", + s->storedCombinedCRC, s->calculatedCombinedCRC ); + if (s->calculatedCombinedCRC != s->storedCombinedCRC) + return BZ_DATA_ERROR; + return r; + } + if (s->state != BZ_X_OUTPUT) return r; + } + } + + AssertH ( 0, 6001 ); + + return 0; /*NOTREACHED*/ +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) +{ + DState* s; + if (strm == NULL) return BZ_PARAM_ERROR; + s = (DState*)strm->state; + if (s == NULL) return BZ_PARAM_ERROR; + if (s->strm != strm) return BZ_PARAM_ERROR; + + if (s->tt != NULL) BZFREE(s->tt); + if (s->ll16 != NULL) BZFREE(s->ll16); + if (s->ll4 != NULL) BZFREE(s->ll4); + + BZFREE(strm->state); + strm->state = NULL; + + return BZ_OK; +} + + +#ifndef BZ_NO_STDIO +/*---------------------------------------------------*/ +/*--- File I/O stuff ---*/ +/*---------------------------------------------------*/ + +#define BZ_SETERR(eee) \ +{ \ + if (bzerror != NULL) *bzerror = eee; \ + if (bzf != NULL) bzf->lastErr = eee; \ +} + +typedef + struct { + FILE* handle; + Char buf[BZ_MAX_UNUSED]; + Int32 bufN; + Bool writing; + bz_stream strm; + Int32 lastErr; + Bool initialisedOk; + } + bzFile; + + +/*---------------------------------------------*/ +static Bool myfeof ( FILE* f ) +{ + Int32 c = fgetc ( f ); + if (c == EOF) return True; + ungetc ( c, f ); + return False; +} + + +/*---------------------------------------------------*/ +BZFILE* BZ_API(BZ2_bzWriteOpen) + ( int* bzerror, + FILE* f, + int blockSize100k, + int verbosity, + int workFactor ) +{ + Int32 ret; + bzFile* bzf = NULL; + + BZ_SETERR(BZ_OK); + + if (f == NULL || + (blockSize100k < 1 || blockSize100k > 9) || + (workFactor < 0 || workFactor > 250) || + (verbosity < 0 || verbosity > 4)) + { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; + + if (ferror(f)) + { BZ_SETERR(BZ_IO_ERROR); return NULL; }; + + bzf = (bzFile*)malloc ( sizeof(bzFile) ); + if (bzf == NULL) + { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; + + BZ_SETERR(BZ_OK); + bzf->initialisedOk = False; + bzf->bufN = 0; + bzf->handle = f; + bzf->writing = True; + bzf->strm.bzalloc = NULL; + bzf->strm.bzfree = NULL; + bzf->strm.opaque = NULL; + + if (workFactor == 0) workFactor = 30; + ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, + verbosity, workFactor ); + if (ret != BZ_OK) + { BZ_SETERR(ret); free(bzf); return NULL; }; + + bzf->strm.avail_in = 0; + bzf->initialisedOk = True; + return bzf; +} + + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzWrite) + ( int* bzerror, + BZFILE* b, + void* buf, + int len ) +{ + Int32 n, n2, ret; + bzFile* bzf = (bzFile*)b; + + BZ_SETERR(BZ_OK); + if (bzf == NULL || buf == NULL || len < 0) + { BZ_SETERR(BZ_PARAM_ERROR); return; }; + if (!(bzf->writing)) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + + if (len == 0) + { BZ_SETERR(BZ_OK); return; }; + + bzf->strm.avail_in = len; + bzf->strm.next_in = (char*)buf; + + while (True) { + bzf->strm.avail_out = BZ_MAX_UNUSED; + bzf->strm.next_out = bzf->buf; + ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN ); + if (ret != BZ_RUN_OK) + { BZ_SETERR(ret); return; }; + + if (bzf->strm.avail_out < BZ_MAX_UNUSED) { + n = BZ_MAX_UNUSED - bzf->strm.avail_out; + n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), + n, bzf->handle ); + if (n != n2 || ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + } + + if (bzf->strm.avail_in == 0) + { BZ_SETERR(BZ_OK); return; }; + } +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzWriteClose) + ( int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in, + unsigned int* nbytes_out ) +{ + BZ2_bzWriteClose64 ( bzerror, b, abandon, + nbytes_in, NULL, nbytes_out, NULL ); +} + + +void BZ_API(BZ2_bzWriteClose64) + ( int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in_lo32, + unsigned int* nbytes_in_hi32, + unsigned int* nbytes_out_lo32, + unsigned int* nbytes_out_hi32 ) +{ + Int32 n, n2, ret; + bzFile* bzf = (bzFile*)b; + + if (bzf == NULL) + { BZ_SETERR(BZ_OK); return; }; + if (!(bzf->writing)) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + + if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0; + if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0; + if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0; + if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0; + + if ((!abandon) && bzf->lastErr == BZ_OK) { + while (True) { + bzf->strm.avail_out = BZ_MAX_UNUSED; + bzf->strm.next_out = bzf->buf; + ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH ); + if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) + { BZ_SETERR(ret); return; }; + + if (bzf->strm.avail_out < BZ_MAX_UNUSED) { + n = BZ_MAX_UNUSED - bzf->strm.avail_out; + n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), + n, bzf->handle ); + if (n != n2 || ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + } + + if (ret == BZ_STREAM_END) break; + } + } + + if ( !abandon && !ferror ( bzf->handle ) ) { + fflush ( bzf->handle ); + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return; }; + } + + if (nbytes_in_lo32 != NULL) + *nbytes_in_lo32 = bzf->strm.total_in_lo32; + if (nbytes_in_hi32 != NULL) + *nbytes_in_hi32 = bzf->strm.total_in_hi32; + if (nbytes_out_lo32 != NULL) + *nbytes_out_lo32 = bzf->strm.total_out_lo32; + if (nbytes_out_hi32 != NULL) + *nbytes_out_hi32 = bzf->strm.total_out_hi32; + + BZ_SETERR(BZ_OK); + BZ2_bzCompressEnd ( &(bzf->strm) ); + free ( bzf ); +} + + +/*---------------------------------------------------*/ +BZFILE* BZ_API(BZ2_bzReadOpen) + ( int* bzerror, + FILE* f, + int verbosity, + int small, + void* unused, + int nUnused ) +{ + bzFile* bzf = NULL; + int ret; + + BZ_SETERR(BZ_OK); + + if (f == NULL || + (small != 0 && small != 1) || + (verbosity < 0 || verbosity > 4) || + (unused == NULL && nUnused != 0) || + (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED))) + { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; + + if (ferror(f)) + { BZ_SETERR(BZ_IO_ERROR); return NULL; }; + + bzf = (bzFile*)malloc ( sizeof(bzFile) ); + if (bzf == NULL) + { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; + + BZ_SETERR(BZ_OK); + + bzf->initialisedOk = False; + bzf->handle = f; + bzf->bufN = 0; + bzf->writing = False; + bzf->strm.bzalloc = NULL; + bzf->strm.bzfree = NULL; + bzf->strm.opaque = NULL; + + while (nUnused > 0) { + bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; + unused = ((void*)( 1 + ((UChar*)(unused)) )); + nUnused--; + } + + ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small ); + if (ret != BZ_OK) + { BZ_SETERR(ret); free(bzf); return NULL; }; + + bzf->strm.avail_in = bzf->bufN; + bzf->strm.next_in = bzf->buf; + + bzf->initialisedOk = True; + return bzf; +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) +{ + bzFile* bzf = (bzFile*)b; + + BZ_SETERR(BZ_OK); + if (bzf == NULL) + { BZ_SETERR(BZ_OK); return; }; + + if (bzf->writing) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + + if (bzf->initialisedOk) + (void)BZ2_bzDecompressEnd ( &(bzf->strm) ); + free ( bzf ); +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzRead) + ( int* bzerror, + BZFILE* b, + void* buf, + int len ) +{ + Int32 n, ret; + bzFile* bzf = (bzFile*)b; + + BZ_SETERR(BZ_OK); + + if (bzf == NULL || buf == NULL || len < 0) + { BZ_SETERR(BZ_PARAM_ERROR); return 0; }; + + if (bzf->writing) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; }; + + if (len == 0) + { BZ_SETERR(BZ_OK); return 0; }; + + bzf->strm.avail_out = len; + bzf->strm.next_out = (char*)buf; + + while (True) { + + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return 0; }; + + if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { + n = fread ( bzf->buf, sizeof(UChar), + BZ_MAX_UNUSED, bzf->handle ); + if (ferror(bzf->handle)) + { BZ_SETERR(BZ_IO_ERROR); return 0; }; + bzf->bufN = n; + bzf->strm.avail_in = bzf->bufN; + bzf->strm.next_in = bzf->buf; + } + + ret = BZ2_bzDecompress ( &(bzf->strm) ); + + if (ret != BZ_OK && ret != BZ_STREAM_END) + { BZ_SETERR(ret); return 0; }; + + if (ret == BZ_OK && myfeof(bzf->handle) && + bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) + { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; + + if (ret == BZ_STREAM_END) + { BZ_SETERR(BZ_STREAM_END); + return len - bzf->strm.avail_out; }; + if (bzf->strm.avail_out == 0) + { BZ_SETERR(BZ_OK); return len; }; + + } + + return 0; /*not reached*/ +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzReadGetUnused) + ( int* bzerror, + BZFILE* b, + void** unused, + int* nUnused ) +{ + bzFile* bzf = (bzFile*)b; + if (bzf == NULL) + { BZ_SETERR(BZ_PARAM_ERROR); return; }; + if (bzf->lastErr != BZ_STREAM_END) + { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; + if (unused == NULL || nUnused == NULL) + { BZ_SETERR(BZ_PARAM_ERROR); return; }; + + BZ_SETERR(BZ_OK); + *nUnused = bzf->strm.avail_in; + *unused = bzf->strm.next_in; +} +#endif + + +/*---------------------------------------------------*/ +/*--- Misc convenience stuff ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzBuffToBuffCompress) + ( char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int blockSize100k, + int verbosity, + int workFactor ) +{ + bz_stream strm; + int ret; + + if (dest == NULL || destLen == NULL || + source == NULL || + blockSize100k < 1 || blockSize100k > 9 || + verbosity < 0 || verbosity > 4 || + workFactor < 0 || workFactor > 250) + return BZ_PARAM_ERROR; + + if (workFactor == 0) workFactor = 30; + strm.bzalloc = NULL; + strm.bzfree = NULL; + strm.opaque = NULL; + ret = BZ2_bzCompressInit ( &strm, blockSize100k, + verbosity, workFactor ); + if (ret != BZ_OK) return ret; + + strm.next_in = source; + strm.next_out = dest; + strm.avail_in = sourceLen; + strm.avail_out = *destLen; + + ret = BZ2_bzCompress ( &strm, BZ_FINISH ); + if (ret == BZ_FINISH_OK) goto output_overflow; + if (ret != BZ_STREAM_END) goto errhandler; + + /* normal termination */ + *destLen -= strm.avail_out; + BZ2_bzCompressEnd ( &strm ); + return BZ_OK; + + output_overflow: + BZ2_bzCompressEnd ( &strm ); + return BZ_OUTBUFF_FULL; + + errhandler: + BZ2_bzCompressEnd ( &strm ); + return ret; +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzBuffToBuffDecompress) + ( char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int small, + int verbosity ) +{ + bz_stream strm; + int ret; + + if (dest == NULL || destLen == NULL || + source == NULL || + (small != 0 && small != 1) || + verbosity < 0 || verbosity > 4) + return BZ_PARAM_ERROR; + + strm.bzalloc = NULL; + strm.bzfree = NULL; + strm.opaque = NULL; + ret = BZ2_bzDecompressInit ( &strm, verbosity, small ); + if (ret != BZ_OK) return ret; + + strm.next_in = source; + strm.next_out = dest; + strm.avail_in = sourceLen; + strm.avail_out = *destLen; + + ret = BZ2_bzDecompress ( &strm ); + if (ret == BZ_OK) goto output_overflow_or_eof; + if (ret != BZ_STREAM_END) goto errhandler; + + /* normal termination */ + *destLen -= strm.avail_out; + BZ2_bzDecompressEnd ( &strm ); + return BZ_OK; + + output_overflow_or_eof: + if (strm.avail_out > 0) { + BZ2_bzDecompressEnd ( &strm ); + return BZ_UNEXPECTED_EOF; + } else { + BZ2_bzDecompressEnd ( &strm ); + return BZ_OUTBUFF_FULL; + }; + + errhandler: + BZ2_bzDecompressEnd ( &strm ); + return ret; +} + + +/*---------------------------------------------------*/ +/*-- + Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) + to support better zlib compatibility. + This code is not _officially_ part of libbzip2 (yet); + I haven't tested it, documented it, or considered the + threading-safeness of it. + If this code breaks, please contact both Yoshioka and me. +--*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +/*-- + return version like "0.9.5d, 4-Sept-1999". +--*/ +const char * BZ_API(BZ2_bzlibVersion)(void) +{ + return BZ_VERSION; +} + + +#ifndef BZ_NO_STDIO +/*---------------------------------------------------*/ + +#if defined(_WIN32) || defined(OS2) || defined(MSDOS) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif +static +BZFILE * bzopen_or_bzdopen + ( const char *path, /* no use when bzdopen */ + int fd, /* no use when bzdopen */ + const char *mode, + int open_mode) /* bzopen: 0, bzdopen:1 */ +{ + int bzerr; + char unused[BZ_MAX_UNUSED]; + int blockSize100k = 9; + int writing = 0; + char mode2[10] = ""; + FILE *fp = NULL; + BZFILE *bzfp = NULL; + int verbosity = 0; + int workFactor = 30; + int smallMode = 0; + int nUnused = 0; + + if (mode == NULL) return NULL; + while (*mode) { + switch (*mode) { + case 'r': + writing = 0; break; + case 'w': + writing = 1; break; + case 's': + smallMode = 1; break; + default: + if (isdigit((int)(*mode))) { + blockSize100k = *mode-BZ_HDR_0; + } + } + mode++; + } + strcat(mode2, writing ? "w" : "r" ); + strcat(mode2,"b"); /* binary mode */ + + if (open_mode==0) { + if (path==NULL || strcmp(path,"")==0) { + fp = (writing ? stdout : stdin); + SET_BINARY_MODE(fp); + } else { + fp = fopen(path,mode2); + } + } else { +#ifdef BZ_STRICT_ANSI + fp = NULL; +#else + fp = fdopen(fd,mode2); +#endif + } + if (fp == NULL) return NULL; + + if (writing) { + /* Guard against total chaos and anarchy -- JRS */ + if (blockSize100k < 1) blockSize100k = 1; + if (blockSize100k > 9) blockSize100k = 9; + bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, + verbosity,workFactor); + } else { + bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode, + unused,nUnused); + } + if (bzfp == NULL) { + if (fp != stdin && fp != stdout) fclose(fp); + return NULL; + } + return bzfp; +} + + +/*---------------------------------------------------*/ +/*-- + open file for read or write. + ex) bzopen("file","w9") + case path="" or NULL => use stdin or stdout. +--*/ +BZFILE * BZ_API(BZ2_bzopen) + ( const char *path, + const char *mode ) +{ + return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0); +} + + +/*---------------------------------------------------*/ +BZFILE * BZ_API(BZ2_bzdopen) + ( int fd, + const char *mode ) +{ + return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1); +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len ) +{ + int bzerr, nread; + if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0; + nread = BZ2_bzRead(&bzerr,b,buf,len); + if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) { + return nread; + } else { + return -1; + } +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len ) +{ + int bzerr; + + BZ2_bzWrite(&bzerr,b,buf,len); + if(bzerr == BZ_OK){ + return len; + }else{ + return -1; + } +} + + +/*---------------------------------------------------*/ +int BZ_API(BZ2_bzflush) (BZFILE *b) +{ + /* do nothing now... */ + return 0; +} + + +/*---------------------------------------------------*/ +void BZ_API(BZ2_bzclose) (BZFILE* b) +{ + int bzerr; + FILE *fp; + + if (b==NULL) {return;} + fp = ((bzFile *)b)->handle; + if(((bzFile*)b)->writing){ + BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); + if(bzerr != BZ_OK){ + BZ2_bzWriteClose(NULL,b,1,NULL,NULL); + } + }else{ + BZ2_bzReadClose(&bzerr,b); + } + if(fp!=stdin && fp!=stdout){ + fclose(fp); + } +} + + +/*---------------------------------------------------*/ +/*-- + return last error code +--*/ +static const char *bzerrorstrings[] = { + "OK" + ,"SEQUENCE_ERROR" + ,"PARAM_ERROR" + ,"MEM_ERROR" + ,"DATA_ERROR" + ,"DATA_ERROR_MAGIC" + ,"IO_ERROR" + ,"UNEXPECTED_EOF" + ,"OUTBUFF_FULL" + ,"CONFIG_ERROR" + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ + ,"???" /* for future */ +}; + + +const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum) +{ + int err = ((bzFile *)b)->lastErr; + + if(err>0) err = 0; + *errnum = err; + return bzerrorstrings[err*-1]; +} +#endif + + +/*-------------------------------------------------------------*/ +/*--- end bzlib.c ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/bzlib.h b/examples/graph/fgbzip2/bzlib.h new file mode 100644 index 0000000..de825ae --- /dev/null +++ b/examples/graph/fgbzip2/bzlib.h @@ -0,0 +1,334 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Public header file for the library. ---*/ +/*--- bzlib.h ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +#ifndef _BZLIB_H +#define _BZLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define BZ_RUN 0 +#define BZ_FLUSH 1 +#define BZ_FINISH 2 + +#define BZ_OK 0 +#define BZ_RUN_OK 1 +#define BZ_FLUSH_OK 2 +#define BZ_FINISH_OK 3 +#define BZ_STREAM_END 4 +#define BZ_SEQUENCE_ERROR (-1) +#define BZ_PARAM_ERROR (-2) +#define BZ_MEM_ERROR (-3) +#define BZ_DATA_ERROR (-4) +#define BZ_DATA_ERROR_MAGIC (-5) +#define BZ_IO_ERROR (-6) +#define BZ_UNEXPECTED_EOF (-7) +#define BZ_OUTBUFF_FULL (-8) +#define BZ_CONFIG_ERROR (-9) + +typedef + struct { + char *next_in; + unsigned int avail_in; + unsigned int total_in_lo32; + unsigned int total_in_hi32; + + char *next_out; + unsigned int avail_out; + unsigned int total_out_lo32; + unsigned int total_out_hi32; + + void *state; + + void *(*bzalloc)(void *,int,int); + void (*bzfree)(void *,void *); + void *opaque; + } + bz_stream; + + +#ifndef BZ_IMPORT +#define BZ_EXPORT +#endif + +#ifndef BZ_NO_STDIO +/* Need a definitition for FILE */ +#include +#endif + +#ifdef _WIN32 +# include +# ifdef small + /* windows.h define small to char */ +# undef small +# endif +# ifdef BZ_EXPORT +# define BZ_API(func) WINAPI func +# define BZ_EXTERN extern +# else + /* import windows dll dynamically */ +# define BZ_API(func) (WINAPI * func) +# define BZ_EXTERN +# endif +#else +# define BZ_API(func) func +# define BZ_EXTERN extern +#endif + + +/*-- Core (low-level) library functions --*/ + +BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( + bz_stream* strm, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN int BZ_API(BZ2_bzCompress) ( + bz_stream* strm, + int action + ); + +BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( + bz_stream* strm + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( + bz_stream *strm, + int verbosity, + int small + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( + bz_stream* strm + ); + +BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( + bz_stream *strm + ); + + + +/*-- High(er) level library functions --*/ + +#ifndef BZ_NO_STDIO +#define BZ_MAX_UNUSED 5000 + +typedef void BZFILE; + +BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( + int* bzerror, + FILE* f, + int verbosity, + int small, + void* unused, + int nUnused + ); + +BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( + int* bzerror, + BZFILE* b + ); + +BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( + int* bzerror, + BZFILE* b, + void** unused, + int* nUnused + ); + +BZ_EXTERN int BZ_API(BZ2_bzRead) ( + int* bzerror, + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( + int* bzerror, + FILE* f, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN void BZ_API(BZ2_bzWrite) ( + int* bzerror, + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( + int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in, + unsigned int* nbytes_out + ); + +BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( + int* bzerror, + BZFILE* b, + int abandon, + unsigned int* nbytes_in_lo32, + unsigned int* nbytes_in_hi32, + unsigned int* nbytes_out_lo32, + unsigned int* nbytes_out_hi32 + ); +#endif + + +/*-- Utility functions --*/ + +BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( + char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int blockSize100k, + int verbosity, + int workFactor + ); + +BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( + char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int small, + int verbosity + ); + + +/*-- + Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) + to support better zlib compatibility. + This code is not _officially_ part of libbzip2 (yet); + I haven't tested it, documented it, or considered the + threading-safeness of it. + If this code breaks, please contact both Yoshioka and me. +--*/ + +BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( + void + ); + +#ifndef BZ_NO_STDIO +BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( + const char *path, + const char *mode + ); + +BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( + int fd, + const char *mode + ); + +BZ_EXTERN int BZ_API(BZ2_bzread) ( + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN int BZ_API(BZ2_bzwrite) ( + BZFILE* b, + void* buf, + int len + ); + +BZ_EXTERN int BZ_API(BZ2_bzflush) ( + BZFILE* b + ); + +BZ_EXTERN void BZ_API(BZ2_bzclose) ( + BZFILE* b + ); + +BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( + BZFILE *b, + int *errnum + ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +/*-------------------------------------------------------------*/ +/*--- end bzlib.h ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/bzlib_private.h b/examples/graph/fgbzip2/bzlib_private.h new file mode 100644 index 0000000..ae430af --- /dev/null +++ b/examples/graph/fgbzip2/bzlib_private.h @@ -0,0 +1,561 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Private header file for the library. ---*/ +/*--- bzlib_private.h ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +#ifndef _BZLIB_PRIVATE_H +#define _BZLIB_PRIVATE_H + +#include + +#ifndef BZ_NO_STDIO +#include +#include +#include +#endif + +#include "bzlib.h" + + + +/*-- General stuff. --*/ + +#define BZ_VERSION "1.0.6, 6-Sept-2010" + +typedef char Char; +typedef unsigned char Bool; +typedef unsigned char UChar; +typedef int Int32; +typedef unsigned int UInt32; +typedef short Int16; +typedef unsigned short UInt16; + +#define True ((Bool)1) +#define False ((Bool)0) + +#ifndef __GNUC__ +#define __inline__ /* */ +#endif + +#ifndef BZ_NO_STDIO + +extern void BZ2_bz__AssertH__fail ( int errcode ); +#define AssertH(cond,errcode) \ + { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } + +#if BZ_DEBUG +#define AssertD(cond,msg) \ + { if (!(cond)) { \ + fprintf ( stderr, \ + "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ + exit(1); \ + }} +#else +#define AssertD(cond,msg) /* */ +#endif + +#define VPrintf0(zf) \ + fprintf(stderr,zf) +#define VPrintf1(zf,za1) \ + fprintf(stderr,zf,za1) +#define VPrintf2(zf,za1,za2) \ + fprintf(stderr,zf,za1,za2) +#define VPrintf3(zf,za1,za2,za3) \ + fprintf(stderr,zf,za1,za2,za3) +#define VPrintf4(zf,za1,za2,za3,za4) \ + fprintf(stderr,zf,za1,za2,za3,za4) +#define VPrintf5(zf,za1,za2,za3,za4,za5) \ + fprintf(stderr,zf,za1,za2,za3,za4,za5) + +#else + +extern void bz_internal_error ( int errcode ); +#define AssertH(cond,errcode) \ + { if (!(cond)) bz_internal_error ( errcode ); } +#define AssertD(cond,msg) do { } while (0) +#define VPrintf0(zf) do { } while (0) +#define VPrintf1(zf,za1) do { } while (0) +#define VPrintf2(zf,za1,za2) do { } while (0) +#define VPrintf3(zf,za1,za2,za3) do { } while (0) +#define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) +#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) + +#endif + + +#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) +#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) + + +/*-- Header bytes. --*/ + +#define BZ_HDR_B 0x42 /* 'B' */ +#define BZ_HDR_Z 0x5a /* 'Z' */ +#define BZ_HDR_h 0x68 /* 'h' */ +#define BZ_HDR_0 0x30 /* '0' */ + +/*-- Constants for the back end. --*/ + +#define BZ_MAX_ALPHA_SIZE 258 +#define BZ_MAX_CODE_LEN 23 + +#define BZ_RUNA 0 +#define BZ_RUNB 1 + +#define BZ_N_GROUPS 6 +#define BZ_G_SIZE 50 +#define BZ_N_ITERS 4 + +#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) + + + +/*-- Stuff for randomising repetitive blocks. --*/ + +extern Int32 BZ2_rNums[512]; + +#define BZ_RAND_DECLS \ + Int32 rNToGo; \ + Int32 rTPos \ + +#define BZ_RAND_INIT_MASK \ + s->rNToGo = 0; \ + s->rTPos = 0 \ + +#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) + +#define BZ_RAND_UPD_MASK \ + if (s->rNToGo == 0) { \ + s->rNToGo = BZ2_rNums[s->rTPos]; \ + s->rTPos++; \ + if (s->rTPos == 512) s->rTPos = 0; \ + } \ + s->rNToGo--; + + + +/*-- Stuff for doing CRCs. --*/ + +extern UInt32 BZ2_crc32Table[256]; + +#define BZ_INITIALISE_CRC(crcVar) \ +{ \ + crcVar = 0xffffffffL; \ +} + +#define BZ_FINALISE_CRC(crcVar) \ +{ \ + crcVar = ~(crcVar); \ +} + +#define BZ_UPDATE_CRC(crcVar,cha) \ +{ \ + crcVar = (crcVar << 8) ^ \ + BZ2_crc32Table[(crcVar >> 24) ^ \ + ((UChar)cha)]; \ +} + + + +/*-- States and modes for compression. --*/ + +#define BZ_M_IDLE 1 +#define BZ_M_RUNNING 2 +#define BZ_M_FLUSHING 3 +#define BZ_M_FINISHING 4 + +#define BZ_S_OUTPUT 1 +#define BZ_S_INPUT 2 + +#define BZ_N_RADIX 2 +#define BZ_N_QSORT 12 +#define BZ_N_SHELL 18 +#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) + + + + +/*-- Structure holding all the compression-side stuff. --*/ + +typedef + struct { + /* pointer back to the struct bz_stream */ + bz_stream* strm; + + /* mode this stream is in, and whether inputting */ + /* or outputting data */ + Int32 mode; + Int32 state; + + /* remembers avail_in when flush/finish requested */ + UInt32 avail_in_expect; + + /* for doing the block sorting */ + UInt32* arr1; + UInt32* arr2; + UInt32* ftab; + Int32 origPtr; + + /* aliases for arr1 and arr2 */ + UInt32* ptr; + UChar* block; + UInt16* mtfv; + UChar* zbits; + + /* for deciding when to use the fallback sorting algorithm */ + Int32 workFactor; + + /* run-length-encoding of the input */ + UInt32 state_in_ch; + Int32 state_in_len; + BZ_RAND_DECLS; + + /* input and output limits and current posns */ + Int32 nblock; + Int32 nblockMAX; + Int32 numZ; + Int32 state_out_pos; + + /* map of bytes used in block */ + Int32 nInUse; + Bool inUse[256]; + UChar unseqToSeq[256]; + + /* the buffer for bit stream creation */ + UInt32 bsBuff; + Int32 bsLive; + + /* block and combined CRCs */ + UInt32 blockCRC; + UInt32 combinedCRC; + + /* misc administratium */ + Int32 verbosity; + Int32 blockNo; + Int32 blockSize100k; + + /* stuff for coding the MTF values */ + Int32 nMTF; + Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; + UChar selector [BZ_MAX_SELECTORS]; + UChar selectorMtf[BZ_MAX_SELECTORS]; + + UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + /* second dimension: only 3 needed; 4 makes index calculations faster */ + UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; + + } + EState; + + + +/*-- externs for compression. --*/ + +extern void +BZ2_blockSort ( EState* ); + +extern void +BZ2_compressBlock ( EState*, Bool ); + +extern void +BZ2_bsInitWrite ( EState* ); + +extern void +BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); + +extern void +BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); + + + +/*-- states for decompression. --*/ + +#define BZ_X_IDLE 1 +#define BZ_X_OUTPUT 2 + +#define BZ_X_MAGIC_1 10 +#define BZ_X_MAGIC_2 11 +#define BZ_X_MAGIC_3 12 +#define BZ_X_MAGIC_4 13 +#define BZ_X_BLKHDR_1 14 +#define BZ_X_BLKHDR_2 15 +#define BZ_X_BLKHDR_3 16 +#define BZ_X_BLKHDR_4 17 +#define BZ_X_BLKHDR_5 18 +#define BZ_X_BLKHDR_6 19 +#define BZ_X_BCRC_1 20 +#define BZ_X_BCRC_2 21 +#define BZ_X_BCRC_3 22 +#define BZ_X_BCRC_4 23 +#define BZ_X_RANDBIT 24 +#define BZ_X_ORIGPTR_1 25 +#define BZ_X_ORIGPTR_2 26 +#define BZ_X_ORIGPTR_3 27 +#define BZ_X_MAPPING_1 28 +#define BZ_X_MAPPING_2 29 +#define BZ_X_SELECTOR_1 30 +#define BZ_X_SELECTOR_2 31 +#define BZ_X_SELECTOR_3 32 +#define BZ_X_CODING_1 33 +#define BZ_X_CODING_2 34 +#define BZ_X_CODING_3 35 +#define BZ_X_MTF_1 36 +#define BZ_X_MTF_2 37 +#define BZ_X_MTF_3 38 +#define BZ_X_MTF_4 39 +#define BZ_X_MTF_5 40 +#define BZ_X_MTF_6 41 +#define BZ_X_ENDHDR_2 42 +#define BZ_X_ENDHDR_3 43 +#define BZ_X_ENDHDR_4 44 +#define BZ_X_ENDHDR_5 45 +#define BZ_X_ENDHDR_6 46 +#define BZ_X_CCRC_1 47 +#define BZ_X_CCRC_2 48 +#define BZ_X_CCRC_3 49 +#define BZ_X_CCRC_4 50 + + + +/*-- Constants for the fast MTF decoder. --*/ + +#define MTFA_SIZE 4096 +#define MTFL_SIZE 16 + + + +/*-- Structure holding all the decompression-side stuff. --*/ + +typedef + struct { + /* pointer back to the struct bz_stream */ + bz_stream* strm; + + /* state indicator for this stream */ + Int32 state; + + /* for doing the final run-length decoding */ + UChar state_out_ch; + Int32 state_out_len; + Bool blockRandomised; + BZ_RAND_DECLS; + + /* the buffer for bit stream reading */ + UInt32 bsBuff; + Int32 bsLive; + + /* misc administratium */ + Int32 blockSize100k; + Bool smallDecompress; + Int32 currBlockNo; + Int32 verbosity; + + /* for undoing the Burrows-Wheeler transform */ + Int32 origPtr; + UInt32 tPos; + Int32 k0; + Int32 unzftab[256]; + Int32 nblock_used; + Int32 cftab[257]; + Int32 cftabCopy[257]; + + /* for undoing the Burrows-Wheeler transform (FAST) */ + UInt32 *tt; + + /* for undoing the Burrows-Wheeler transform (SMALL) */ + UInt16 *ll16; + UChar *ll4; + + /* stored and calculated CRCs */ + UInt32 storedBlockCRC; + UInt32 storedCombinedCRC; + UInt32 calculatedBlockCRC; + UInt32 calculatedCombinedCRC; + + /* map of bytes used in block */ + Int32 nInUse; + Bool inUse[256]; + Bool inUse16[16]; + UChar seqToUnseq[256]; + + /* for decoding the MTF values */ + UChar mtfa [MTFA_SIZE]; + Int32 mtfbase[256 / MTFL_SIZE]; + UChar selector [BZ_MAX_SELECTORS]; + UChar selectorMtf[BZ_MAX_SELECTORS]; + UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + + Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 minLens[BZ_N_GROUPS]; + + /* save area for scalars in the main decompress code */ + Int32 save_i; + Int32 save_j; + Int32 save_t; + Int32 save_alphaSize; + Int32 save_nGroups; + Int32 save_nSelectors; + Int32 save_EOB; + Int32 save_groupNo; + Int32 save_groupPos; + Int32 save_nextSym; + Int32 save_nblockMAX; + Int32 save_nblock; + Int32 save_es; + Int32 save_N; + Int32 save_curr; + Int32 save_zt; + Int32 save_zn; + Int32 save_zvec; + Int32 save_zj; + Int32 save_gSel; + Int32 save_gMinlen; + Int32* save_gLimit; + Int32* save_gBase; + Int32* save_gPerm; + + } + DState; + + + +/*-- Macros for decompression. --*/ + +#define BZ_GET_FAST(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ + s->tPos = s->tt[s->tPos]; \ + cccc = (UChar)(s->tPos & 0xff); \ + s->tPos >>= 8; + +#define BZ_GET_FAST_C(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ + c_tPos = c_tt[c_tPos]; \ + cccc = (UChar)(c_tPos & 0xff); \ + c_tPos >>= 8; + +#define SET_LL4(i,n) \ + { if (((i) & 0x1) == 0) \ + s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ + s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ + } + +#define GET_LL4(i) \ + ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) + +#define SET_LL(i,n) \ + { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ + SET_LL4(i, n >> 16); \ + } + +#define GET_LL(i) \ + (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) + +#define BZ_GET_SMALL(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ + cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ + s->tPos = GET_LL(s->tPos); + + +/*-- externs for decompression. --*/ + +extern Int32 +BZ2_indexIntoF ( Int32, Int32* ); + +extern Int32 +BZ2_decompress ( DState* ); + +extern void +BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, + Int32, Int32, Int32 ); + + +#endif + + +/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ + +#ifdef BZ_NO_STDIO +#ifndef NULL +#define NULL 0 +#endif +#endif + + +/*-------------------------------------------------------------*/ +/*--- end bzlib_private.h ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/compress.cpp b/examples/graph/fgbzip2/compress.cpp new file mode 100644 index 0000000..8b125d3 --- /dev/null +++ b/examples/graph/fgbzip2/compress.cpp @@ -0,0 +1,724 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Compression machinery (not incl block sorting) ---*/ +/*--- compress.cpp ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +/* CHANGES + 0.9.0 -- original version. + 0.9.0a/b -- no changes in this file. + 0.9.0c -- changed setting of nGroups in sendMTFValues() + so as to do a bit better on small files +*/ + +#include "bzlib_private.h" + + +/*---------------------------------------------------*/ +/*--- Bit stream I/O ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +void BZ2_bsInitWrite ( EState* s ) +{ + s->bsLive = 0; + s->bsBuff = 0; +} + + +/*---------------------------------------------------*/ +static +void bsFinishWrite ( EState* s ) +{ + while (s->bsLive > 0) { + s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); + s->numZ++; + s->bsBuff <<= 8; + s->bsLive -= 8; + } +} + + +/*---------------------------------------------------*/ +#define bsNEEDW(nz) \ +{ \ + while (s->bsLive >= 8) { \ + s->zbits[s->numZ] \ + = (UChar)(s->bsBuff >> 24); \ + s->numZ++; \ + s->bsBuff <<= 8; \ + s->bsLive -= 8; \ + } \ +} + + +/*---------------------------------------------------*/ +static +__inline__ +void bsW ( EState* s, Int32 n, UInt32 v ) +{ + bsNEEDW ( n ); + s->bsBuff |= (v << (32 - s->bsLive - n)); + s->bsLive += n; +} + + +/*---------------------------------------------------*/ +static +void bsPutUInt32 ( EState* s, UInt32 u ) +{ + bsW ( s, 8, (u >> 24) & 0xffL ); + bsW ( s, 8, (u >> 16) & 0xffL ); + bsW ( s, 8, (u >> 8) & 0xffL ); + bsW ( s, 8, u & 0xffL ); +} + + +/*---------------------------------------------------*/ +static +void bsPutUChar ( EState* s, UChar c ) +{ + bsW( s, 8, (UInt32)c ); +} + + +/*---------------------------------------------------*/ +/*--- The back end proper ---*/ +/*---------------------------------------------------*/ + +/*---------------------------------------------------*/ +static +void makeMaps_e ( EState* s ) +{ + Int32 i; + s->nInUse = 0; + for (i = 0; i < 256; i++) + if (s->inUse[i]) { + s->unseqToSeq[i] = s->nInUse; + s->nInUse++; + } +} + + +/*---------------------------------------------------*/ +static +void generateMTFValues ( EState* s ) +{ + UChar yy[256]; + Int32 i, j; + Int32 zPend; + Int32 wr; + Int32 EOB; + + /* + After sorting (eg, here), + s->arr1 [ 0 .. s->nblock-1 ] holds sorted order, + and + ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] + holds the original block data. + + The first thing to do is generate the MTF values, + and put them in + ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ]. + Because there are strictly fewer or equal MTF values + than block values, ptr values in this area are overwritten + with MTF values only when they are no longer needed. + + The final compressed bitstream is generated into the + area starting at + (UChar*) (&((UChar*)s->arr2)[s->nblock]) + + These storage aliases are set up in bzCompressInit(), + except for the last one, which is arranged in + compressBlock(). + */ + UInt32* ptr = s->ptr; + UChar* block = s->block; + UInt16* mtfv = s->mtfv; + + makeMaps_e ( s ); + EOB = s->nInUse+1; + + for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0; + + wr = 0; + zPend = 0; + for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; + + for (i = 0; i < s->nblock; i++) { + UChar ll_i; + AssertD ( wr <= i, "generateMTFValues(1)" ); + j = ptr[i]-1; if (j < 0) j += s->nblock; + ll_i = s->unseqToSeq[block[j]]; + AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" ); + + if (yy[0] == ll_i) { + zPend++; + } else { + + if (zPend > 0) { + zPend--; + while (True) { + if (zPend & 1) { + mtfv[wr] = BZ_RUNB; wr++; + s->mtfFreq[BZ_RUNB]++; + } else { + mtfv[wr] = BZ_RUNA; wr++; + s->mtfFreq[BZ_RUNA]++; + } + if (zPend < 2) break; + zPend = (zPend - 2) / 2; + }; + zPend = 0; + } + { + UChar rtmp; + UChar* ryy_j; + UChar rll_i; + rtmp = yy[1]; + yy[1] = yy[0]; + ryy_j = &(yy[1]); + rll_i = ll_i; + while ( rll_i != rtmp ) { + UChar rtmp2; + ryy_j++; + rtmp2 = rtmp; + rtmp = *ryy_j; + *ryy_j = rtmp2; + }; + yy[0] = rtmp; + j = ryy_j - &(yy[0]); + mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; + } + + } + } + + if (zPend > 0) { + zPend--; + while (True) { + if (zPend & 1) { + mtfv[wr] = BZ_RUNB; wr++; + s->mtfFreq[BZ_RUNB]++; + } else { + mtfv[wr] = BZ_RUNA; wr++; + s->mtfFreq[BZ_RUNA]++; + } + if (zPend < 2) break; + zPend = (zPend - 2) / 2; + }; + zPend = 0; + } + + mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++; + + s->nMTF = wr; +} + + +/*---------------------------------------------------*/ +#define BZ_LESSER_ICOST 0 +#define BZ_GREATER_ICOST 15 + +static +void sendMTFValues ( EState* s ) +{ + Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; + Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; + Int32 nGroups, nBytes; + + /*-- + UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + is a global since the decoder also needs it. + + Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + are also globals only used in this proc. + Made global to keep stack frame size small. + --*/ + + + UInt16 cost[BZ_N_GROUPS]; + Int32 fave[BZ_N_GROUPS]; + + UInt16* mtfv = s->mtfv; + + if (s->verbosity >= 3) + VPrintf3( " %d in block, %d after MTF & 1-2 coding, " + "%d+2 syms in use\n", + s->nblock, s->nMTF, s->nInUse ); + + alphaSize = s->nInUse+2; + for (t = 0; t < BZ_N_GROUPS; t++) + for (v = 0; v < alphaSize; v++) + s->len[t][v] = BZ_GREATER_ICOST; + + /*--- Decide how many coding tables to use ---*/ + AssertH ( s->nMTF > 0, 3001 ); + if (s->nMTF < 200) nGroups = 2; else + if (s->nMTF < 600) nGroups = 3; else + if (s->nMTF < 1200) nGroups = 4; else + if (s->nMTF < 2400) nGroups = 5; else + nGroups = 6; + + /*--- Generate an initial set of coding tables ---*/ + { + Int32 nPart, remF, tFreq, aFreq; + + nPart = nGroups; + remF = s->nMTF; + gs = 0; + while (nPart > 0) { + tFreq = remF / nPart; + ge = gs-1; + aFreq = 0; + while (aFreq < tFreq && ge < alphaSize-1) { + ge++; + aFreq += s->mtfFreq[ge]; + } + + if (ge > gs + && nPart != nGroups && nPart != 1 + && ((nGroups-nPart) % 2 == 1)) { + aFreq -= s->mtfFreq[ge]; + ge--; + } + + if (s->verbosity >= 3) + VPrintf5( " initial group %d, [%d .. %d], " + "has %d syms (%4.1f%%)\n", + nPart, gs, ge, aFreq, + (100.0 * (float)aFreq) / (float)(s->nMTF) ); + + for (v = 0; v < alphaSize; v++) + if (v >= gs && v <= ge) + s->len[nPart-1][v] = BZ_LESSER_ICOST; else + s->len[nPart-1][v] = BZ_GREATER_ICOST; + + nPart--; + gs = ge+1; + remF -= aFreq; + } + } + + /*--- + Iterate up to BZ_N_ITERS times to improve the tables. + ---*/ + for (iter = 0; iter < BZ_N_ITERS; iter++) { + + for (t = 0; t < nGroups; t++) fave[t] = 0; + + for (t = 0; t < nGroups; t++) + for (v = 0; v < alphaSize; v++) + s->rfreq[t][v] = 0; + + /*--- + Set up an auxiliary length table which is used to fast-track + the common case (nGroups == 6). + ---*/ + if (nGroups == 6) { + for (v = 0; v < alphaSize; v++) { + s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v]; + s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v]; + s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v]; + } + } + + nSelectors = 0; + totc = 0; + gs = 0; + while (True) { + + /*--- Set group start & end marks. --*/ + if (gs >= s->nMTF) break; + ge = gs + BZ_G_SIZE - 1; + if (ge >= s->nMTF) ge = s->nMTF-1; + + /*-- + Calculate the cost of this group as coded + by each of the coding tables. + --*/ + for (t = 0; t < nGroups; t++) cost[t] = 0; + + if (nGroups == 6 && 50 == ge-gs+1) { + /*--- fast track the common case ---*/ + UInt32 cost01, cost23, cost45; + UInt16 icv; + cost01 = cost23 = cost45 = 0; + +# define BZ_ITER(nn) \ + icv = mtfv[gs+(nn)]; \ + cost01 += s->len_pack[icv][0]; \ + cost23 += s->len_pack[icv][1]; \ + cost45 += s->len_pack[icv][2]; \ + + BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4); + BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9); + BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14); + BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19); + BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24); + BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29); + BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34); + BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39); + BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44); + BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49); + +# undef BZ_ITER + + cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16; + cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16; + cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16; + + } else { + /*--- slow version which correctly handles all situations ---*/ + for (i = gs; i <= ge; i++) { + UInt16 icv = mtfv[i]; + for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv]; + } + } + + /*-- + Find the coding table which is best for this group, + and record its identity in the selector table. + --*/ + bc = 999999999; bt = -1; + for (t = 0; t < nGroups; t++) + if (cost[t] < bc) { bc = cost[t]; bt = t; }; + totc += bc; + fave[bt]++; + s->selector[nSelectors] = bt; + nSelectors++; + + /*-- + Increment the symbol frequencies for the selected table. + --*/ + if (nGroups == 6 && 50 == ge-gs+1) { + /*--- fast track the common case ---*/ + +# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++ + + BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4); + BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9); + BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14); + BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19); + BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24); + BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29); + BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34); + BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39); + BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44); + BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49); + +# undef BZ_ITUR + + } else { + /*--- slow version which correctly handles all situations ---*/ + for (i = gs; i <= ge; i++) + s->rfreq[bt][ mtfv[i] ]++; + } + + gs = ge+1; + } + if (s->verbosity >= 3) { + VPrintf2 ( " pass %d: size is %d, grp uses are ", + iter+1, totc/8 ); + for (t = 0; t < nGroups; t++) + VPrintf1 ( "%d ", fave[t] ); + VPrintf0 ( "\n" ); + } + + /*-- + Recompute the tables based on the accumulated frequencies. + --*/ + /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See + comment in huffman.c for details. */ + for (t = 0; t < nGroups; t++) + BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), + alphaSize, 17 /*20*/ ); + } + + + AssertH( nGroups < 8, 3002 ); + AssertH( nSelectors < 32768 && + nSelectors <= (2 + (900000 / BZ_G_SIZE)), + 3003 ); + + + /*--- Compute MTF values for the selectors. ---*/ + { + UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp; + for (i = 0; i < nGroups; i++) pos[i] = i; + for (i = 0; i < nSelectors; i++) { + ll_i = s->selector[i]; + j = 0; + tmp = pos[j]; + while ( ll_i != tmp ) { + j++; + tmp2 = tmp; + tmp = pos[j]; + pos[j] = tmp2; + }; + pos[0] = tmp; + s->selectorMtf[i] = j; + } + }; + + /*--- Assign actual codes for the tables. --*/ + for (t = 0; t < nGroups; t++) { + minLen = 32; + maxLen = 0; + for (i = 0; i < alphaSize; i++) { + if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; + if (s->len[t][i] < minLen) minLen = s->len[t][i]; + } + AssertH ( !(maxLen > 17 /*20*/ ), 3004 ); + AssertH ( !(minLen < 1), 3005 ); + BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), + minLen, maxLen, alphaSize ); + } + + /*--- Transmit the mapping table. ---*/ + { + Bool inUse16[16]; + for (i = 0; i < 16; i++) { + inUse16[i] = False; + for (j = 0; j < 16; j++) + if (s->inUse[i * 16 + j]) inUse16[i] = True; + } + + nBytes = s->numZ; + for (i = 0; i < 16; i++) + if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0); + + for (i = 0; i < 16; i++) + if (inUse16[i]) + for (j = 0; j < 16; j++) { + if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0); + } + + if (s->verbosity >= 3) + VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes ); + } + + /*--- Now the selectors. ---*/ + nBytes = s->numZ; + bsW ( s, 3, nGroups ); + bsW ( s, 15, nSelectors ); + for (i = 0; i < nSelectors; i++) { + for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1); + bsW(s,1,0); + } + if (s->verbosity >= 3) + VPrintf1( "selectors %d, ", s->numZ-nBytes ); + + /*--- Now the coding tables. ---*/ + nBytes = s->numZ; + + for (t = 0; t < nGroups; t++) { + Int32 curr = s->len[t][0]; + bsW ( s, 5, curr ); + for (i = 0; i < alphaSize; i++) { + while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ }; + while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ }; + bsW ( s, 1, 0 ); + } + } + + if (s->verbosity >= 3) + VPrintf1 ( "code lengths %d, ", s->numZ-nBytes ); + + /*--- And finally, the block data proper ---*/ + nBytes = s->numZ; + selCtr = 0; + gs = 0; + while (True) { + if (gs >= s->nMTF) break; + ge = gs + BZ_G_SIZE - 1; + if (ge >= s->nMTF) ge = s->nMTF-1; + AssertH ( s->selector[selCtr] < nGroups, 3006 ); + + if (nGroups == 6 && 50 == ge-gs+1) { + /*--- fast track the common case ---*/ + UInt16 mtfv_i; + UChar* s_len_sel_selCtr + = &(s->len[s->selector[selCtr]][0]); + Int32* s_code_sel_selCtr + = &(s->code[s->selector[selCtr]][0]); + +# define BZ_ITAH(nn) \ + mtfv_i = mtfv[gs+(nn)]; \ + bsW ( s, \ + s_len_sel_selCtr[mtfv_i], \ + s_code_sel_selCtr[mtfv_i] ) + + BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4); + BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9); + BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14); + BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19); + BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24); + BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29); + BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34); + BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39); + BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44); + BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49); + +# undef BZ_ITAH + + } else { + /*--- slow version which correctly handles all situations ---*/ + for (i = gs; i <= ge; i++) { + bsW ( s, + s->len [s->selector[selCtr]] [mtfv[i]], + s->code [s->selector[selCtr]] [mtfv[i]] ); + } + } + + + gs = ge+1; + selCtr++; + } + AssertH( selCtr == nSelectors, 3007 ); + + if (s->verbosity >= 3) + VPrintf1( "codes %d\n", s->numZ-nBytes ); +} + + +/*---------------------------------------------------*/ +void BZ2_compressBlock ( EState* s, Bool is_last_block ) +{ + if (s->nblock > 0) { + + BZ_FINALISE_CRC ( s->blockCRC ); + s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); + s->combinedCRC ^= s->blockCRC; + if (s->blockNo > 1) s->numZ = 0; + + if (s->verbosity >= 2) + VPrintf4( " block %d: crc = 0x%08x, " + "combined CRC = 0x%08x, size = %d\n", + s->blockNo, s->blockCRC, s->combinedCRC, s->nblock ); + + BZ2_blockSort ( s ); + } + + s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]); + + /*-- If this is the first block, create the stream header. --*/ + if (s->blockNo == 1) { + BZ2_bsInitWrite ( s ); + bsPutUChar ( s, BZ_HDR_B ); + bsPutUChar ( s, BZ_HDR_Z ); + bsPutUChar ( s, BZ_HDR_h ); + bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) ); + } + + if (s->nblock > 0) { + + bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 ); + bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 ); + bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 ); + + /*-- Now the block's CRC, so it is in a known place. --*/ + bsPutUInt32 ( s, s->blockCRC ); + + /*-- + Now a single bit indicating (non-)randomisation. + As of version 0.9.5, we use a better sorting algorithm + which makes randomisation unnecessary. So always set + the randomised bit to 'no'. Of course, the decoder + still needs to be able to handle randomised blocks + so as to maintain backwards compatibility with + older versions of bzip2. + --*/ + bsW(s,1,0); + + bsW ( s, 24, s->origPtr ); + generateMTFValues ( s ); + sendMTFValues ( s ); + } + + + /*-- If this is the last block, add the stream trailer. --*/ + if (is_last_block) { + + bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 ); + bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 ); + bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 ); + bsPutUInt32 ( s, s->combinedCRC ); + if (s->verbosity >= 2) + VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC ); + bsFinishWrite ( s ); + } +} + + +/*-------------------------------------------------------------*/ +/*--- end compress.c ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/crctable.cpp b/examples/graph/fgbzip2/crctable.cpp new file mode 100644 index 0000000..faef501 --- /dev/null +++ b/examples/graph/fgbzip2/crctable.cpp @@ -0,0 +1,156 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Table for doing CRCs ---*/ +/*--- crctable.cpp ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + +/*-- + I think this is an implementation of the AUTODIN-II, + Ethernet & FDDI 32-bit CRC standard. Vaguely derived + from code by Rob Warnock, in Section 51 of the + comp.compression FAQ. +--*/ + +UInt32 BZ2_crc32Table[256] = { + + /*-- Ugly, innit? --*/ + + 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, + 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, + 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, + 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, + 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, + 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, + 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, + 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, + 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, + 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, + 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, + 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, + 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, + 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, + 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, + 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, + 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, + 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, + 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, + 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, + 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, + 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, + 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, + 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, + 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, + 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, + 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, + 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, + 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, + 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, + 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, + 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, + 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, + 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, + 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, + 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, + 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, + 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, + 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, + 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, + 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, + 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, + 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, + 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, + 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, + 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, + 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, + 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, + 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, + 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, + 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, + 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, + 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, + 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, + 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, + 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, + 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, + 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, + 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, + 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, + 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, + 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, + 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, + 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L +}; + + +/*-------------------------------------------------------------*/ +/*--- end crctable.c ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/decompress.cpp b/examples/graph/fgbzip2/decompress.cpp new file mode 100644 index 0000000..a100e61 --- /dev/null +++ b/examples/graph/fgbzip2/decompress.cpp @@ -0,0 +1,698 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Decompression machinery ---*/ +/*--- decompress.cpp ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + + +/*---------------------------------------------------*/ +static +void makeMaps_d ( DState* s ) +{ + Int32 i; + s->nInUse = 0; + for (i = 0; i < 256; i++) + if (s->inUse[i]) { + s->seqToUnseq[s->nInUse] = i; + s->nInUse++; + } +} + + +/*---------------------------------------------------*/ +#define RETURN(rrr) \ + { retVal = rrr; goto save_state_and_return; }; + +#define GET_BITS(lll,vvv,nnn) \ + case lll: s->state = lll; \ + while (True) { \ + if (s->bsLive >= nnn) { \ + UInt32 v; \ + v = (s->bsBuff >> \ + (s->bsLive-nnn)) & ((1 << nnn)-1); \ + s->bsLive -= nnn; \ + vvv = v; \ + break; \ + } \ + if (s->strm->avail_in == 0) RETURN(BZ_OK); \ + s->bsBuff \ + = (s->bsBuff << 8) | \ + ((UInt32) \ + (*((UChar*)(s->strm->next_in)))); \ + s->bsLive += 8; \ + s->strm->next_in++; \ + s->strm->avail_in--; \ + s->strm->total_in_lo32++; \ + if (s->strm->total_in_lo32 == 0) \ + s->strm->total_in_hi32++; \ + } + +#define GET_UCHAR(lll,uuu) \ + GET_BITS(lll,uuu,8) + +#define GET_BIT(lll,uuu) \ + GET_BITS(lll,uuu,1) + +/*---------------------------------------------------*/ +#define GET_MTF_VAL(label1,label2,lval) \ +{ \ + if (groupPos == 0) { \ + groupNo++; \ + if (groupNo >= nSelectors) \ + RETURN(BZ_DATA_ERROR); \ + groupPos = BZ_G_SIZE; \ + gSel = s->selector[groupNo]; \ + gMinlen = s->minLens[gSel]; \ + gLimit = &(s->limit[gSel][0]); \ + gPerm = &(s->perm[gSel][0]); \ + gBase = &(s->base[gSel][0]); \ + } \ + groupPos--; \ + zn = gMinlen; \ + GET_BITS(label1, zvec, zn); \ + while (1) { \ + if (zn > 20 /* the longest code */) \ + RETURN(BZ_DATA_ERROR); \ + if (zvec <= gLimit[zn]) break; \ + zn++; \ + GET_BIT(label2, zj); \ + zvec = (zvec << 1) | zj; \ + }; \ + if (zvec - gBase[zn] < 0 \ + || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \ + RETURN(BZ_DATA_ERROR); \ + lval = gPerm[zvec - gBase[zn]]; \ +} + + +/*---------------------------------------------------*/ +Int32 BZ2_decompress ( DState* s ) +{ + UChar uc; + Int32 retVal; + Int32 minLen, maxLen; + bz_stream* strm = s->strm; + + /* stuff that needs to be saved/restored */ + Int32 i; + Int32 j; + Int32 t; + Int32 alphaSize; + Int32 nGroups; + Int32 nSelectors; + Int32 EOB; + Int32 groupNo; + Int32 groupPos; + Int32 nextSym; + Int32 nblockMAX; + Int32 nblock; + Int32 es; + Int32 N; + Int32 curr; + Int32 zt; + Int32 zn; + Int32 zvec; + Int32 zj; + Int32 gSel; + Int32 gMinlen; + Int32* gLimit; + Int32* gBase; + Int32* gPerm; + + if (s->state == BZ_X_MAGIC_1) { + /*initialise the save area*/ + s->save_i = 0; + s->save_j = 0; + s->save_t = 0; + s->save_alphaSize = 0; + s->save_nGroups = 0; + s->save_nSelectors = 0; + s->save_EOB = 0; + s->save_groupNo = 0; + s->save_groupPos = 0; + s->save_nextSym = 0; + s->save_nblockMAX = 0; + s->save_nblock = 0; + s->save_es = 0; + s->save_N = 0; + s->save_curr = 0; + s->save_zt = 0; + s->save_zn = 0; + s->save_zvec = 0; + s->save_zj = 0; + s->save_gSel = 0; + s->save_gMinlen = 0; + s->save_gLimit = NULL; + s->save_gBase = NULL; + s->save_gPerm = NULL; + } + + /*restore from the save area*/ + i = s->save_i; + j = s->save_j; + t = s->save_t; + alphaSize = s->save_alphaSize; + nGroups = s->save_nGroups; + nSelectors = s->save_nSelectors; + EOB = s->save_EOB; + groupNo = s->save_groupNo; + groupPos = s->save_groupPos; + nextSym = s->save_nextSym; + nblockMAX = s->save_nblockMAX; + nblock = s->save_nblock; + es = s->save_es; + N = s->save_N; + curr = s->save_curr; + zt = s->save_zt; + zn = s->save_zn; + zvec = s->save_zvec; + zj = s->save_zj; + gSel = s->save_gSel; + gMinlen = s->save_gMinlen; + gLimit = s->save_gLimit; + gBase = s->save_gBase; + gPerm = s->save_gPerm; + + retVal = BZ_OK; + + switch (s->state) { + + GET_UCHAR(BZ_X_MAGIC_1, uc); + if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC); + + GET_UCHAR(BZ_X_MAGIC_2, uc); + if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC); + + GET_UCHAR(BZ_X_MAGIC_3, uc) + if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC); + + GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) + if (s->blockSize100k < (BZ_HDR_0 + 1) || + s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); + s->blockSize100k -= BZ_HDR_0; + + if (s->smallDecompress) { + s->ll16 = (UInt16*)BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); + s->ll4 = (UChar*)BZALLOC( + ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) + ); + if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); + } else { + s->tt = (UInt32*)BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); + if (s->tt == NULL) RETURN(BZ_MEM_ERROR); + } + + GET_UCHAR(BZ_X_BLKHDR_1, uc); + + if (uc == 0x17) goto endhdr_2; + if (uc != 0x31) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_2, uc); + if (uc != 0x41) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_3, uc); + if (uc != 0x59) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_4, uc); + if (uc != 0x26) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_5, uc); + if (uc != 0x53) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_BLKHDR_6, uc); + if (uc != 0x59) RETURN(BZ_DATA_ERROR); + + s->currBlockNo++; + if (s->verbosity >= 2) + VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); + + s->storedBlockCRC = 0; + GET_UCHAR(BZ_X_BCRC_1, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_BCRC_2, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_BCRC_3, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_BCRC_4, uc); + s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); + + GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); + + s->origPtr = 0; + GET_UCHAR(BZ_X_ORIGPTR_1, uc); + s->origPtr = (s->origPtr << 8) | ((Int32)uc); + GET_UCHAR(BZ_X_ORIGPTR_2, uc); + s->origPtr = (s->origPtr << 8) | ((Int32)uc); + GET_UCHAR(BZ_X_ORIGPTR_3, uc); + s->origPtr = (s->origPtr << 8) | ((Int32)uc); + + if (s->origPtr < 0) + RETURN(BZ_DATA_ERROR); + if (s->origPtr > 10 + 100000*s->blockSize100k) + RETURN(BZ_DATA_ERROR); + + /*--- Receive the mapping table ---*/ + for (i = 0; i < 16; i++) { + GET_BIT(BZ_X_MAPPING_1, uc); + if (uc == 1) + s->inUse16[i] = True; else + s->inUse16[i] = False; + } + + for (i = 0; i < 256; i++) s->inUse[i] = False; + + for (i = 0; i < 16; i++) + if (s->inUse16[i]) + for (j = 0; j < 16; j++) { + GET_BIT(BZ_X_MAPPING_2, uc); + if (uc == 1) s->inUse[i * 16 + j] = True; + } + makeMaps_d ( s ); + if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); + alphaSize = s->nInUse+2; + + /*--- Now the selectors ---*/ + GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); + if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); + GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); + if (nSelectors < 1) RETURN(BZ_DATA_ERROR); + for (i = 0; i < nSelectors; i++) { + j = 0; + while (True) { + GET_BIT(BZ_X_SELECTOR_3, uc); + if (uc == 0) break; + j++; + if (j >= nGroups) RETURN(BZ_DATA_ERROR); + } + s->selectorMtf[i] = j; + } + + /*--- Undo the MTF values for the selectors. ---*/ + { + UChar pos[BZ_N_GROUPS], tmp, v; + for (v = 0; v < nGroups; v++) pos[v] = v; + + for (i = 0; i < nSelectors; i++) { + v = s->selectorMtf[i]; + tmp = pos[v]; + while (v > 0) { pos[v] = pos[v-1]; v--; } + pos[0] = tmp; + s->selector[i] = tmp; + } + } + + /*--- Now the coding tables ---*/ + for (t = 0; t < nGroups; t++) { + GET_BITS(BZ_X_CODING_1, curr, 5); + for (i = 0; i < alphaSize; i++) { + while (True) { + if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR); + GET_BIT(BZ_X_CODING_2, uc); + if (uc == 0) break; + GET_BIT(BZ_X_CODING_3, uc); + if (uc == 0) curr++; else curr--; + } + s->len[t][i] = curr; + } + } + + /*--- Create the Huffman decoding tables ---*/ + for (t = 0; t < nGroups; t++) { + minLen = 32; + maxLen = 0; + for (i = 0; i < alphaSize; i++) { + if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; + if (s->len[t][i] < minLen) minLen = s->len[t][i]; + } + BZ2_hbCreateDecodeTables ( + &(s->limit[t][0]), + &(s->base[t][0]), + &(s->perm[t][0]), + &(s->len[t][0]), + minLen, maxLen, alphaSize + ); + s->minLens[t] = minLen; + } + + /*--- Now the MTF values ---*/ + + EOB = s->nInUse+1; + nblockMAX = 100000 * s->blockSize100k; + groupNo = -1; + groupPos = 0; + + for (i = 0; i <= 255; i++) s->unzftab[i] = 0; + + /*-- MTF init --*/ + { + Int32 ii, jj, kk; + kk = MTFA_SIZE-1; + for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { + for (jj = MTFL_SIZE-1; jj >= 0; jj--) { + s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); + kk--; + } + s->mtfbase[ii] = kk + 1; + } + } + /*-- end MTF init --*/ + + nblock = 0; + GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym); + + while (True) { + + if (nextSym == EOB) break; + + if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { + + es = -1; + N = 1; + do { + /* Check that N doesn't get too big, so that es doesn't + go negative. The maximum value that can be + RUNA/RUNB encoded is equal to the block size (post + the initial RLE), viz, 900k, so bounding N at 2 + million should guard against overflow without + rejecting any legitimate inputs. */ + if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR); + if (nextSym == BZ_RUNA) es = es + (0+1) * N; else + if (nextSym == BZ_RUNB) es = es + (1+1) * N; + N = N * 2; + GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym); + } + while (nextSym == BZ_RUNA || nextSym == BZ_RUNB); + + es++; + uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; + s->unzftab[uc] += es; + + if (s->smallDecompress) + while (es > 0) { + if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); + s->ll16[nblock] = (UInt16)uc; + nblock++; + es--; + } + else + while (es > 0) { + if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); + s->tt[nblock] = (UInt32)uc; + nblock++; + es--; + }; + + continue; + + } else { + + if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); + + /*-- uc = MTF ( nextSym-1 ) --*/ + { + Int32 ii, jj, kk, pp, lno, off; + UInt32 nn; + nn = (UInt32)(nextSym - 1); + + if (nn < MTFL_SIZE) { + /* avoid general-case expense */ + pp = s->mtfbase[0]; + uc = s->mtfa[pp+nn]; + while (nn > 3) { + Int32 z = pp+nn; + s->mtfa[(z) ] = s->mtfa[(z)-1]; + s->mtfa[(z)-1] = s->mtfa[(z)-2]; + s->mtfa[(z)-2] = s->mtfa[(z)-3]; + s->mtfa[(z)-3] = s->mtfa[(z)-4]; + nn -= 4; + } + while (nn > 0) { + s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; + }; + s->mtfa[pp] = uc; + } else { + /* general case */ + lno = nn / MTFL_SIZE; + off = nn % MTFL_SIZE; + pp = s->mtfbase[lno] + off; + uc = s->mtfa[pp]; + while (pp > s->mtfbase[lno]) { + s->mtfa[pp] = s->mtfa[pp-1]; pp--; + }; + s->mtfbase[lno]++; + while (lno > 0) { + s->mtfbase[lno]--; + s->mtfa[s->mtfbase[lno]] + = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; + lno--; + } + s->mtfbase[0]--; + s->mtfa[s->mtfbase[0]] = uc; + if (s->mtfbase[0] == 0) { + kk = MTFA_SIZE-1; + for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { + for (jj = MTFL_SIZE-1; jj >= 0; jj--) { + s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; + kk--; + } + s->mtfbase[ii] = kk + 1; + } + } + } + } + /*-- end uc = MTF ( nextSym-1 ) --*/ + + s->unzftab[s->seqToUnseq[uc]]++; + if (s->smallDecompress) + s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else + s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); + nblock++; + + GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym); + continue; + } + } + + /* Now we know what nblock is, we can do a better sanity + check on s->origPtr. + */ + if (s->origPtr < 0 || s->origPtr >= nblock) + RETURN(BZ_DATA_ERROR); + + /*-- Set up cftab to facilitate generation of T^(-1) --*/ + /* Check: unzftab entries in range. */ + for (i = 0; i <= 255; i++) { + if (s->unzftab[i] < 0 || s->unzftab[i] > nblock) + RETURN(BZ_DATA_ERROR); + } + /* Actually generate cftab. */ + s->cftab[0] = 0; + for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; + for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; + /* Check: cftab entries in range. */ + for (i = 0; i <= 256; i++) { + if (s->cftab[i] < 0 || s->cftab[i] > nblock) { + /* s->cftab[i] can legitimately be == nblock */ + RETURN(BZ_DATA_ERROR); + } + } + /* Check: cftab entries non-descending. */ + for (i = 1; i <= 256; i++) { + if (s->cftab[i-1] > s->cftab[i]) { + RETURN(BZ_DATA_ERROR); + } + } + + s->state_out_len = 0; + s->state_out_ch = 0; + BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); + s->state = BZ_X_OUTPUT; + if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); + + if (s->smallDecompress) { + + /*-- Make a copy of cftab, used in generation of T --*/ + for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; + + /*-- compute the T vector --*/ + for (i = 0; i < nblock; i++) { + uc = (UChar)(s->ll16[i]); + SET_LL(i, s->cftabCopy[uc]); + s->cftabCopy[uc]++; + } + + /*-- Compute T^(-1) by pointer reversal on T --*/ + i = s->origPtr; + j = GET_LL(i); + do { + Int32 tmp = GET_LL(j); + SET_LL(j, i); + i = j; + j = tmp; + } + while (i != s->origPtr); + + s->tPos = s->origPtr; + s->nblock_used = 0; + if (s->blockRandomised) { + BZ_RAND_INIT_MASK; + BZ_GET_SMALL(s->k0); s->nblock_used++; + BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; + } else { + BZ_GET_SMALL(s->k0); s->nblock_used++; + } + + } else { + + /*-- compute the T^(-1) vector --*/ + for (i = 0; i < nblock; i++) { + uc = (UChar)(s->tt[i] & 0xff); + s->tt[s->cftab[uc]] |= (i << 8); + s->cftab[uc]++; + } + + s->tPos = s->tt[s->origPtr] >> 8; + s->nblock_used = 0; + if (s->blockRandomised) { + BZ_RAND_INIT_MASK; + BZ_GET_FAST(s->k0); s->nblock_used++; + BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; + } else { + BZ_GET_FAST(s->k0); s->nblock_used++; + } + + } + + RETURN(BZ_OK); + + + + endhdr_2: + + GET_UCHAR(BZ_X_ENDHDR_2, uc); + if (uc != 0x72) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_3, uc); + if (uc != 0x45) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_4, uc); + if (uc != 0x38) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_5, uc); + if (uc != 0x50) RETURN(BZ_DATA_ERROR); + GET_UCHAR(BZ_X_ENDHDR_6, uc); + if (uc != 0x90) RETURN(BZ_DATA_ERROR); + + s->storedCombinedCRC = 0; + GET_UCHAR(BZ_X_CCRC_1, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_CCRC_2, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_CCRC_3, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + GET_UCHAR(BZ_X_CCRC_4, uc); + s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); + + s->state = BZ_X_IDLE; + RETURN(BZ_STREAM_END); + + default: AssertH ( False, 4001 ); + } + + AssertH ( False, 4002 ); + + save_state_and_return: + + s->save_i = i; + s->save_j = j; + s->save_t = t; + s->save_alphaSize = alphaSize; + s->save_nGroups = nGroups; + s->save_nSelectors = nSelectors; + s->save_EOB = EOB; + s->save_groupNo = groupNo; + s->save_groupPos = groupPos; + s->save_nextSym = nextSym; + s->save_nblockMAX = nblockMAX; + s->save_nblock = nblock; + s->save_es = es; + s->save_N = N; + s->save_curr = curr; + s->save_zt = zt; + s->save_zn = zn; + s->save_zvec = zvec; + s->save_zj = zj; + s->save_gSel = gSel; + s->save_gMinlen = gMinlen; + s->save_gLimit = gLimit; + s->save_gBase = gBase; + s->save_gPerm = gPerm; + + return retVal; +} + + +/*-------------------------------------------------------------*/ +/*--- end decompress.c ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/fgbzip2.cpp b/examples/graph/fgbzip2/fgbzip2.cpp new file mode 100644 index 0000000..cf1d8ae --- /dev/null +++ b/examples/graph/fgbzip2/fgbzip2.cpp @@ -0,0 +1,501 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1 +#include "tbb/tbb_config.h" +#include "../../common/utility/utility.h" + +#if __TBB_PREVIEW_ASYNC_MSG && __TBB_CPP11_LAMBDAS_PRESENT + +#include +#include +#include +#include +#include + +#include "bzlib.h" + +#include "tbb/flow_graph.h" +#include "tbb/tick_count.h" +#include "tbb/compat/thread" +#include "tbb/concurrent_queue.h" + +// TODO: change memory allocation/deallocation to be managed in constructor/destructor +struct Buffer { + size_t len; + char* b; +}; + +struct BufferMsg { + + BufferMsg() {} + BufferMsg(Buffer& inputBuffer, Buffer& outputBuffer, size_t seqId, bool isLast = false) + : inputBuffer(inputBuffer), outputBuffer(outputBuffer), seqId(seqId), isLast(isLast) {} + + static BufferMsg createBufferMsg(size_t seqId, size_t chunkSize) { + Buffer inputBuffer; + inputBuffer.b = new char[chunkSize]; + inputBuffer.len = chunkSize; + + Buffer outputBuffer; + size_t compressedChunkSize = chunkSize * 1.01 + 600; // compression overhead + outputBuffer.b = new char[compressedChunkSize]; + outputBuffer.len = compressedChunkSize; + + return BufferMsg(inputBuffer, outputBuffer, seqId); + } + + static void destroyBufferMsg(const BufferMsg& destroyMsg) { + delete[] destroyMsg.inputBuffer.b; + delete[] destroyMsg.outputBuffer.b; + } + + void markLast(size_t lastId) { + isLast = true; + seqId = lastId; + } + + size_t seqId; + Buffer inputBuffer; + Buffer outputBuffer; + bool isLast; +}; + +class BufferCompressor { +public: + + BufferCompressor(int blockSizeIn100KB) : m_blockSize(blockSizeIn100KB) {} + + BufferMsg operator()(BufferMsg buffer) const { + if (!buffer.isLast) { + unsigned int outSize = buffer.outputBuffer.len; + BZ2_bzBuffToBuffCompress(buffer.outputBuffer.b, &outSize, + buffer.inputBuffer.b, buffer.inputBuffer.len, + m_blockSize, 0, 30); + buffer.outputBuffer.len = outSize; + } + return buffer; + } + +private: + int m_blockSize; +}; + +class IOOperations { +public: + + IOOperations(std::ifstream& inputStream, std::ofstream& outputStream, size_t chunkSize) + : m_inputStream(inputStream), m_outputStream(outputStream), m_chunkSize(chunkSize), m_chunksRead(0) {} + + void readChunk(Buffer& buffer) { + m_inputStream.read(buffer.b, m_chunkSize); + buffer.len = static_cast(m_inputStream.gcount()); + m_chunksRead++; + } + + void writeChunk(const Buffer& buffer) { + m_outputStream.write(buffer.b, buffer.len); + } + + size_t chunksRead() const { + return m_chunksRead; + } + + size_t chunkSize() const { + return m_chunkSize; + } + + bool hasDataToRead() const { + return m_inputStream.is_open() && !m_inputStream.eof(); + } + +private: + + std::ifstream& m_inputStream; + std::ofstream& m_outputStream; + + size_t m_chunkSize; + size_t m_chunksRead; +}; + +//----------------------------------------------------------------------------------------------------------------------- +//---------------------------------------Compression example based on async_node----------------------------------------- +//----------------------------------------------------------------------------------------------------------------------- + +typedef tbb::flow::async_node< tbb::flow::continue_msg, BufferMsg > async_file_reader_node; +typedef tbb::flow::async_node< BufferMsg, tbb::flow::continue_msg > async_file_writer_node; + +class AsyncNodeActivity { +public: + + AsyncNodeActivity(IOOperations& io) + : m_io(io), m_fileWriterThread(&AsyncNodeActivity::writingLoop, this) {} + + ~AsyncNodeActivity() { + m_fileReaderThread.join(); + m_fileWriterThread.join(); + } + + void submitRead(async_file_reader_node::gateway_type& gateway) { + gateway.reserve_wait(); + std::thread(&AsyncNodeActivity::readingLoop, this, std::ref(gateway)).swap(m_fileReaderThread); + } + + void submitWrite(const BufferMsg& bufferMsg) { + m_writeQueue.push(bufferMsg); + } + +private: + + void readingLoop(async_file_reader_node::gateway_type& gateway) { + while (m_io.hasDataToRead()) { + BufferMsg bufferMsg = BufferMsg::createBufferMsg(m_io.chunksRead(), m_io.chunkSize()); + m_io.readChunk(bufferMsg.inputBuffer); + gateway.try_put(bufferMsg); + } + sendLastMessage(gateway); + gateway.release_wait(); + } + + void writingLoop() { + BufferMsg buffer; + m_writeQueue.pop(buffer); + while (!buffer.isLast) { + m_io.writeChunk(buffer.outputBuffer); + m_writeQueue.pop(buffer); + } + } + + void sendLastMessage(async_file_reader_node::gateway_type& gateway) { + BufferMsg lastMsg; + lastMsg.markLast(m_io.chunksRead()); + gateway.try_put(lastMsg); + } + + IOOperations& m_io; + + tbb::concurrent_bounded_queue< BufferMsg > m_writeQueue; + + std::thread m_fileReaderThread; + std::thread m_fileWriterThread; +}; + +void fgCompressionAsyncNode(IOOperations& io, int blockSizeIn100KB) { + tbb::flow::graph g; + + AsyncNodeActivity asyncNodeActivity(io); + + async_file_reader_node file_reader(g, tbb::flow::unlimited, [&asyncNodeActivity](const tbb::flow::continue_msg& msg, async_file_reader_node::gateway_type& gateway) { + asyncNodeActivity.submitRead(gateway); + }); + + tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB)); + + tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg)->size_t { + return bufferMsg.seqId; + }); + + // The node is serial to preserve the right order of buffers set by the preceding sequencer_node + async_file_writer_node output_writer(g, tbb::flow::serial, [&asyncNodeActivity](const BufferMsg& bufferMsg, async_file_writer_node::gateway_type& gateway) { + asyncNodeActivity.submitWrite(bufferMsg); + }); + + make_edge(file_reader, compressor); + make_edge(compressor, ordering); + make_edge(ordering, output_writer); + + file_reader.try_put(tbb::flow::continue_msg()); + + g.wait_for_all(); +} + +//----------------------------------------------------------------------------------------------------------------------- +//------------------------------------------Compression example based on async_msg--------------------------------------- +//----------------------------------------------------------------------------------------------------------------------- + +typedef tbb::flow::async_msg< BufferMsg > async_msg_type; + +class AsyncMsgActivity { +public: + + AsyncMsgActivity(tbb::flow::graph& g, IOOperations& io) + : m_io(io), m_graph(g), m_fileReaderThread(&AsyncMsgActivity::readingLoop, this), + m_fileWriterThread(&AsyncMsgActivity::writingLoop, this) + { + // Graph synchronization starts here and ends + // when the last buffer was written in "writing thread" + m_graph.increment_wait_count(); + } + + ~AsyncMsgActivity() { + m_fileReaderThread.join(); + m_fileWriterThread.join(); + + // Lets release resources that async + // activity and graph were acquired + freeBuffers(); + } + + async_msg_type submitRead(BufferMsg& bufferMsg) { + async_msg_type msg; + work_type readWork = { bufferMsg, msg }; + m_readQueue.push(readWork); + return msg; + } + + async_msg_type submitWrite(const BufferMsg& bufferMsg) { + async_msg_type msg; + work_type writeWork = { bufferMsg, msg }; + m_writeQueue.push(writeWork); + return msg; + } + +private: + + struct work_type { + BufferMsg bufferMsg; + async_msg_type msg; + }; + + void readingLoop() { + work_type readWork; + m_readQueue.pop(readWork); + + // Reading thread waits for buffers to be received + // (the graph reuses limitted number of buffers) + // and reads the file while there is something to read + while (m_io.hasDataToRead()) { + readWork.bufferMsg.seqId = m_io.chunksRead(); + m_io.readChunk(readWork.bufferMsg.inputBuffer); + readWork.msg.set(readWork.bufferMsg); + m_readQueue.pop(readWork); + } + + // Pass message with an end flag to the graph + sendLastMessage(readWork); + } + + void sendLastMessage(work_type& work) { + work.bufferMsg.markLast(m_io.chunksRead()); + work.msg.set(work.bufferMsg); + } + + void writingLoop() { + work_type writeWork; + m_writeQueue.pop(writeWork); + + // Writing thread writes all buffers that it gets + // and reuses them. At the end all reusing buffers + // is stored in read queue + while (!writeWork.bufferMsg.isLast) { + m_io.writeChunk(writeWork.bufferMsg.outputBuffer); + writeWork.msg.set(writeWork.bufferMsg); + m_writeQueue.pop(writeWork); + } + + // Store last message to the reading queue to free resources later + writeWork.msg.set(writeWork.bufferMsg); + + // After all buffers have been written + // the synchronization ends + m_graph.decrement_wait_count(); + } + + void freeBuffers() { + int buffersNumber = m_readQueue.size(); + for (int i = 0; i < buffersNumber; i++) { + work_type workToDelete; + m_readQueue.pop(workToDelete); + BufferMsg::destroyBufferMsg(workToDelete.bufferMsg); + } + } + + IOOperations& m_io; + + tbb::flow::graph& m_graph; + + tbb::concurrent_bounded_queue< work_type > m_writeQueue; + tbb::concurrent_bounded_queue< work_type > m_readQueue; + + std::thread m_fileReaderThread; + std::thread m_fileWriterThread; +}; + +void fgCompressionAsyncMsg(IOOperations& io, int blockSizeIn100KB, size_t memoryLimitIn1MB) { + // Memory limit sets the number of buffers that can be reused + int buffersNumber = memoryLimitIn1MB * 1000 * 1024 / io.chunkSize(); + + tbb::flow::graph g; + + AsyncMsgActivity asyncMsgActivity(g, io); + + tbb::flow::function_node< BufferMsg, async_msg_type > file_reader(g, tbb::flow::unlimited, [&asyncMsgActivity](BufferMsg bufferMsg) -> async_msg_type { + return asyncMsgActivity.submitRead(bufferMsg); + }); + + tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB)); + + tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& bufferMsg) -> size_t { + return bufferMsg.seqId; + }); + + // The node is serial to preserve the right order of buffers set by the preceding sequencer_node + tbb::flow::function_node< BufferMsg, async_msg_type > output_writer(g, tbb::flow::serial, [&asyncMsgActivity](const BufferMsg& bufferMsg) -> async_msg_type { + return asyncMsgActivity.submitWrite(bufferMsg); + }); + + make_edge(file_reader, compressor); + make_edge(compressor, ordering); + make_edge(ordering, output_writer); + make_edge(output_writer, file_reader); + + // Creating buffers to be reused in read/compress/write graph loop + for (int i = 0; i < buffersNumber; i++) { + BufferMsg reuseBufferMsg = BufferMsg::createBufferMsg(0, io.chunkSize()); + file_reader.try_put(reuseBufferMsg); + } + + g.wait_for_all(); +} + +//----------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------Simple compression example------------------------------------------------ +//----------------------------------------------------------------------------------------------------------------------- + +void fgCompression(IOOperations& io, int blockSizeIn100KB) { + tbb::flow::graph g; + + tbb::flow::source_node< BufferMsg > file_reader(g, [&io](BufferMsg& bufferMsg)->bool { + if (io.hasDataToRead()) { + bufferMsg = BufferMsg::createBufferMsg(io.chunksRead(), io.chunkSize()); + io.readChunk(bufferMsg.inputBuffer); + return true; + } + return false; + }); + + tbb::flow::function_node< BufferMsg, BufferMsg > compressor(g, tbb::flow::unlimited, BufferCompressor(blockSizeIn100KB)); + + tbb::flow::sequencer_node< BufferMsg > ordering(g, [](const BufferMsg& buffer)->size_t { + return buffer.seqId; + }); + + tbb::flow::function_node< BufferMsg > output_writer(g, tbb::flow::serial, [&io](const BufferMsg& bufferMsg) { + io.writeChunk(bufferMsg.outputBuffer); + BufferMsg::destroyBufferMsg(bufferMsg); + }); + + make_edge(file_reader, compressor); + make_edge(compressor, ordering); + make_edge(ordering, output_writer); + + g.wait_for_all(); +} + +//----------------------------------------------------------------------------------------------------------------------- + +bool endsWith(const std::string& str, const std::string& suffix) { + return str.find(suffix, str.length() - suffix.length()) != std::string::npos; +} + +//----------------------------------------------------------------------------------------------------------------------- + +int main(int argc, char* argv[]) { + try { + tbb::tick_count mainStartTime = tbb::tick_count::now(); + + const std::string archiveExtension = ".bz2"; + bool verbose = false; + std::string asyncType; + std::string inputFileName; + int blockSizeIn100KB = 1; // block size in 100KB chunks + size_t memoryLimitIn1MB = 1; // memory limit for compression in megabytes granularity + + utility::parse_cli_arguments(argc, argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + .arg(blockSizeIn100KB, "-b", "\t block size in 100KB chunks, [1 .. 9]") + .arg(verbose, "-v", "verbose mode") + .arg(memoryLimitIn1MB, "-l", "used memory limit for compression algorithm in 1MB (minimum) granularity") + .arg(asyncType, "-a", "name of the used graph async implementation - can be async_node or async_msg") + .positional_arg(inputFileName, "filename", "input file name") + ); + + if (inputFileName.empty()) { + throw std::invalid_argument("Input file name is not specified. Try 'fgbzip2 -h' for more information."); + } + + if (blockSizeIn100KB < 1 || blockSizeIn100KB > 9) { + throw std::invalid_argument("Incorrect block size. Try 'fgbzip2 -h' for more information."); + } + + if (memoryLimitIn1MB < 1) { + throw std::invalid_argument("Incorrect memory limit size. Try 'fgbzip2 -h' for more information."); + } + + if (verbose) std::cout << "Input file name: " << inputFileName << std::endl; + if (endsWith(inputFileName, archiveExtension)) { + throw std::invalid_argument("Input file already have " + archiveExtension + " extension."); + } + + std::ifstream inputStream(inputFileName.c_str(), std::ios::in | std::ios::binary); + if (!inputStream.is_open()) { + throw std::invalid_argument("Cannot open " + inputFileName + " file."); + } + + std::string outputFileName(inputFileName + archiveExtension); + + std::ofstream outputStream(outputFileName.c_str(), std::ios::out | std::ios::binary | std::ios::trunc); + if (!outputStream.is_open()) { + throw std::invalid_argument("Cannot open " + outputFileName + " file."); + } + + // General interface to work with I/O buffers operations + size_t chunkSize = blockSizeIn100KB * 100 * 1024; + IOOperations io(inputStream, outputStream, chunkSize); + + if (asyncType.empty()) { + if (verbose) std::cout << "Running flow graph based compression algorithm." << std::endl; + fgCompression(io, blockSizeIn100KB); + } else if (asyncType == "async_node") { + if (verbose) std::cout << "Running flow graph based compression algorithm with async_node based asynchronious IO operations." << std::endl; + fgCompressionAsyncNode(io, blockSizeIn100KB); + } else if (asyncType == "async_msg") { + if (verbose) std::cout << "Running flow graph based compression algorithm with async_msg based asynchronious IO operations. Using limited memory: " << memoryLimitIn1MB << "MB." << std::endl; + fgCompressionAsyncMsg(io, blockSizeIn100KB, memoryLimitIn1MB); + } + + inputStream.close(); + outputStream.close(); + + utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds()); + + return 0; + } catch (std::exception& e) { + std::cerr << "Error occurred. Error text is : \"" << e.what() << "\"\n"; + return -1; + } +} +#else +int main() { + utility::report_skipped(); + return 0; +} +#endif /* __TBB_PREVIEW_ASYNC_NODE && __TBB_CPP11_LAMBDAS_PRESENT */ diff --git a/examples/graph/fgbzip2/huffman.cpp b/examples/graph/fgbzip2/huffman.cpp new file mode 100644 index 0000000..b17a559 --- /dev/null +++ b/examples/graph/fgbzip2/huffman.cpp @@ -0,0 +1,257 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Huffman coding low-level stuff ---*/ +/*--- huffman.cpp ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + +/*---------------------------------------------------*/ +#define WEIGHTOF(zz0) ((zz0) & 0xffffff00) +#define DEPTHOF(zz1) ((zz1) & 0x000000ff) +#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3)) + +#define ADDWEIGHTS(zw1,zw2) \ + (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \ + (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2))) + +#define UPHEAP(z) \ +{ \ + Int32 zz, tmp; \ + zz = z; tmp = heap[zz]; \ + while (weight[tmp] < weight[heap[zz >> 1]]) { \ + heap[zz] = heap[zz >> 1]; \ + zz >>= 1; \ + } \ + heap[zz] = tmp; \ +} + +#define DOWNHEAP(z) \ +{ \ + Int32 zz, yy, tmp; \ + zz = z; tmp = heap[zz]; \ + while (True) { \ + yy = zz << 1; \ + if (yy > nHeap) break; \ + if (yy < nHeap && \ + weight[heap[yy+1]] < weight[heap[yy]]) \ + yy++; \ + if (weight[tmp] < weight[heap[yy]]) break; \ + heap[zz] = heap[yy]; \ + zz = yy; \ + } \ + heap[zz] = tmp; \ +} + + +/*---------------------------------------------------*/ +void BZ2_hbMakeCodeLengths ( UChar *len, + Int32 *freq, + Int32 alphaSize, + Int32 maxLen ) +{ + /*-- + Nodes and heap entries run from 1. Entry 0 + for both the heap and nodes is a sentinel. + --*/ + Int32 nNodes, nHeap, n1, n2, i, j, k; + Bool tooLong; + + Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ]; + Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ]; + Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; + + for (i = 0; i < alphaSize; i++) + weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; + + while (True) { + + nNodes = alphaSize; + nHeap = 0; + + heap[0] = 0; + weight[0] = 0; + parent[0] = -2; + + for (i = 1; i <= alphaSize; i++) { + parent[i] = -1; + nHeap++; + heap[nHeap] = i; + UPHEAP(nHeap); + } + + AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 ); + + while (nHeap > 1) { + n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); + n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); + nNodes++; + parent[n1] = parent[n2] = nNodes; + weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); + parent[nNodes] = -1; + nHeap++; + heap[nHeap] = nNodes; + UPHEAP(nHeap); + } + + AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 ); + + tooLong = False; + for (i = 1; i <= alphaSize; i++) { + j = 0; + k = i; + while (parent[k] >= 0) { k = parent[k]; j++; } + len[i-1] = j; + if (j > maxLen) tooLong = True; + } + + if (! tooLong) break; + + /* 17 Oct 04: keep-going condition for the following loop used + to be 'i < alphaSize', which missed the last element, + theoretically leading to the possibility of the compressor + looping. However, this count-scaling step is only needed if + one of the generated Huffman code words is longer than + maxLen, which up to and including version 1.0.2 was 20 bits, + which is extremely unlikely. In version 1.0.3 maxLen was + changed to 17 bits, which has minimal effect on compression + ratio, but does mean this scaling step is used from time to + time, enough to verify that it works. + + This means that bzip2-1.0.3 and later will only produce + Huffman codes with a maximum length of 17 bits. However, in + order to preserve backwards compatibility with bitstreams + produced by versions pre-1.0.3, the decompressor must still + handle lengths of up to 20. */ + + for (i = 1; i <= alphaSize; i++) { + j = weight[i] >> 8; + j = 1 + (j / 2); + weight[i] = j << 8; + } + } +} + + +/*---------------------------------------------------*/ +void BZ2_hbAssignCodes ( Int32 *code, + UChar *length, + Int32 minLen, + Int32 maxLen, + Int32 alphaSize ) +{ + Int32 n, vec, i; + + vec = 0; + for (n = minLen; n <= maxLen; n++) { + for (i = 0; i < alphaSize; i++) + if (length[i] == n) { code[i] = vec; vec++; }; + vec <<= 1; + } +} + + +/*---------------------------------------------------*/ +void BZ2_hbCreateDecodeTables ( Int32 *limit, + Int32 *base, + Int32 *perm, + UChar *length, + Int32 minLen, + Int32 maxLen, + Int32 alphaSize ) +{ + Int32 pp, i, j, vec; + + pp = 0; + for (i = minLen; i <= maxLen; i++) + for (j = 0; j < alphaSize; j++) + if (length[j] == i) { perm[pp] = j; pp++; }; + + for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0; + for (i = 0; i < alphaSize; i++) base[length[i]+1]++; + + for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1]; + + for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0; + vec = 0; + + for (i = minLen; i <= maxLen; i++) { + vec += (base[i+1] - base[i]); + limit[i] = vec-1; + vec <<= 1; + } + for (i = minLen + 1; i <= maxLen; i++) + base[i] = ((limit[i-1] + 1) << 1) - base[i]; +} + + +/*-------------------------------------------------------------*/ +/*--- end huffman.c ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/msvs/fgbzip2.sln b/examples/graph/fgbzip2/msvs/fgbzip2.sln new file mode 100644 index 0000000..663e94a --- /dev/null +++ b/examples/graph/fgbzip2/msvs/fgbzip2.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fgbzip2", "fgbzip2.vcxproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32 + {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32 + {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64 + {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64 + {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32 + {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32 + {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64 + {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/graph/fgbzip2/msvs/fgbzip2.vcxproj b/examples/graph/fgbzip2/msvs/fgbzip2.vcxproj new file mode 100644 index 0000000..bf28d99 --- /dev/null +++ b/examples/graph/fgbzip2/msvs/fgbzip2.vcxproj @@ -0,0 +1,216 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + fgbzip2 + {C931C7A2-074E-4150-9E7A-39A03250411E} + fgbzip2 + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_PREVIEW_FLOW_GRAPH_NODES;WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + true + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_PREVIEW_FLOW_GRAPH_NODES;WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + true + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + REM call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_PREVIEW_FLOW_GRAPH_NODES;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + true + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_PREVIEW_FLOW_GRAPH_NODES;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + true + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/fgbzip2/randtable.cpp b/examples/graph/fgbzip2/randtable.cpp new file mode 100644 index 0000000..f50e342 --- /dev/null +++ b/examples/graph/fgbzip2/randtable.cpp @@ -0,0 +1,136 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*-------------------------------------------------------------*/ +/*--- Table for randomising repetitive blocks ---*/ +/*--- randtable.cpp ---*/ +/*-------------------------------------------------------------*/ + +/* ------------------------------------------------------------------ + The original source for this example: + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + Copyright (C) 1996-2010 Julian Seward + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2010 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + + Julian Seward, jseward@bzip.org + bzip2/libbzip2 version 1.0.6 of 6 September 2010 + ------------------------------------------------------------------ */ + + +#include "bzlib_private.h" + + +/*---------------------------------------------*/ +Int32 BZ2_rNums[512] = { + 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, + 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, + 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, + 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, + 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, + 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, + 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, + 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, + 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, + 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, + 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, + 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, + 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, + 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, + 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, + 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, + 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, + 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, + 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, + 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, + 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, + 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, + 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, + 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, + 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, + 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, + 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, + 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, + 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, + 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, + 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, + 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, + 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, + 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, + 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, + 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, + 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, + 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, + 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, + 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, + 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, + 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, + 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, + 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, + 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, + 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, + 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, + 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, + 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, + 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, + 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, + 936, 638 +}; + + +/*-------------------------------------------------------------*/ +/*--- end randtable.c ---*/ +/*-------------------------------------------------------------*/ diff --git a/examples/graph/fgbzip2/readme.html b/examples/graph/fgbzip2/readme.html new file mode 100644 index 0000000..557a013 --- /dev/null +++ b/examples/graph/fgbzip2/readme.html @@ -0,0 +1,466 @@ + + + + + + Intel® Threading Building Blocks. fgbzip2 sample + + + + + +

+ fgbzip2 is a parallel implementation of bzip2 block-sorting file compressor that uses tbb::flow. + The output of this application is fully compatible with bzip2 v1.0.6 or newer. +

+ + This example includes software developed by Julian R Seward. See + here for copyright information. + +
+ It exemplifies support for asynchronous capabilities in the flow graph API, in particular async_node and async_msg. +

+ This example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example. + For more information please refer to the documentation for the compiler you use. +

+
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
fgbzip2.cpp +
Flow Graph implementation of bzip2 compressor. +
blocksort.cpp +
Block sorting machinery of libbzip2. +
bzlib.cpp +
libbzip2 top-level functions. +
bzlib.h +
Public header file for the libbzip2. +
bzlib_private.h +
Private header file for the libbzip2. +
compress.cpp +
Compression machinery of libbzip2. +
crctable.cpp +
libbzip2 table for doing CRCs. +
decompress.cpp +
Decompression machinery of libbzip2. +
huffman.cpp +
Huffman coding low-level stuff of libbzip2. +
randtable.cpp +
libbzip2 table for randomising repetitive blocks. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+
Usage
+ +
+
+
fgbzip2 -h +
Prints the help for command line options +
fgbzip2 [-b=value] [-v] [-l=value] [-a=value] [filename] +
-b block size in 100 Kb chunks, [1 .. 9]
+ -v print diagnostic output to screen
+ -l used memory limit for compression algorithm with 1MB (minimum) granularity
+ -a name of the used graph async realization - can be async_node or async_msg
+ filename name of the file to compress
+
To run a short version of this example, e.g., for use with Intel® Parallel Inspector: +
Build a debug version of the example + (see the build instructions). +
Run it with a small problem size, e.g., fgbzip2 -b=1 -a fgbzip2. +
+
+
+ +
+ Up to parent directory +
+ +
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+ +

+ The "libbzip2" sources for this example is + Copyright (c) 1996-2010 Julian R Seward. + All rights reserved. +

+

+ Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: +

    +
  1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +
  2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. +
  3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. +
  4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. +
+

+

+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj b/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj new file mode 100644 index 0000000..399a4b8 --- /dev/null +++ b/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj @@ -0,0 +1,265 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A1F593A60B8F042A00073279 /* fgbzip2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* fgbzip2.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + EAA00DB11B443FB000A83D1A /* blocksort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D931B443FB000A83D1A /* blocksort.cpp */; }; + EAA00DB31B443FB000A83D1A /* bzlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D961B443FB000A83D1A /* bzlib.cpp */; }; + EAA00DB51B443FB000A83D1A /* compress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D991B443FB000A83D1A /* compress.cpp */; }; + EAA00DB71B443FB000A83D1A /* crctable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D9B1B443FB000A83D1A /* crctable.cpp */; }; + EAA00DB91B443FB000A83D1A /* decompress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D9D1B443FB000A83D1A /* decompress.cpp */; }; + EAA00DBB1B443FB000A83D1A /* huffman.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00DA11B443FB000A83D1A /* huffman.cpp */; }; + EAA00DBE1B443FB000A83D1A /* randtable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00DAB1B443FB000A83D1A /* randtable.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 8DD76F6C0486A84900D96B5E /* fgbzip2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fgbzip2; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593A50B8F042A00073279 /* fgbzip2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fgbzip2.cpp; path = ../fgbzip2.cpp; sourceTree = SOURCE_ROOT; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; + EAA00D931B443FB000A83D1A /* blocksort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = blocksort.cpp; path = ../blocksort.cpp; sourceTree = ""; }; + EAA00D951B443FB000A83D1A /* bzlib_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bzlib_private.h; path = ../bzlib_private.h; sourceTree = ""; }; + EAA00D961B443FB000A83D1A /* bzlib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bzlib.cpp; path = ../bzlib.cpp; sourceTree = ""; }; + EAA00D971B443FB000A83D1A /* bzlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bzlib.h; path = ../bzlib.h; sourceTree = ""; }; + EAA00D991B443FB000A83D1A /* compress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compress.cpp; path = ../compress.cpp; sourceTree = ""; }; + EAA00D9B1B443FB000A83D1A /* crctable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = crctable.cpp; path = ../crctable.cpp; sourceTree = ""; }; + EAA00D9D1B443FB000A83D1A /* decompress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = decompress.cpp; path = ../decompress.cpp; sourceTree = ""; }; + EAA00DA11B443FB000A83D1A /* huffman.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = huffman.cpp; path = ../huffman.cpp; sourceTree = ""; }; + EAA00DAB1B443FB000A83D1A /* randtable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = randtable.cpp; path = ../randtable.cpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* fgbzip2 */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = fgbzip2; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + EAA00D931B443FB000A83D1A /* blocksort.cpp */, + EAA00D951B443FB000A83D1A /* bzlib_private.h */, + EAA00D961B443FB000A83D1A /* bzlib.cpp */, + EAA00D971B443FB000A83D1A /* bzlib.h */, + EAA00D991B443FB000A83D1A /* compress.cpp */, + EAA00D9B1B443FB000A83D1A /* crctable.cpp */, + EAA00D9D1B443FB000A83D1A /* decompress.cpp */, + EAA00DA11B443FB000A83D1A /* huffman.cpp */, + EAA00DAB1B443FB000A83D1A /* randtable.cpp */, + A1F593A50B8F042A00073279 /* fgbzip2.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* fgbzip2 */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* fgbzip2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "fgbzip2" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = fgbzip2; + productInstallPath = "$(HOME)/bin"; + productName = fgbzip2; + productReference = 8DD76F6C0486A84900D96B5E /* fgbzip2 */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fgbzip2" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* fgbzip2 */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* fgbzip2 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EAA00DB91B443FB000A83D1A /* decompress.cpp in Sources */, + EAA00DBB1B443FB000A83D1A /* huffman.cpp in Sources */, + EAA00DB31B443FB000A83D1A /* bzlib.cpp in Sources */, + EAA00DB71B443FB000A83D1A /* crctable.cpp in Sources */, + A1F593A60B8F042A00073279 /* fgbzip2.cpp in Sources */, + EAA00DB11B443FB000A83D1A /* blocksort.cpp in Sources */, + EAA00DBE1B443FB000A83D1A /* randtable.cpp in Sources */, + EAA00DB51B443FB000A83D1A /* compress.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = fgbzip2; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = fgbzip2; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES; + GCC_VERSION = ""; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES; + GCC_VERSION = ""; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "fgbzip2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + 1DEB923308733DC60010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fgbzip2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + 1DEB923708733DC60010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/graph/index.html b/examples/graph/index.html new file mode 100644 index 0000000..5c310a6 --- /dev/null +++ b/examples/graph/index.html @@ -0,0 +1,358 @@ + + + + + + Intel® Threading Building Blocks. Samples on Intel TBB Flow Graph feature + + + + + +

+ This directory has examples of the Intel TBB Flow Graph feature. +

+ +
+
Directories
+ +
+
+
dining_philosophers +
An implementation of dining philosophers in graph using the reserving join node. +
binpack +
A solution to the binpacking problem using a queue_node, a buffer_node and function_nodes. +
logic_sim +
A simplistic example of a collection of digital logic gates that can be easily composed into larger circuits. +
som +
A simple example of a Kohonen Self-Organizing Map using cancellation. +
fgbzip2 +
A parallel implementation of bzip2 block-sorting file compressor. +
cholesky +
Several versions of Cholesky Factorization algorithm implementation. +
stereo +
An implementation of stereo image creation from two images (anaglyph effect). +
matmult +
Matrix multiplication Gen kernel implementation with the flow graph interface. +
+
+
+
+ Up to parent directory +
+
+
Legal Information:
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/graph/logic_sim/D_latch.h b/examples/graph/logic_sim/D_latch.h new file mode 100644 index 0000000..76c2352 --- /dev/null +++ b/examples/graph/logic_sim/D_latch.h @@ -0,0 +1,60 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef __TBBexample_graph_logicsim_dlatch_H +#define __TBBexample_graph_logicsim_dlatch_H 1 + +#include "basics.h" + +class D_latch : public composite_node< tuple< signal_t, signal_t >, tuple< signal_t, signal_t > > { + broadcast_node D_port; + broadcast_node E_port; + not_gate a_not; + and_gate<2> first_and; + and_gate<2> second_and; + nor_gate<2> first_nor; + nor_gate<2> second_nor; + graph& my_graph; + typedef composite_node< tuple< signal_t, signal_t >, tuple< signal_t, signal_t > > base_type; + + public: + D_latch(graph& g) : base_type(g), my_graph(g), D_port(g), E_port(g), a_not(g), first_and(g), second_and(g), + first_nor(g), second_nor(g) + { + make_edge(D_port, input_port<0>(a_not)); + make_edge(D_port, input_port<1>(second_and)); + make_edge(E_port, input_port<1>(first_and)); + make_edge(E_port, input_port<0>(second_and)); + make_edge(a_not, input_port<0>(first_and)); + make_edge(first_and, input_port<0>(first_nor)); + make_edge(second_and, input_port<1>(second_nor)); + make_edge(first_nor, input_port<0>(second_nor)); + make_edge(second_nor, input_port<1>(first_nor)); + + base_type::input_ports_type input_tuple(D_port, E_port); + base_type::output_ports_type output_tuple(output_port<0>(first_nor), output_port<0>(second_nor)); + + base_type::set_external_ports(input_tuple, output_tuple); + base_type::add_visible_nodes(D_port, E_port, a_not, first_and, second_and, first_nor, second_nor); + } + ~D_latch() {} +}; + +#endif /* __TBBexample_graph_logicsim_dlatch_H */ diff --git a/examples/graph/logic_sim/Makefile b/examples/graph/logic_sim/Makefile new file mode 100644 index 0000000..62d268a --- /dev/null +++ b/examples/graph/logic_sim/Makefile @@ -0,0 +1,57 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=test_all +ARGS=4 +PERF_RUN_ARGS=auto silent + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # which icc + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: *.cpp + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -std=c++0x -ltbb $(LIBS) + +debug: *.cpp + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -std=c++0x -ltbb_debug $(LIBS) +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) diff --git a/examples/graph/logic_sim/Makefile.windows b/examples/graph/logic_sim/Makefile.windows new file mode 100644 index 0000000..ae1b879 --- /dev/null +++ b/examples/graph/logic_sim/Makefile.windows @@ -0,0 +1,53 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. +PROG=test_all +ARGS=4 +PERF_RUN_ARGS=auto silent + +# Try to find icl.exe +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test + +release: *.cpp + $(CXX) $(PROG).cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + +debug: *.cpp + $(CXX) $(PROG).cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest + +test: + $(PROG) $(ARGS) + +compiler_check: + @$(CXX) >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + +perf_build: release + +perf_run: + $(PROG) $(PERF_RUN_ARGS) diff --git a/examples/graph/logic_sim/basics.h b/examples/graph/logic_sim/basics.h new file mode 100644 index 0000000..79182f8 --- /dev/null +++ b/examples/graph/logic_sim/basics.h @@ -0,0 +1,560 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef __TBBexample_graph_logicsim_basics_H +#define __TBBexample_graph_logicsim_basics_H 1 + +#include +#include +#include "tbb/atomic.h" +#include "tbb/task_scheduler_init.h" +#include "tbb/tick_count.h" +#include "tbb/flow_graph.h" +#include "../../common/utility/utility.h" + +#ifndef _WIN32 +#include +#include + +void rt_sleep(int msec) { + usleep(msec*1000); +} + +#else //_WIN32 + +#undef OLDUNIXTIME +#undef STDTIME + +#include + +void rt_sleep(int msec) { + Sleep(msec); +} +#endif /* _WIN32 */ + +using namespace std; +using namespace tbb; +using namespace tbb::flow; + +typedef enum { low=0, high, undefined } signal_t; + +template class gate; + +template<> +class gate<1> : public composite_node< tuple< signal_t >, tuple< signal_t > > { +protected: + typedef indexer_node input_port_t; + typedef multifunction_node< input_port_t::output_type, tuple > gate_fn_t; + typedef gate_fn_t::output_ports_type ports_type; + typedef composite_node< tuple< signal_t >, tuple< signal_t > > base_type; +public: + template + gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) { + make_edge(in_ports, gate_fn); + base_type::input_ports_type input_tuple(input_port<0>(in_ports)); + base_type::output_ports_type output_tuple(output_port<0>(gate_fn)); + base_type::set_external_ports(input_tuple, output_tuple); + base_type::add_visible_nodes(in_ports, gate_fn); + } + virtual ~gate() {} + gate& operator=(const gate& src) { return *this; } +protected: + graph& my_graph; +private: + input_port_t in_ports; + gate_fn_t gate_fn; +}; + +template<> +class gate<2> : public composite_node< tuple< signal_t, signal_t >, tuple< signal_t > > { +protected: + typedef indexer_node input_port_t; + typedef multifunction_node< input_port_t::output_type, tuple > gate_fn_t; + typedef gate_fn_t::output_ports_type ports_type; + typedef composite_node< tuple< signal_t, signal_t >, tuple< signal_t > > base_type; +public: + template + gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) { + make_edge(in_ports, gate_fn); + base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports)); + base_type::output_ports_type output_tuple(output_port<0>(gate_fn)); + base_type::set_external_ports(input_tuple, output_tuple); + base_type::add_visible_nodes(in_ports, gate_fn); + } + virtual ~gate() {} + gate& operator=(const gate& src) { return *this; } +protected: + graph& my_graph; +private: + input_port_t in_ports; + gate_fn_t gate_fn; +}; + +template<> +class gate<3> : public composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t > > { +protected: + typedef indexer_node input_port_t; + typedef multifunction_node< input_port_t::output_type, tuple > gate_fn_t; + typedef gate_fn_t::output_ports_type ports_type; + typedef composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t > > base_type; +public: + template + gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) { + make_edge(in_ports, gate_fn); + base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports),input_port<2>(in_ports)); + base_type::output_ports_type output_tuple(output_port<0>(gate_fn)); + base_type::set_external_ports(input_tuple, output_tuple); + base_type::add_visible_nodes(in_ports, gate_fn); + } + virtual ~gate() {} + gate& operator=(const gate& src) { return *this; } +protected: + graph& my_graph; +private: + input_port_t in_ports; + gate_fn_t gate_fn; +}; + +template<> +class gate<4> : public composite_node< tuple< signal_t, signal_t, signal_t, signal_t >, tuple< signal_t > > { +protected: + typedef indexer_node input_port_t; + typedef multifunction_node< input_port_t::output_type, tuple > gate_fn_t; + typedef gate_fn_t::output_ports_type ports_type; + typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t >, tuple< signal_t > > base_type; +public: + template + gate(graph& g, Body b) : base_type(g), my_graph(g), in_ports(g), gate_fn(g, 1, b) { + make_edge(in_ports, gate_fn); + base_type::input_ports_type input_tuple(input_port<0>(in_ports),input_port<1>(in_ports),input_port<2>(in_ports), input_port<3>(in_ports)); + base_type::output_ports_type output_tuple(output_port<0>(gate_fn)); + base_type::set_external_ports(input_tuple, output_tuple); + base_type::add_visible_nodes(in_ports, gate_fn); + } + virtual ~gate() {} + gate& operator=(const gate& src) { return *this; } +protected: + graph& my_graph; +private: + input_port_t in_ports; + gate_fn_t gate_fn; +}; + +// Input devices +class steady_signal { + graph& my_graph; + signal_t init_signal; + write_once_node signal_node; + public: + steady_signal(graph& g, signal_t v) : + my_graph(g), init_signal(v), signal_node(g) {} + steady_signal(const steady_signal& src) : + my_graph(src.my_graph), init_signal(src.init_signal), + signal_node(src.my_graph) {} + ~steady_signal() {} + // Assignment is ignored + steady_signal& operator=(const steady_signal& src) { return *this; } + sender& get_out() { return signal_node; } + void activate() { signal_node.try_put(init_signal); } +}; + +class pulse { + class clock_body { + size_t& ms; + int& reps; + signal_t val; + public: + clock_body(size_t& _ms, int& _reps) : ms(_ms), reps(_reps), val(low) {} + bool operator()(signal_t& out) { + rt_sleep((int)ms); + if (reps>0) --reps; + if (val==low) val = high; + else val = low; + out = val; + return reps>0 || reps == -1; + } + }; + graph& my_graph; + size_t ms, init_ms; + int reps, init_reps; + source_node clock_node; + +public: + pulse(graph& g, size_t _ms=1000, int _reps=-1) : + my_graph(g), ms(_ms), init_ms(_ms), reps(_reps), init_reps(_reps), + clock_node(g, clock_body(ms, reps), false) + {} + pulse(const pulse& src) : + my_graph(src.my_graph), ms(src.init_ms), init_ms(src.init_ms), + reps(src.init_reps), init_reps(src.init_reps), + clock_node(src.my_graph, clock_body(ms, reps), false) + {} + ~pulse() {} + // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph + pulse& operator=(const pulse& src) { + ms = src.ms; init_ms = src.init_ms; reps = src.reps; init_reps = src.init_reps; + return *this; + } + sender& get_out() { return clock_node; } + void activate() { clock_node.activate(); } + void reset() { reps = init_reps; } +}; + +class push_button { + graph& my_graph; + overwrite_node push_button_node; + public: + push_button(graph& g) : my_graph(g), push_button_node(g) { + push_button_node.try_put(low); + } + push_button(const push_button& src) : + my_graph(src.my_graph), push_button_node(src.my_graph) { + push_button_node.try_put(low); + } + ~push_button() {} + // Assignment is ignored + push_button& operator=(const push_button& src) { return *this; } + sender& get_out() { return push_button_node; } + void press() { push_button_node.try_put(high); } + void release() { push_button_node.try_put(low); } +}; + +class toggle { + graph& my_graph; + signal_t state; + overwrite_node toggle_node; + public: + toggle(graph& g) : my_graph(g), state(undefined), toggle_node(g) {} + toggle(const toggle& src) : my_graph(src.my_graph), state(undefined), + toggle_node(src.my_graph) {} + ~toggle() {} + // Assignment ignored + toggle& operator=(const toggle& src) { return *this; } + sender& get_out() { return toggle_node; } + void flip() { + if (state==high) state = low; + else state = high; + toggle_node.try_put(state); + } + void activate() { + state = low; + toggle_node.try_put(state); + } +}; + +// Basic gates +class buffer : public gate<1> { + using gate<1>::my_graph; + typedef gate<1>::ports_type ports_type; + class buffer_body { + signal_t state; + bool touched; + public: + buffer_body() : state(undefined), touched(false) {} + void operator()(const input_port_t::output_type &v, ports_type& p) { + if (!touched || state != cast_to(v)) { + state = cast_to(v); + tbb::flow::get<0>(p).try_put(state); + touched = true; + } + } + }; +public: + buffer(graph& g) : gate<1>(g, buffer_body()) {} + buffer(const buffer& src) : gate<1>(src.my_graph, buffer_body()) {} + ~buffer() {} +}; + +class not_gate : public gate<1> { + using gate<1>::my_graph; + typedef gate<1>::ports_type ports_type; + class not_body { + signal_t port; + bool touched; + public: + not_body() : port(undefined), touched(false) {} + void operator()(const input_port_t::output_type &v, ports_type& p) { + if (!touched || port != cast_to(v)) { + port = cast_to(v); + signal_t state = low; + if (port==low) state = high; + tbb::flow::get<0>(p).try_put(state); + touched = true; + } + } + }; + public: + not_gate(graph& g) : gate<1>(g, not_body()) {} + not_gate(const not_gate& src) : gate<1>(src.my_graph, not_body()) {} + ~not_gate() {} +}; + +template +class and_gate : public gate { + using gate::my_graph; + typedef typename gate::ports_type ports_type; + typedef typename gate::input_port_t::output_type from_input; + class and_body { + signal_t *ports; + signal_t state; + bool touched; + public: + and_body() : state(undefined), touched(false) { + ports = new signal_t[N]; + for (int i=0; i(v); + signal_t new_state=high; + size_t i=0; + while (i(p).try_put(state); + touched = true; + } + } + }; + public: + and_gate(graph& g) : gate(g, and_body()) {} + and_gate(const and_gate& src) : gate(src.my_graph, and_body()) {} + ~and_gate() {} +}; + +template +class or_gate : public gate { + using gate::my_graph; + typedef typename gate::ports_type ports_type; + typedef typename gate::input_port_t::output_type from_input; + class or_body { + signal_t *ports; + signal_t state; + bool touched; + public: + or_body() : state(undefined), touched(false) { + ports = new signal_t[N]; + for (int i=0; i(v); + signal_t new_state=low; + size_t i=0; + while (i(p).try_put(state); + touched = true; + } + } + }; +public: + or_gate(graph& g) : gate(g, or_body()) {} + or_gate(const or_gate& src) : gate(src.my_graph, or_body()) {} + ~or_gate() {} +}; + +template +class xor_gate : public gate { + using gate::my_graph; + typedef typename gate::ports_type ports_type; + typedef typename gate::input_port_t input_port_t; + class xor_body { + signal_t *ports; + signal_t state; + bool touched; + public: + xor_body() : state(undefined), touched(false) { + ports = new signal_t[N]; + for (int i=0; i(v); + signal_t new_state=low; + size_t i=0, highs=0; + while (i 0) { new_state = low; break; } + else if (ports[i] == high ) { ++highs; } + ++i; + } + if (!touched || state != new_state) { + state = new_state; + tbb::flow::get<0>(p).try_put(state); + touched = true; + } + } + }; + public: + xor_gate(graph& g) : gate(g, xor_body()) {} + xor_gate(const xor_gate& src) : gate(src.my_graph, xor_body()) {} + ~xor_gate() {} +}; + +template +class nor_gate : public gate { + using gate::my_graph; + typedef typename gate::ports_type ports_type; + typedef typename gate::input_port_t input_port_t; + class nor_body { + signal_t *ports; + signal_t state; + bool touched; + public: + nor_body() : state(undefined), touched(false) { + ports = new signal_t[N]; + for (int i=0; i(v); + signal_t new_state=low; + size_t i=0; + while (i(p).try_put(state); + touched = true; + } + } + }; + public: + nor_gate(graph& g) : gate(g, nor_body()) {} + nor_gate(const nor_gate& src) : gate(src.my_graph, nor_body()) {} + ~nor_gate() {} +}; + +// Output devices +class led { + class led_body { + signal_t &state; + string &label; + bool report_changes; + bool touched; + public: + led_body(signal_t &s, string &l, bool r) : + state(s), label(l), report_changes(r), touched(false) + {} + continue_msg operator()(signal_t b) { + if (!touched || b!=state) { + state = b; + if (state != undefined && report_changes) { + if (state) printf("%s: (*)\n", label.c_str()); + else printf("%s: ( )\n", label.c_str()); + } + touched = false; + } + return continue_msg(); + } + }; + graph& my_graph; + string label; + signal_t state; + bool report_changes; + function_node led_node; + public: + led(graph& g, string l, bool rc=false) : my_graph(g), label(l), state(undefined), + report_changes(rc), + led_node(g, 1, led_body(state, label, report_changes)) + {} + led(const led& src) : my_graph(src.my_graph), label(src.label), state(undefined), + report_changes(src.report_changes), + led_node(src.my_graph, 1, led_body(state, label, report_changes)) + {} + ~led() {} + // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph + // state is set to undefined so that next signal changes it + led& operator=(const led& src) { + label = src.label; state = undefined; report_changes = src.report_changes; + return *this; + } + receiver& get_in() { return led_node; } + void display() { + if (state == high) printf("%s: (*)\n", label.c_str()); + else if (state == low) printf("%s: ( )\n", label.c_str()); + else printf("%s: (u)\n", label.c_str()); + } + signal_t get_value() { return state; } +}; + +class digit : public gate<4> { + using gate<4>::my_graph; + typedef gate<4>::ports_type ports_type; + typedef gate<4>::input_port_t input_port_t; + class digit_body { + signal_t ports[4]; + static const int N = 4; + unsigned int &state; + string &label; + bool& report_changes; + public: + digit_body(unsigned int &s, string &l, bool& r) : state(s), label(l), report_changes(r) { + for (int i=0; i(v); + if (ports[0] == high) ++new_state; + if (ports[1] == high) new_state += 2; + if (ports[2] == high) new_state += 4; + if (ports[3] == high) new_state += 8; + if (state != new_state) { + state = new_state; + if (report_changes) { + printf("%s: %x\n", label.c_str(), state); + } + } + } + }; + string label; + unsigned int state; + bool report_changes; + public: + digit(graph& g, string l, bool rc=false) : + gate<4>(g, digit_body(state, label, report_changes)), + label(l), state(0), report_changes(rc) {} + digit(const digit& src) : + gate<4>(src.my_graph, digit_body(state, label, report_changes)), + label(src.label), state(0), report_changes(src.report_changes) {} + ~digit() {} + // Assignment changes the behavior of LHS to that of the RHS, but doesn't change owning graph. + // state is reset as in constructors + digit& operator=(const digit& src) { + label = src.label; state = 0; report_changes = src.report_changes; + return *this; + } + void display() { printf("%s: %x\n", label.c_str(), state); } + unsigned int get_value() { return state; } +}; + +#endif /* __TBBexample_graph_logicsim_basics_H */ diff --git a/examples/graph/logic_sim/four_bit_adder.h b/examples/graph/logic_sim/four_bit_adder.h new file mode 100644 index 0000000..3bd38b0 --- /dev/null +++ b/examples/graph/logic_sim/four_bit_adder.h @@ -0,0 +1,62 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef __TBBexample_graph_logicsim_fba_H +#define __TBBexample_graph_logicsim_fba_H 1 + +#include "one_bit_adder.h" + +typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t, signal_t >, + tuple< signal_t, signal_t, signal_t, signal_t, signal_t > > fba_base_type; + +class four_bit_adder : public fba_base_type { + graph& my_graph; + std::vector four_adders; + +public: + four_bit_adder(graph& g) : fba_base_type(g), my_graph(g), four_adders(4, one_bit_adder(g)) { + make_connections(); + set_up_composite(); + } + four_bit_adder(const four_bit_adder& src) : + fba_base_type(src.my_graph), my_graph(src.my_graph), four_adders(4, one_bit_adder(src.my_graph)) + { + make_connections(); + set_up_composite(); + } + ~four_bit_adder() {} + +private: + void make_connections() { + make_edge(output_port<1>(four_adders[0]), input_port<0>(four_adders[1])); + make_edge(output_port<1>(four_adders[1]), input_port<0>(four_adders[2])); + make_edge(output_port<1>(four_adders[2]), input_port<0>(four_adders[3])); + } + void set_up_composite() { + + fba_base_type::input_ports_type input_tuple(input_port<0>(four_adders[0]/*CI*/), input_port<1>(four_adders[0]), input_port<2>(four_adders[0]), input_port<1>(four_adders[1]), input_port<2>(four_adders[1]), input_port<1>(four_adders[2]), input_port<2>(four_adders[2]), input_port<1>(four_adders[3]), input_port<2>(four_adders[3])); + + fba_base_type::output_ports_type output_tuple(output_port<0>(four_adders[0]), output_port<0>(four_adders[1]), output_port<0>(four_adders[2]), output_port<0>(four_adders[3]),output_port<1>(four_adders[3]/*CO*/)); + + fba_base_type::set_external_ports(input_tuple, output_tuple); + } +}; + +#endif /* __TBBexample_graph_logicsim_fba_H */ diff --git a/examples/graph/logic_sim/msvs/logic_sim.sln b/examples/graph/logic_sim/msvs/logic_sim.sln new file mode 100644 index 0000000..04ccab9 --- /dev/null +++ b/examples/graph/logic_sim/msvs/logic_sim.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "logic_sim", "logic_sim.vcxproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.ActiveCfg = Debug|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|Win32.Build.0 = Debug|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.ActiveCfg = Debug|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Debug|x64.Build.0 = Debug|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.ActiveCfg = Release|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|Win32.Build.0 = Release|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.ActiveCfg = Release|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/graph/logic_sim/msvs/logic_sim.vcxproj b/examples/graph/logic_sim/msvs/logic_sim.vcxproj new file mode 100644 index 0000000..922e86b --- /dev/null +++ b/examples/graph/logic_sim/msvs/logic_sim.vcxproj @@ -0,0 +1,201 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + logic_sim + {6E9B1702-78E0-4D64-B771-8B274D963B58} + test_all + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/logic_sim/one_bit_adder.h b/examples/graph/logic_sim/one_bit_adder.h new file mode 100644 index 0000000..cd92339 --- /dev/null +++ b/examples/graph/logic_sim/one_bit_adder.h @@ -0,0 +1,103 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef __TBBexample_graph_logicsim_oba_H +#define __TBBexample_graph_logicsim_oba_H 1 + +namespace P { + //input ports + const int CI = 0; + const int A0 = 1; + const int B0 = 2; + const int A1 = 3; + const int B1 = 4; + const int A2 = 5; + const int B2 = 6; + const int A3 = 7; + const int B3 = 8; + + //output_ports + const int S0 = 0; + const int S1 = 1; + const int S2 = 2; + const int S3 = 3; + +#if USE_TWO_BIT_FULL_ADDER + const int CO = 2; +#else + const int CO = 4; +#endif +} + +#include "basics.h" + +class one_bit_adder : public composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t, signal_t > > { + broadcast_node A_port; + broadcast_node B_port; + broadcast_node CI_port; + xor_gate<2> FirstXOR; + xor_gate<2> SecondXOR; + and_gate<2> FirstAND; + and_gate<2> SecondAND; + or_gate<2> FirstOR; + graph& my_graph; + typedef composite_node< tuple< signal_t, signal_t, signal_t >, tuple< signal_t, signal_t > > base_type; + +public: + one_bit_adder(graph& g) : base_type(g), my_graph(g), A_port(g), B_port(g), CI_port(g), FirstXOR(g), + SecondXOR(g), FirstAND(g), SecondAND(g), FirstOR(g) { + make_connections(); + set_up_composite(); + } + one_bit_adder(const one_bit_adder& src) : + base_type(src.my_graph), my_graph(src.my_graph), A_port(src.my_graph), B_port(src.my_graph), + CI_port(src.my_graph), FirstXOR(src.my_graph), SecondXOR(src.my_graph), + FirstAND(src.my_graph), SecondAND(src.my_graph), FirstOR(src.my_graph) + { + make_connections(); + set_up_composite(); + } + + ~one_bit_adder() {} + +private: + void make_connections() { + + make_edge(A_port, input_port<0>(FirstXOR)); + make_edge(A_port, input_port<0>(FirstAND)); + make_edge(B_port, input_port<1>(FirstXOR)); + make_edge(B_port, input_port<1>(FirstAND)); + make_edge(CI_port, input_port<1>(SecondXOR)); + make_edge(CI_port, input_port<1>(SecondAND)); + make_edge(FirstXOR, input_port<0>(SecondXOR)); + make_edge(FirstXOR, input_port<0>(SecondAND)); + make_edge(SecondAND, input_port<0>(FirstOR)); + make_edge(FirstAND, input_port<1>(FirstOR)); + } + + void set_up_composite() { + base_type::input_ports_type input_tuple(CI_port, A_port, B_port); + base_type::output_ports_type output_tuple(output_port<0>(SecondXOR), output_port<0>(FirstOR)); + base_type::set_external_ports( input_tuple, output_tuple); + base_type::add_visible_nodes(A_port, B_port, CI_port, FirstXOR, SecondXOR, FirstAND, SecondAND, FirstOR ); + } +}; + +#endif /* __TBBexample_graph_logicsim_oba_H */ diff --git a/examples/graph/logic_sim/readme.html b/examples/graph/logic_sim/readme.html new file mode 100644 index 0000000..b1252b0 --- /dev/null +++ b/examples/graph/logic_sim/readme.html @@ -0,0 +1,406 @@ + + + + + + Intel® Threading Building Blocks. logic_sim sample + + + + + +

+ This directory contains a simple tbb::flow example that performs + simplistic digital logic simulations with basic logic gates that can + be easily composed to create more interesting circuits. It + exemplifies the multifunction_node and the indexer_node CPF, among others.

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
basics.h +
Several I/O devices and basic gates. +
one_bit_adder.h +
A one-bit full adder composed of basic gates. +
four_bit_adder.h +
A four-bit full adder composed of one-bit adders. +
D_latch.h +
A D-latch composed of basic gates. +
test_all.cpp +
A simple test program that exercises the code in the headers. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example with the Intel® C++ Compiler (Windows* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+
Usage
+ +
+
+
test_all -h +
Prints the help for command line options +
test_all [#threads=value] [verbose] [silent] [#threads] +
#threads is the number of threads to use; a range of the form low[:high] where low and optional high are non-negative integers, or 'auto' for the TBB default.
+ verbose print diagnostic output to screen
+ silent limits output to timing info; overrides verbose
+
To run a short version of this example, e.g., for use with Intel® Parallel Inspector: +
Build a debug version of the example + (see the build instructions). +
Run it with the desired number of threads, e.g., test_all 4. +
+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/graph/logic_sim/test_all.cpp b/examples/graph/logic_sim/test_all.cpp new file mode 100644 index 0000000..9424f76 --- /dev/null +++ b/examples/graph/logic_sim/test_all.cpp @@ -0,0 +1,646 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "tbb/tbb_config.h" +#include + +#include "../../common/utility/utility.h" + +#if __TBB_FLOW_GRAPH_CPP11_FEATURES + +#if _MSC_VER +#pragma warning (disable: 4503) // Suppress "decorated name length exceeded, name was truncated" warning +#endif + +#define USE_TWO_BIT_FULL_ADDER 1 + +#include "basics.h" +#include "one_bit_adder.h" +#if USE_TWO_BIT_FULL_ADDER +#include "two_bit_adder.h" +#else +#include "four_bit_adder.h" +#endif +#include "D_latch.h" +#include + +// User-specified globals with default values +bool verbose = false; // prints bin details and other diagnostics to screen +bool silent = false; // suppress all output except for time + +int get_default_num_threads() { + static int threads = 0; + if (threads == 0) + threads = tbb::task_scheduler_init::default_num_threads(); + return threads; +} + +#endif // __TBB_FLOW_GRAPH_CPP11_FEATURES + +int main(int argc, char *argv[]) { +#if __TBB_FLOW_GRAPH_CPP11_FEATURES + try { + utility::thread_number_range threads(get_default_num_threads); + utility::parse_cli_arguments(argc, argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + .positional_arg(threads,"#threads",utility::thread_number_range_desc) + .arg(verbose,"verbose"," print diagnostic output to screen") + .arg(silent,"silent"," limits output to timing info; overrides verbose") + ); + + if (silent) verbose = false; // make silent override verbose + + tick_count start = tick_count::now(); + for(int p = threads.first; p <= threads.last; p = threads.step(p)) { + task_scheduler_init init(p); + if (!silent) cout << "graph test running on " << p << " threads.\n"; + + graph g; + + { // test buffer: 0, 1 + buffer b(g); + toggle input(g); + led output(g, "OUTPUT", false); // false means we will explicitly call display to see LED + + make_edge(input.get_out(), input_port<0>(b)); + make_edge(output_port<0>(b), output.get_in()); + + if (!silent) printf("Testing buffer...\n"); + input.activate(); // 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input.flip(); // 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + } + + { // test not_gate: 0, 1 + not_gate n(g); + toggle input(g); + led output(g, "OUTPUT", false); + + make_edge(input.get_out(), input_port<0>(n)); + make_edge(output_port<0>(n), output.get_in()); + + if (!silent) printf("Testing not_gate...\n"); + input.activate(); // 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input.flip(); // 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + } + + { // test two-input and_gate: 00, 01, 10, 11 + and_gate<2> a(g); + toggle input0(g); + toggle input1(g); + led output(g, "OUTPUT", false); + + make_edge(input0.get_out(), input_port<0>(a)); + make_edge(input1.get_out(), input_port<1>(a)); + make_edge(output_port<0>(a), output.get_in()); + + if (!silent) printf("Testing and_gate...\n"); + input1.activate(); input0.activate(); // 0 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input0.flip(); // 0 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input1.flip(); input0.flip(); // 1 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input0.flip(); // 1 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + } + + { // test three-input or_gate: 000, 001, 010, 100, 011, 101, 110, 111 + or_gate<3> o(g); + toggle input0(g); + toggle input1(g); + toggle input2(g); + led output(g, "OUTPUT", false); + + make_edge(input0.get_out(), input_port<0>(o)); + make_edge(input1.get_out(), input_port<1>(o)); + make_edge(input2.get_out(), input_port<2>(o)); + make_edge(output_port<0>(o), output.get_in()); + + if (!silent) printf("Testing or_gate...\n"); + input2.activate(); input1.activate(); input0.activate(); // 0 0 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input0.flip(); // 0 0 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input1.flip(); input0.flip(); // 0 1 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input2.flip(); input1.flip(); // 1 0 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input2.flip(); input1.flip(); input0.flip(); // 0 1 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input2.flip(); input1.flip(); // 1 0 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input1.flip(); input0.flip(); // 1 1 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input0.flip(); // 1 1 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + } + + { // test two-input xor_gate: 00, 01, 10, 11 + xor_gate<2> x(g); + toggle input0(g); + toggle input1(g); + led output(g, "OUTPUT", false); + + make_edge(input0.get_out(), input_port<0>(x)); + make_edge(input1.get_out(), input_port<1>(x)); + make_edge(output_port<0>(x), output.get_in()); + + if (!silent) printf("Testing xor_gate...\n"); + input1.activate(); input0.activate(); // 0 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input0.flip(); // 0 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input1.flip(); input0.flip(); // 1 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input0.flip(); // 1 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + } + + + { // test two-input nor_gate: 00, 01, 10, 11 + nor_gate<2> n(g); + toggle input0(g); + toggle input1(g); + led output(g, "OUTPUT", false); + + make_edge(input0.get_out(), input_port<0>(n)); + make_edge(input1.get_out(), input_port<1>(n)); + make_edge(output_port<0>(n), output.get_in()); + + if (!silent) printf("Testing nor_gate...\n"); + input1.activate(); input0.activate(); // 0 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == high); + input0.flip(); // 0 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input1.flip(); input0.flip(); // 1 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + input0.flip(); // 1 1 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == low); + } + + { // test steady_signal and digit + steady_signal input0(g, high); + steady_signal input1(g, low); + and_gate<2> a(g); + or_gate<2> o(g); + xor_gate<2> x(g); + nor_gate<2> n(g); + digit output(g, "OUTPUT", false); + + make_edge(input0.get_out(), input_port<0>(a)); + make_edge(input1.get_out(), input_port<1>(a)); + make_edge(output_port<0>(a), input_port<0>(output)); + + make_edge(input0.get_out(), input_port<0>(o)); + make_edge(input1.get_out(), input_port<1>(o)); + make_edge(output_port<0>(o), input_port<1>(output)); + + make_edge(input0.get_out(), input_port<0>(x)); + make_edge(input1.get_out(), input_port<1>(x)); + make_edge(output_port<0>(x), input_port<2>(output)); + + make_edge(input0.get_out(), input_port<0>(n)); + make_edge(input1.get_out(), input_port<1>(n)); + make_edge(output_port<0>(n), input_port<3>(output)); + + if (!silent) printf("Testing steady_signal...\n"); + input0.activate(); // 1 + input1.activate(); // 0 + g.wait_for_all(); + if (!silent) output.display(); + assert(output.get_value() == 6); + } + + { // test push_button + push_button p(g); + buffer b(g); + led output(g, "OUTPUT", !silent); // true means print all LED state changes + + make_edge(p.get_out(), input_port<0>(b)); + make_edge(output_port<0>(b), output.get_in()); + + if (!silent) printf("Testing push_button...\n"); + p.press(); + p.release(); + p.press(); + p.release(); + g.wait_for_all(); + } + + { // test one_bit_adder + one_bit_adder my_adder(g); + toggle A(g); + toggle B(g); + toggle CarryIN(g); + led Sum(g, "SUM"); + led CarryOUT(g, "CarryOUT"); + + make_edge(A.get_out(), input_port(my_adder)); + make_edge(B.get_out(), input_port(my_adder)); + make_edge(CarryIN.get_out(), input_port(my_adder)); + make_edge(output_port(my_adder), Sum.get_in()); + make_edge(output_port<1>(my_adder), CarryOUT.get_in()); + + A.activate(); + B.activate(); + CarryIN.activate(); + + if (!silent) printf("A on\n"); + A.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == high) && (CarryOUT.get_value() == low)); + + if (!silent) printf("A off\n"); + A.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == low)); + + if (!silent) printf("B on\n"); + B.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == high) && (CarryOUT.get_value() == low)); + if (!silent) printf("B off\n"); + B.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == low)); + + if (!silent) printf("CarryIN on\n"); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == high) && (CarryOUT.get_value() == low)); + if (!silent) printf("CarryIN off\n"); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == low)); + + if (!silent) printf("A&B on\n"); + A.flip(); + B.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == high)); + if (!silent) printf("A&B off\n"); + A.flip(); + B.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == low)); + + if (!silent) printf("A&CarryIN on\n"); + A.flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == high)); + if (!silent) printf("A&CarryIN off\n"); + A.flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == low)); + + if (!silent) printf("B&CarryIN on\n"); + B.flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == high)); + if (!silent) printf("B&CarryIN off\n"); + B.flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == low)); + + if (!silent) printf("A&B&CarryIN on\n"); + A.flip(); + B.flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == high) && (CarryOUT.get_value() == high)); + if (!silent) printf("A&B&CarryIN off\n"); + A.flip(); + B.flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == low) && (CarryOUT.get_value() == low)); + } + +#if USE_TWO_BIT_FULL_ADDER + { // test two_bit_adder + if (!silent) printf("testing two_bit adder\n"); + two_bit_adder two_adder(g); + std::vector A(2, toggle(g)); + std::vector B(2, toggle(g)); + toggle CarryIN(g); + digit Sum(g, "SUM"); + led CarryOUT(g, "CarryOUT"); + + make_edge(A[0].get_out(), input_port(two_adder)); + make_edge(B[0].get_out(), input_port(two_adder)); + make_edge(output_port(two_adder), input_port<0>(Sum)); + + make_edge(A[1].get_out(), input_port(two_adder)); + make_edge(B[1].get_out(), input_port(two_adder)); + make_edge(output_port(two_adder), input_port<1>(Sum)); + + make_edge(CarryIN.get_out(), input_port(two_adder)); + make_edge(output_port(two_adder), CarryOUT.get_in()); + + // Activate all switches at low state + for (int i=0; i<2; ++i) { + A[i].activate(); + B[i].activate(); + } + CarryIN.activate(); + + if (!silent) printf("1+0\n"); + A[0].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low)); + + if (!silent) printf("0+1\n"); + A[0].flip(); + B[0].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low)); + } +#else + { // test four_bit_adder + four_bit_adder four_adder(g); + std::vector A(4, toggle(g)); + std::vector B(4, toggle(g)); + toggle CarryIN(g); + digit Sum(g, "SUM"); + led CarryOUT(g, "CarryOUT"); + + make_edge(A[0].get_out(), input_port(four_adder)); + make_edge(B[0].get_out(), input_port(four_adder)); + make_edge(output_port(four_adder), input_port<0>(Sum)); + + make_edge(A[1].get_out(), input_port(four_adder)); + make_edge(B[1].get_out(), input_port(four_adder)); + make_edge(output_port(four_adder), input_port<1>(Sum)); + + make_edge(A[2].get_out(), input_port(four_adder)); + make_edge(B[2].get_out(), input_port(four_adder)); + make_edge(output_port(four_adder), input_port<2>(Sum)); + + make_edge(A[3].get_out(), input_port(four_adder)); + make_edge(B[3].get_out(), input_port(four_adder)); + make_edge(output_port(four_adder), input_port<3>(Sum)); + + make_edge(CarryIN.get_out(), input_port(four_adder)); + make_edge(output_port(four_adder), CarryOUT.get_in()); + + // Activate all switches at low state + for (int i=0; i<4; ++i) { + A[i].activate(); + B[i].activate(); + } + CarryIN.activate(); + + if (!silent) printf("1+0\n"); + A[0].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low)); + + if (!silent) printf("0+1\n"); + A[0].flip(); + B[0].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low)); + + if (!silent) printf("3+4\n"); + A[0].flip(); + A[1].flip(); + B[0].flip(); + B[2].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low)); + + if (!silent) printf("6+1\n"); + A[0].flip(); + A[2].flip(); + B[0].flip(); + B[2].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 7) && (CarryOUT.get_value() == low)); + + if (!silent) printf("0+0+carry\n"); + A[1].flip(); + A[2].flip(); + B[0].flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 1) && (CarryOUT.get_value() == low)); + + if (!silent) printf("15+15+carry\n"); + A[0].flip(); + A[1].flip(); + A[2].flip(); + A[3].flip(); + B[0].flip(); + B[1].flip(); + B[2].flip(); + B[3].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 0xf) && (CarryOUT.get_value() == high)); + + if (!silent) printf("8+8\n"); + A[0].flip(); + A[1].flip(); + A[2].flip(); + B[0].flip(); + B[1].flip(); + B[2].flip(); + CarryIN.flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 0) && (CarryOUT.get_value() == high)); + + if (!silent) printf("0+0\n"); + A[3].flip(); + B[3].flip(); + g.wait_for_all(); + if (!silent) Sum.display(); + if (!silent) CarryOUT.display(); + assert((Sum.get_value() == 0) && (CarryOUT.get_value() == low)); + } +#endif + + { // test D_latch + D_latch my_d_latch(g); + toggle D(g); + pulse E(g, 500, 4); // clock changes every 500ms; stops after 4 changes + led Q(g, " Q", verbose); // if true, LEDs print at every state change + led notQ(g, "~Q", verbose); + + make_edge(D.get_out(), input_port<0>(my_d_latch)); + make_edge(E.get_out(), input_port<1>(my_d_latch)); + make_edge(output_port<0>(my_d_latch), Q.get_in()); + make_edge(output_port<1>(my_d_latch), notQ.get_in()); + + D.activate(); + + if (!silent) printf("Toggling D\n"); + E.activate(); + D.flip(); + g.wait_for_all(); + if (!silent && !verbose) { Q.display(); notQ.display(); } + assert((Q.get_value() == high) && (notQ.get_value() == low)); + E.reset(); + + if (!silent) printf("Toggling D\n"); + E.activate(); + D.flip(); + g.wait_for_all(); + if (!silent && !verbose) { Q.display(); notQ.display(); } + assert((Q.get_value() == low) && (notQ.get_value() == high)); + E.reset(); + + if (!silent) printf("Toggling D\n"); + E.activate(); + D.flip(); + g.wait_for_all(); + if (!silent && !verbose) { Q.display(); notQ.display(); } + assert((Q.get_value() == high) && (notQ.get_value() == low)); + E.reset(); + + if (!silent) printf("Toggling D\n"); + E.activate(); + D.flip(); + g.wait_for_all(); + if (!silent && !verbose) { Q.display(); notQ.display(); } + assert((Q.get_value() == low) && (notQ.get_value() == high)); + E.reset(); + + if (!silent) printf("Toggling D\n"); + E.activate(); + D.flip(); + g.wait_for_all(); + if (!silent && !verbose) { Q.display(); notQ.display(); } + assert((Q.get_value() == high) && (notQ.get_value() == low)); + } + } + utility::report_elapsed_time((tbb::tick_count::now() - start).seconds()); + return 0; + } catch(std::exception& e) { + cerr<<"error occurred. error text is :\"" <, + tuple< signal_t, signal_t, signal_t > > { + graph& my_graph; + std::vector two_adders; + typedef composite_node< tuple< signal_t, signal_t, signal_t, signal_t, signal_t >, + tuple< signal_t, signal_t, signal_t > > base_type; + public: + two_bit_adder(graph& g) : base_type(g), my_graph(g), two_adders(2, one_bit_adder(g)) { + make_connections(); + set_up_composite(); + } + two_bit_adder(const two_bit_adder& src) : + base_type(src.my_graph), my_graph(src.my_graph), two_adders(2, one_bit_adder(src.my_graph)) + { + make_connections(); + set_up_composite(); + } + ~two_bit_adder() {} + +private: + void make_connections() { + make_edge(output_port<1>(two_adders[0]), input_port<0>(two_adders[1])); + } + void set_up_composite() { + + base_type::input_ports_type input_tuple(input_port<0>(two_adders[0]/*CI*/), input_port<1>(two_adders[0]), input_port<2>(two_adders[0]), input_port<1>(two_adders[1]), input_port<2>(two_adders[1])); + + base_type::output_ports_type output_tuple(output_port<0>(two_adders[0]), output_port<0>(two_adders[1]),output_port<1>(two_adders[1]/*CO*/)); + base_type::set_external_ports(input_tuple, output_tuple); + } +}; + +#endif /* __TBBexample_graph_logicsim_tba_H */ + diff --git a/examples/graph/matmult/Makefile b/examples/graph/matmult/Makefile new file mode 100644 index 0000000..62183c1 --- /dev/null +++ b/examples/graph/matmult/Makefile @@ -0,0 +1,56 @@ +# Copyright (c) 2016-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. + +run_cmd= +PROG=matmult +ARGS= + +# icpc by default +ifneq (,$(shell which icc 2>/dev/null)) + CXX=icpc +endif + +# autodetect C++11 support +include ../../common/examples-common.inc + +ifeq ($(shell uname), Linux) +LIBS+= -lrt -lpthread -lcilkrts +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: + $(CXX) -O2 -DNDEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb $(LIBS) $(CXX0XFLAGS) + +debug: + $(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS) $(CXX0XFLAGS) + +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) diff --git a/examples/graph/matmult/Makefile.windows b/examples/graph/matmult/Makefile.windows new file mode 100644 index 0000000..51d27fe --- /dev/null +++ b/examples/graph/matmult/Makefile.windows @@ -0,0 +1,53 @@ +# Copyright (c) 2016-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +run_cmd= +PROG=matmult +ARGS= + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_WARNINGS /D _CRT_NONSTDC_NO_DEPRECATE /wd4267 /wd4244 +MYLDFLAGS = /INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test + +release: + $(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + +debug: + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest + +test: + $(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(PROG) $(PERF_RUN_ARGS) + diff --git a/examples/graph/matmult/matmult.cpp b/examples/graph/matmult/matmult.cpp new file mode 100644 index 0000000..39c66b0 --- /dev/null +++ b/examples/graph/matmult/matmult.cpp @@ -0,0 +1,374 @@ +/* + Copyright (c) 2016-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// ------------------------------------------------------------------------------------------------- +// This is an example of a matrix multiplication Gen kernel usage with TBB Flow Graph. +// It exemplifies support for compute offload to Intel(R) Graphics Technology in the flow graph API. +// ------------------------------------------------------------------------------------------------- + +#define TBB_PREVIEW_FLOW_GRAPH_NODES 1 +#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1 + +#include "tbb/tbb_config.h" +#include "../../common/utility/utility.h" + +#if __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE + +#if _MSC_VER +#pragma warning(disable : 4503) // suppress warning C4503: decorated name length exceeded, name was truncated +#endif + +// ------------------------------------------------------------------------------------------------- + +#include + +#include +#include + +#include "tbb/tick_count.h" +#include "tbb/flow_graph.h" +#include "tbb/gfx_factory.h" + +// ------------------------------------------------------------------------------------------------- + +#define SLM_TILE_X (4*8) +#define SLM_TILE_Y (4*8) +#define SLM_TILE_K (4*8) + +#define SIZE_X (2*SLM_TILE_X) +#define SIZE_Y (2*SLM_TILE_Y) +#define SIZE_K (2*SLM_TILE_X) + +#ifdef __GFX__ +#define BARRIER _gfx_gpgpu_thread_barrier() +#else +#define BARRIER +#endif + +#define TILE_Y 8 +#define TILE_K 8 +#define TILE_X 8 + +// The naive straightforward algorithm used to obtain reference results on CPU +void matmult_naive(const float* A, const float* B, float* C) { + for (int y = 0; y < SIZE_Y; y++) { + for (int x = 0; x < SIZE_X; x++) { + C[y * SIZE_Y + x] = (float)0; + + for (int k = 0; k < SIZE_K; k++) { + C[y * SIZE_Y + x] += A[y * SIZE_K + k] * B[k * SIZE_K + x]; + } + } + } +} + +// Shared Local Memory based algorithm +__declspec(target(gfx_kernel)) +void matmult_tiled_slm(const float A[][SIZE_K], const float B[][SIZE_X], float C[][SIZE_X]) { + // The parallel loop nest below iterates over "supertiles" in the resulting + // matrix C and it is parallelized across thread groups, 1 iteration per + // group, which effectively means that the loop nest is peeled off. + // This kernel is programmed so that each thread group calculates one + // resulting supertile in matrix C. + _Cilk_for _Thread_group(int tg_y = 0; tg_y < SIZE_Y; tg_y += SLM_TILE_Y) { + _Cilk_for _Thread_group(int tg_x = 0; tg_x < SIZE_X; tg_x += SLM_TILE_X) { + // declare "supertiles" of each matrix to be allocated in SLM + __thread_group_local float slm_atile[SLM_TILE_Y][SLM_TILE_K]; + __thread_group_local float slm_btile[SLM_TILE_K][SLM_TILE_X]; + __thread_group_local float slm_ctile[SLM_TILE_Y][SLM_TILE_X]; + + // initialize the result supertile (in parallel) + //slm_ctile[:][:] = (float)0; + _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++) + _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++) + slm_ctile[i0][i1] = (float)0; + + // calculate the dot product of supertiles: + for (int super_k = 0; super_k < SIZE_K; super_k += SLM_TILE_K) { + // cache A's and B's "supertiles" in SLM (in parallel) + //slm_atile[:][:] = A[tg_y:SLM_TILE_Y][super_k:SLM_TILE_K]; + _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++) + _Cilk_for(int i1 = 0; i1 < SLM_TILE_K; i1++) + slm_atile[i0][i1] = A[tg_y + i0][super_k + i1]; + + //slm_btile[:][:] = B[super_k:SLM_TILE_K][tg_x:SLM_TILE_X]; + _Cilk_for(int i0 = 0; i0 < SLM_TILE_K; i0++) + _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++) + slm_btile[i0][i1] = B[super_k + i0][tg_x + i1]; + + // need a barrier, since every tile in tiles are used by + // multiple threads in the group + BARRIER; + + // now multiply the supertiles as usual matrices (in parallel) + // ... + // ... using the most effective tiled algorithm: + _Cilk_for(int t_y = 0; t_y < SLM_TILE_Y; t_y += TILE_Y) { + _Cilk_for(int t_x = 0; t_x < SLM_TILE_X; t_x += TILE_X) { + // allocate tiles in registers + float atile[TILE_Y][TILE_K], btile[TILE_X]; + float ctile[TILE_Y][TILE_X]; + + // ... and initialize ctile to zero + ctile[:][:] = (float)0; + + // calculate the dot product of the tiles + for (int k = 0; k < SLM_TILE_K; k += TILE_K) { + atile[:][:] = slm_atile[t_y:TILE_Y][k:TILE_K]; + + for (int k_ind = 0; k_ind < TILE_K; k_ind++) { + btile[:] = slm_btile[k + k_ind][t_x:TILE_X]; + + // multiply current btile row by atile's + // current element and add up to corresponding + // ctile row + for (int y_ind = 0; y_ind < TILE_Y; y_ind++) { + ctile[y_ind][:] += atile[y_ind][k_ind] * + btile[:]; + } + } + } + // flush the thread-local ctile (registers) into the + // thread group-local supertile (SLM) adding up + // elements + slm_ctile[t_y:TILE_Y][t_x:TILE_X] += ctile[:][:]; + } + } + + // barrier to make sure + // (1) next iteration of the loop does not overwrite a and b + // SLM tiles used in the above calculation of slm_ctile + // (2) on the last iteration of the loop, all threads wait + // for the SLM ctile calculation to be completed before + // writing it back to memory below this loop + BARRIER; + } + + // write (in parallel) the result supertile back to memory: + //C[tg_y:SLM_TILE_Y][tg_x:SLM_TILE_X] = slm_ctile[:][:]; + _Cilk_for(int i0 = 0; i0 < SLM_TILE_Y; i0++) + _Cilk_for(int i1 = 0; i1 < SLM_TILE_X; i1++) + C[tg_y + i0][tg_x + i1] = slm_ctile[i0][i1]; + + // next iteration of the loop zeroes out slm_ctile - make sure this + // always happens after slm_ctile has been dumped to memory (above + // loop nest completes): + BARRIER; + } + } +} + +// Matrix initialization function +void init_matrix(int width, int height, float* matrix) { + for (int j = 0; j < height; j++) { + for (int i = 0; i < width; i++) { + matrix[j * height + i] = (float)(j * 4 + i); + } + } +} + +// Validate matrix with reference values +bool validate_mat(char *title, int size_y, int size_x, const float* mat, const float* ref_mat) { + int err_cnt = 0; + printf("verifying %s...", title); + fflush(stdout); + + for (int y = 0; y < size_y; y++) { + for (int x = 0; x < size_x; x++) { + float val = mat[y * size_y + x]; + float gold_val = ref_mat[y * size_y + x]; + + if (val != gold_val) { + if (err_cnt == 0) { + printf("\n"); + } + if (++err_cnt < 10) { + std::cout << + " ERROR at [" << y << "][" << x << "]: " << + val << "(should be " << gold_val << ")" << std::endl; + } + } + } + } + if (err_cnt == 0) { + printf(" ok\n"); + } else { + printf("FAILED\n"); + } + return err_cnt == 0; +} + +// ---------------------------------------------------------------------------- +// Helper types and functions +// ---------------------------------------------------------------------------- + +struct matrix_size { + int columns; + int rows; +}; + +typedef std::tuple< tbb::flow::gfx_buffer, + tbb::flow::gfx_buffer, + tbb::flow::gfx_buffer > kernel_args_type; +typedef kernel_args_type cpu_args_type; +typedef kernel_args_type validation_args_type; + +// Constructs flow graph with three computation nodes that all make matrixes multiplication +// - CPU node - obtains reference result on CPU +// - CPU SLM node - Intel(R) Cilk(TM) based matrixes multiplication implementation on CPU +// - GPU node - obtains result on GPU using GFX offload API +void mat_multiplication() { + + //------------------------------------------ + // TBB Flow Graph nodes declaration section + //------------------------------------------ + + tbb::flow::graph g; + tbb::flow::gfx_factory factory(g); + + // Enqueue task for running on Gen + tbb::flow::split_node< kernel_args_type > gpu_slm_split_n(g); + tbb::flow::streaming_node< kernel_args_type, tbb::flow::queueing, tbb::flow::gfx_factory > gpu_slm_mat_mult_n(g, matmult_tiled_slm, tbb::flow::gfx_factory::dummy_device_selector(), factory); + + // Obtain SLM algorithm result on CPU + tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer > cpu_slm_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer { + // Get references to matrixes + const tbb::flow::gfx_buffer& A_MATRIX = std::get<0>(args); + const tbb::flow::gfx_buffer& B_MATRIX = std::get<1>(args); + tbb::flow::gfx_buffer CPU_SLM_MATRIX = std::get<2>(args); + + matmult_tiled_slm((float(*)[SIZE_K])A_MATRIX.data(), (float(*)[SIZE_X])B_MATRIX.data(), (float(*)[SIZE_X])CPU_SLM_MATRIX.data()); + + return CPU_SLM_MATRIX; + }); + + // Obtain reference result on CPU + tbb::flow::function_node< cpu_args_type, tbb::flow::gfx_buffer > cpu_naive_mat_mult_n(g, tbb::flow::unlimited, [](const cpu_args_type& args) -> tbb::flow::gfx_buffer { + // Get references to matrixes + const tbb::flow::gfx_buffer& A_MATRIX = std::get<0>(args); + const tbb::flow::gfx_buffer& B_MATRIX = std::get<1>(args); + tbb::flow::gfx_buffer CPU_NAIVE_MATRIX = std::get<2>(args); + + matmult_naive(A_MATRIX.data(), B_MATRIX.data(), CPU_NAIVE_MATRIX.data()); + + return CPU_NAIVE_MATRIX; + }); + + // Validate computed matrixes + tbb::flow::join_node< validation_args_type > validation_join_n(g); + tbb::flow::function_node< validation_args_type > mat_validation_n(g, tbb::flow::unlimited, [](const validation_args_type& result) { + // Get references to matrixes + const tbb::flow::gfx_buffer& GPU_SLM_MAT = std::get<0>(result); + const tbb::flow::gfx_buffer& CPU_SLM_MAT = std::get<1>(result); + const tbb::flow::gfx_buffer& CPU_NAIVE_MAT = std::get<2>(result); + + // Verify results + // Check that slm algorithm produces correct results on CPU: + validate_mat("matrix multiply: 'SLM' CPU vs. CPU", SIZE_Y, SIZE_X, CPU_SLM_MAT.data(), CPU_NAIVE_MAT.data()); + // Verify Gen results: + validate_mat("matrix multiply: SLM Gen vs. CPU", SIZE_Y, SIZE_X, GPU_SLM_MAT.data(), CPU_NAIVE_MAT.data()); + }); + + //----------------------------------------- + // Make edge section - connecting nodes + //----------------------------------------- + + // Prepare main graph input ports for data + make_edge(tbb::flow::output_port<0>(gpu_slm_split_n), tbb::flow::input_port<0>(gpu_slm_mat_mult_n)); + make_edge(tbb::flow::output_port<1>(gpu_slm_split_n), tbb::flow::input_port<1>(gpu_slm_mat_mult_n)); + make_edge(tbb::flow::output_port<2>(gpu_slm_split_n), tbb::flow::input_port<2>(gpu_slm_mat_mult_n)); + + // Join results + make_edge(tbb::flow::output_port<2>(gpu_slm_mat_mult_n), tbb::flow::input_port<0>(validation_join_n)); + make_edge(cpu_slm_mat_mult_n, tbb::flow::input_port<1>(validation_join_n)); + make_edge(cpu_naive_mat_mult_n, tbb::flow::input_port<2>(validation_join_n)); + + //Verify correctness + make_edge(validation_join_n, mat_validation_n); + + // Set args for GFX kernel. + // Default behaviour if not set. + gpu_slm_mat_mult_n.set_args(tbb::flow::port_ref<0, 2>); + + //----------------------------------------- + // Input sizes and matrixes initialization + //----------------------------------------- + + const matrix_size A_MATRIX_SIZE = { SIZE_Y, SIZE_K }; + const matrix_size B_MATRIX_SIZE = { SIZE_K, SIZE_X }; + const matrix_size GPU_SLM_MATRIX_SIZE = { SIZE_Y, SIZE_X }; + const matrix_size CPU_SLM_MATRIX_SIZE = { SIZE_Y, SIZE_X }; + const matrix_size CPU_NAIVE_MATRIX_SIZE = { SIZE_Y, SIZE_X }; + + tbb::flow::gfx_buffer A_MATRIX(A_MATRIX_SIZE.columns * A_MATRIX_SIZE.rows); + tbb::flow::gfx_buffer B_MATRIX(B_MATRIX_SIZE.columns * B_MATRIX_SIZE.rows); + tbb::flow::gfx_buffer GPU_SLM_MATRIX(GPU_SLM_MATRIX_SIZE.columns * GPU_SLM_MATRIX_SIZE.rows); + tbb::flow::gfx_buffer CPU_SLM_MATRIX(CPU_SLM_MATRIX_SIZE.columns * CPU_SLM_MATRIX_SIZE.rows); + tbb::flow::gfx_buffer CPU_NAIVE_MATRIX(CPU_NAIVE_MATRIX_SIZE.columns * CPU_NAIVE_MATRIX_SIZE.rows); + + // Intitialize input matrixes + init_matrix(A_MATRIX_SIZE.columns, A_MATRIX_SIZE.rows, A_MATRIX.data()); + init_matrix(B_MATRIX_SIZE.columns, B_MATRIX_SIZE.rows, B_MATRIX.data()); + + // Make tuples with input data for graph + kernel_args_type GPU_SLM_INPUT = std::make_tuple(A_MATRIX, B_MATRIX, GPU_SLM_MATRIX); + kernel_args_type CPU_SLM_INPUT = std::make_tuple(A_MATRIX, B_MATRIX, CPU_SLM_MATRIX); + kernel_args_type CPU_NAIVE_INPUT = std::make_tuple(A_MATRIX, B_MATRIX, CPU_NAIVE_MATRIX); + + //----------------------------------------- + // Send input to the graph and run it + //----------------------------------------- + + gpu_slm_split_n.try_put(GPU_SLM_INPUT); + cpu_slm_mat_mult_n.try_put(CPU_SLM_INPUT); + cpu_naive_mat_mult_n.try_put(CPU_NAIVE_INPUT); + + // Run graph + g.wait_for_all(); +} + +//--------------------------------------------------------------------------------- + +int main(int argc, char* argv[]) { + try { + tbb::tick_count mainStartTime = tbb::tick_count::now(); + + utility::parse_cli_arguments(argc, argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + ); + + // Compute matrices and verify result + mat_multiplication(); + + utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds()); + return 0; + } catch (std::exception& e) { + std::cerr << "Error occurred. Error text is : \"" << e.what() << "\"\n"; + return -1; + } +} + +#else +int main() { + utility::report_skipped(); + return 0; +} +#endif /* __TBB_PREVIEW_GFX_FACTORY && __TBB_PREVIEW_STREAMING_NODE */ diff --git a/examples/graph/matmult/msvs/matmult.sln b/examples/graph/matmult/msvs/matmult.sln new file mode 100644 index 0000000..73f132c --- /dev/null +++ b/examples/graph/matmult/msvs/matmult.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "matmult", "matmult.vcxproj", "{517E31A4-BEED-481A-A5A7-5B37B82A1C16}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|Win32.ActiveCfg = Debug|Win32 + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|Win32.Build.0 = Debug|Win32 + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|x64.ActiveCfg = Debug|x64 + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Debug|x64.Build.0 = Debug|x64 + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|Win32.ActiveCfg = Release|Win32 + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|Win32.Build.0 = Release|Win32 + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|x64.ActiveCfg = Release|x64 + {517E31A4-BEED-481A-A5A7-5B37B82A1C16}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/graph/matmult/msvs/matmult.vcxproj b/examples/graph/matmult/msvs/matmult.vcxproj new file mode 100644 index 0000000..e9ebbee --- /dev/null +++ b/examples/graph/matmult/msvs/matmult.vcxproj @@ -0,0 +1,145 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {517E31A4-BEED-481A-A5A7-5B37B82A1C16} + matmult + + + + Application + true + v120 + MultiByte + + + Application + true + v120 + MultiByte + + + Application + false + v120 + true + MultiByte + + + Application + false + v120 + true + MultiByte + + + + + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + + Level3 + Disabled + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include; + + + true + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12; + + + + + Level3 + Disabled + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include; + + + true + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12; + + + + + Level3 + MaxSpeed + true + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include; + + + true + true + true + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12; + + + + + Level3 + MaxSpeed + true + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include; + + + true + true + true + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12; + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/matmult/readme.html b/examples/graph/matmult/readme.html new file mode 100644 index 0000000..f96d9ef --- /dev/null +++ b/examples/graph/matmult/readme.html @@ -0,0 +1,414 @@ + + + + + + Intel® Threading Building Blocks. matmult sample + + + + + +

+ The Matmult is an example of a Gen kernel implementing matrix multiplication. +
+
+ It exemplifies support for compute offload to Intel® Graphics Technology in the flow graph API. +

+ This example uses C++11 features. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example. + For more information please refer to the documentation for the compiler you use. +

+
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+

For detailed Intel® Graphics Technology requirements, please refer to article Getting Started With Compute Offload to Intel® Graphics Technology +

+
+
+ +
+
Files
+ +
+
+
matmult.cpp +
Matrix multiplication Gen kernel implementation with the flow graph interface. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+
Usage
+ +
+
+
matmult -h +
Prints the help for command line options +
matmult [-v] +
To run a short version of this example, e.g., for use with Intel® Parallel Inspector: +
Build a debug version of the example + (see the build instructions). +
+
+
+ +
+ Up to parent directory +
+ +
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+ +

+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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/examples/graph/som/Makefile b/examples/graph/som/Makefile new file mode 100644 index 0000000..0485676 --- /dev/null +++ b/examples/graph/som/Makefile @@ -0,0 +1,60 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +NAME=som +EXE=$(NAME).exe +ARGS= +LIGHT_ARGS=4 + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +override CXXFLAGS += $(UI_CXXFLAGS) + +SRCFILES = som_graph.cpp som.cpp + +ifeq ($(shell uname), Linux) +LIBS+= -lrt +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: $(SRCFILES) +ifeq ($(compiler),xl) + # Avoiding "1586-346 (U) An error occurred during code generation. The code generation return code was 40." with -O3. + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS) +else + $(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS) +endif + +debug: $(SRCFILES) + $(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb_debug -ltbbmalloc_debug $(LIBS) + +clean: + $(RM) $(EXE) *.o *.d + +test: + $(run_cmd) ./$(EXE) $(ARGS) + +light_test: + $(run_cmd) ./$(EXE) $(LIGHT_ARGS) diff --git a/examples/graph/som/Makefile.windows b/examples/graph/som/Makefile.windows new file mode 100644 index 0000000..c2ab843 --- /dev/null +++ b/examples/graph/som/Makefile.windows @@ -0,0 +1,46 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=som +ARGS= +LIGHT_ARGS=4 + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test +release: + $(CXX) ./som_graph.cpp ./som.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: + $(CXX) ./som_graph.cpp ./som.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +light_test: + $(PROG) $(LIGHT_ARGS) + diff --git a/examples/graph/som/msvs/som.sln b/examples/graph/som/msvs/som.sln new file mode 100644 index 0000000..d9bff89 --- /dev/null +++ b/examples/graph/som/msvs/som.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "som", "som.vcxproj", "{B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.ActiveCfg = Debug|Win32 + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|Win32.Build.0 = Debug|Win32 + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.ActiveCfg = Debug|x64 + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Debug|x64.Build.0 = Debug|x64 + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.ActiveCfg = Release|Win32 + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|Win32.Build.0 = Release|Win32 + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.ActiveCfg = Release|x64 + {B2AE2EDC-697B-4C85-AC0D-E3E523D20D6D}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/graph/som/msvs/som.vcxproj b/examples/graph/som/msvs/som.vcxproj new file mode 100644 index 0000000..a29633e --- /dev/null +++ b/examples/graph/som/msvs/som.vcxproj @@ -0,0 +1,217 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + som + {b2ae2edc-697b-4c85-ac0d-e3e523d20d6d} + som + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + false + false + + + MachineX86 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + false + false + + + MachineX64 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + false + false + + + MachineX86 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + false + false + + + MachineX64 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/som/readme.html b/examples/graph/som/readme.html new file mode 100644 index 0000000..be79d8a --- /dev/null +++ b/examples/graph/som/readme.html @@ -0,0 +1,391 @@ + + + + + + Intel® Threading Building Blocks. Self-Organizing Map (SOM) sample + + + + + +

+ The Self-Organizing Map demonstrates tbb::flow and the use of cancellation in scheduling multiple iterations of + map updates. +

+ For tutorials on Self-organizing Maps, see here and + here. +

+ The program trains the map with several examples, splitting the map into subsections and looking for best-match + for multiple examples. When an example is used to update the map, the graphs examining the sections being + updated for the next example are cancelled and restarted after the update. +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Files
+ +
+
+
som_graph.cpp +
The main program. +
som.cpp +
Utilities for handling the map. +
som.h +
Definitions and utilities. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+ Up to parent directory +
+
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+
+
+ + + diff --git a/examples/graph/som/som.cpp b/examples/graph/som/som.cpp new file mode 100644 index 0000000..6653d12 --- /dev/null +++ b/examples/graph/som/som.cpp @@ -0,0 +1,217 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// +// Self-organizing map in TBB flow::graph +// +// we will do a color map (the simple example.) +// +// serial algorithm +// +// initialize map with vectors (could be random, gradient, or something else) +// for some number of iterations +// update radius r, weight of change L +// for each example V +// find the best matching unit +// for each part of map within radius of BMU W +// update vector: W(t+1) = W(t) + w(dist)*L*(V - W(t)) + +#include "som.h" +#include "tbb/task.h" + +std::ostream& operator<<( std::ostream &out, const SOM_element &s) { + out << "("; + for(int i=0;i<(int)s.w.size();++i) { + out << s.w[i]; + if(i < (int)s.w.size()-1) { + out << ","; + } + } + out << ")"; + return out; +} + +void remark_SOM_element(const SOM_element &s) { + printf("("); + for(int i=0;i<(int)s.w.size();++i) { + printf("%g",s.w[i]); + if(i < (int)s.w.size()-1) { + printf(","); + } + } + printf(")"); +} + +std::ostream& operator<<( std::ostream &out, const search_result_type &s) { + out << "<"; + out << get(s); + out << ", " << get(s); + out << ", "; + out << get(s); + out << ">"; + return out; +} + +void remark_search_result_type(const search_result_type &s) { + printf("<%g,%d,%d>", get(s), get(s), get(s)); +} + +double +randval( double lowlimit, double highlimit) { + return double(rand()) / double(RAND_MAX) * (highlimit - lowlimit) + lowlimit; +} + +void +find_data_ranges(teaching_vector_type &teaching, SOM_element &max_range, SOM_element &min_range ) { + if(teaching.size() == 0) return; + max_range = min_range = teaching[0]; + for(int i = 1; i < (int)teaching.size(); ++i) { + max_range.elementwise_max(teaching[i]); + min_range.elementwise_min(teaching[i]); + } +} + +void add_fraction_of_difference( SOM_element &to, SOM_element const &from, double frac) { + for(int i = 0; i < (int)from.size(); ++i) { + to[i] += frac*(from[i] - to[i]); + } +} + +double +distance_squared(SOM_element x, SOM_element y) { + double rval = 0.0; for(int i=0;i<(int)x.size();++i) { + double diff = x[i] - y[i]; + rval += diff*diff; + } + return rval; +} + +void SOMap::initialize(InitializeType it, SOM_element &max_range, SOM_element &min_range) { + for(int x = 0; x < xMax; ++x) { + for(int y = 0; y < yMax; ++y) { + for( int i = 0; i < (int)max_range.size(); ++i) { + if(it == InitializeRandom) { + my_map[x][y][i] = (randval(min_range[i], max_range[i])); + } + else if(it == InitializeGradient) { + my_map[x][y][i] = ((double)(x+y)/(xMax+yMax)*(max_range[i]-min_range[i]) + min_range[i]); + } + } + } + } +} + +// subsquare [low,high) +double +SOMap::BMU_range( const SOM_element &s, int &xval, int &yval, subsquare_type &r) { + double min_distance_squared = DBL_MAX; + task &my_task = task::self(); + int min_x = -1; + int min_y = -1; + for(int x = r.rows().begin(); x != r.rows().end(); ++x) { + for( int y = r.cols().begin(); y != r.cols().end(); ++y) { + double dist = distance_squared(s,my_map[x][y]); + if(dist < min_distance_squared) { + min_distance_squared = dist; + min_x = x; + min_y = y; + } + if(cancel_test && my_task.is_cancelled()) { + xval = r.rows().begin(); + yval = r.cols().begin(); + return DBL_MAX; + } + } + } + xval = min_x; + yval = min_y; + return sqrt(min_distance_squared); +} + +void +SOMap::epoch_update_range( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate, blocked_range &r) { + int min_xiter = (int)((double)min_x - radius); + if(min_xiter < 0) min_xiter = 0; + int max_xiter = (int)((double)min_x + radius); + if(max_xiter > (int)my_map.size()-1) max_xiter = (int)my_map.size()-1; + for(int xx = r.begin(); xx <= r.end(); ++xx) { + double xrsq = (xx-min_x)*(xx-min_x); + double ysq = radius*radius - xrsq; // max extent of y influence + double yd; + if(ysq > 0) { + yd = sqrt(ysq); + int lb = (int)(min_y - yd); + int ub = (int)(min_y + yd); + for(int yy = lb; yy < ub; ++yy) { + if(yy >= 0 && yy < (int)my_map[xx].size()) { + // [xx, yy] is in the range of the update. + double my_rsq = xrsq + (yy-min_y)*(yy-min_y); // distance from BMU squared + double theta = exp(-(radius*radius) /(2.0* my_rsq)); + add_fraction_of_difference(my_map[xx][yy], s, theta * learning_rate); + } + } + } + } +} + +void SOMap::teach(teaching_vector_type &in) { + for(int i = 0; i < nPasses; ++i ) { + int j = (int)(randval(0, (double)in.size())); // this won't be reproducible. + if(j == in.size()) --j; + + int min_x = -1; + int min_y = -1; + subsquare_type br2(0, (int)my_map.size(), 1, 0, (int)my_map[0].size(), 1); + (void) BMU_range(in[j],min_x, min_y, br2); // just need min_x, min_y + // radius of interest + double radius = max_radius * exp(-(double)i*radius_decay_rate); + // update circle is min_xiter to max_xiter inclusive. + double learning_rate = max_learning_rate * exp( -(double)i * learning_decay_rate); + epoch_update(in[j], i, min_x, min_y, radius, learning_rate); + } +} + +void SOMap::debug_output() { + printf("SOMap:\n"); + for(int i = 0; i < (int)(this->my_map.size()); ++i) { + for(int j = 0; j < (int)(this->my_map[i].size()); ++j) { + printf( "map[%d, %d] == ", i, j ); + remark_SOM_element( this->my_map[i][j] ); + printf("\n"); + } + } +} + +#define RED 0 +#define GREEN 1 +#define BLUE 2 + +void readInputData() { + my_teaching.push_back(SOM_element()); + my_teaching.push_back(SOM_element()); + my_teaching.push_back(SOM_element()); + my_teaching.push_back(SOM_element()); + my_teaching.push_back(SOM_element()); + my_teaching[0][RED] = 1.0; my_teaching[0][GREEN] = 0.0; my_teaching[0][BLUE] = 0.0; + my_teaching[1][RED] = 0.0; my_teaching[1][GREEN] = 1.0; my_teaching[1][BLUE] = 0.0; + my_teaching[2][RED] = 0.0; my_teaching[2][GREEN] = 0.0; my_teaching[2][BLUE] = 1.0; + my_teaching[3][RED] = 0.3; my_teaching[3][GREEN] = 0.3; my_teaching[3][BLUE] = 0.0; + my_teaching[4][RED] = 0.5; my_teaching[4][GREEN] = 0.5; my_teaching[4][BLUE] = 0.9; +} diff --git a/examples/graph/som/som.h b/examples/graph/som/som.h new file mode 100644 index 0000000..8727bcd --- /dev/null +++ b/examples/graph/som/som.h @@ -0,0 +1,161 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// +// Self-organizing map +// +// support for self-ordering maps +#ifndef __SOM_H__ +#define __SOM_H__ + +#include +#include +#include +#include +#include +#include + +#include "tbb/flow_graph.h" +#include "tbb/blocked_range2d.h" + +using namespace tbb; +using namespace tbb::flow; + +typedef blocked_range2d subsquare_type; +typedef tuple search_result_type; + +std::ostream& operator<<( std::ostream &out, const search_result_type &s); + +#define RADIUS 0 // for the std::gets +#define XV 1 +#define YV 2 + +// to have single definitions of static variables, define _MAIN_C_ in the main program +// +#ifdef _MAIN_C_ +#define DEFINE // nothing +#define INIT(n) = n +#else // not in main file +#define DEFINE extern +#define INIT(n) // nothing +#endif // _MAIN_C_ + +DEFINE int nElements INIT(3); // length of input vectors, matching vector in map +DEFINE double max_learning_rate INIT(0.8); // decays exponentially +DEFINE double radius_decay_rate; +DEFINE double learning_decay_rate INIT(0.005); +DEFINE double max_radius; +DEFINE bool extra_debug INIT(false); +DEFINE bool cancel_test INIT(false); + +DEFINE int xMax INIT(100); +DEFINE int yMax INIT(100); +DEFINE int nPasses INIT(100); + +enum InitializeType { InitializeRandom, InitializeGradient }; +#define RED 0 +#define GREEN 1 +#define BLUE 2 +class SOM_element; +void remark_SOM_element(const SOM_element &s); + +// all SOM_element vectors are the same length (nElements), so we do not have +// to range-check the vector accesses. +class SOM_element { + std::vector w; +public: + friend std::ostream& operator<<( std::ostream &out, const SOM_element &s); + friend void remark_SOM_element(const SOM_element &s); + SOM_element() : w(nElements,0.0) {} + double &operator[](int indx) { return w.at(indx); } + const double &operator[](int indx) const { return w.at(indx); } + bool operator==(SOM_element const &other) const { + for(size_t i=0;i other.w[i]) w[i] = other.w[i]; + } + size_t size() const { return w.size(); } +}; + +typedef std::vector teaching_vector_type; + +DEFINE SOM_element max_range; +DEFINE SOM_element min_range; + +extern double randval( double lowlimit, double highlimit); + +extern void find_data_ranges(teaching_vector_type &teaching, SOM_element &max_range, SOM_element &min_range ); + +extern void add_fraction_of_difference( SOM_element &to, SOM_element &from, double frac); + +DEFINE teaching_vector_type my_teaching; + +class SOMap { + std::vector< std::vector< SOM_element > > my_map; +public: + SOMap(int xSize, int ySize) { + my_map.reserve(xSize); + for(int i = 0; i < xSize; ++i) { + my_map.push_back(teaching_vector_type()); + my_map[i].reserve(ySize); + for(int j = 0; j < ySize;++j) { + my_map[i].push_back(SOM_element()); + } + } + } + size_t size() { return my_map.size(); } + void initialize(InitializeType it, SOM_element &max_range, SOM_element &min_range); + teaching_vector_type &operator[](int indx) { return my_map[indx]; } + SOM_element &at(int xVal, int yVal) { return my_map[xVal][yVal]; } + SOM_element &at(search_result_type const &s) { return my_map[flow::get<1>(s)][flow::get<2>(s)]; } + void epoch_update( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate) { + int min_xiter = (int)((double)min_x - radius); + if(min_xiter < 0) min_xiter = 0; + int max_xiter = (int)((double)min_x + radius); + if(max_xiter > (int)my_map.size()-1) max_xiter = (int)(my_map.size()-1); + blocked_range br1(min_xiter, max_xiter, 1); + epoch_update_range(s, epoch, min_x, min_y, radius, learning_rate, br1); + } + void epoch_update_range( SOM_element const &s, int epoch, int min_x, int min_y, double radius, double learning_rate, blocked_range &r); + void teach( teaching_vector_type &id); + void debug_output(); + // find BMU given an input, returns distance + double BMU_range(const SOM_element &s, int &xval, int &yval, subsquare_type &r); + double BMU(const SOM_element &s, int &xval, int &yval) { + subsquare_type br(0,(int)my_map.size(),1,0,(int)my_map[0].size(),1); + return BMU_range(s, xval, yval, br); + } +}; + +extern double distance_squared(SOM_element x, SOM_element y); +void remark_SOM_element(const SOM_element &s); + +extern void readInputData(); +#endif // __SOM_H__ diff --git a/examples/graph/som/som_graph.cpp b/examples/graph/som/som_graph.cpp new file mode 100644 index 0000000..a43c439 --- /dev/null +++ b/examples/graph/som/som_graph.cpp @@ -0,0 +1,423 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// +// Self-organizing map in TBB flow::graph +// +// This is an example of the use of cancellation in a graph. After a point in searching for +// the best match for an example, two examples are looked for simultaneously. When the +// earlier example is found and the update radius is determined, the affected searches +// for the subsequent example are cancelled, and after the update they are restarted. +// As the update radius shrinks fewer searches are cancelled, and by the last iterations +// virtually all the work done for the speculating example is useful. +// +// first, a simple implementation with only one example vector +// at a time. +// +// we will do a color map (the simple example.) +// +// graph algorithm +// +// for some number of iterations +// update radius r, weight of change L +// for each example V +// use graph to find BMU +// for each part of map within radius of BMU W +// update vector: W(t+1) = W(t) + w(dist)*L*(V - W(t)) + +#define _MAIN_C_ 1 +#include "som.h" + +#include "tbb/task_scheduler_init.h" +#include "tbb/flow_graph.h" +#include "tbb/blocked_range2d.h" +#include "tbb/tick_count.h" +#include "../../common/utility/utility.h" + +#define RED 0 +#define GREEN 1 +#define BLUE 2 + +static int xranges = 1; +static int yranges = 1; +static int xsize = -1; +static int ysize = -1; + +static int global_i = 0; +static int speculation_start; +std::vector function_node_execs; +static int xRangeMax = 3; +static int yRangeMax = 3; +static bool dont_speculate = false; +static search_result_type last_update; + +class BMU_search_body { + SOMap &my_map; + subsquare_type my_square; + int &fn_tally; +public: + BMU_search_body(SOMap &_m, subsquare_type &_sq, int &fnt) : my_map(_m), my_square(_sq), fn_tally(fnt) { } + BMU_search_body( const BMU_search_body &other) : my_map(other.my_map), my_square(other.my_square), fn_tally(other.fn_tally) { } + search_result_type operator()(const SOM_element s) { + int my_x; + int my_y; + double min_dist = my_map.BMU_range(s, my_x, my_y, my_square); + ++fn_tally; // count how many times this function_node executed + return search_result_type(min_dist, my_x, my_y); + } +}; + +typedef function_node search_node; +typedef broadcast_node b_node; +typedef std::vector< search_node *> search_node_vector_type; +typedef std::vector< search_node_vector_type > search_node_array_type; +typedef std::vector< graph *> graph_vector_type; +typedef std::vector< graph_vector_type > graph_array_type; + +#define SPECULATION_CNT 2 + +graph *g[SPECULATION_CNT]; // main graph; there should only be one per epoch +b_node *send_to[SPECULATION_CNT]; // broadcast node to send exemplar to all function_nodes +queue_node *q[SPECULATION_CNT]; // queue for function nodes to put their results in +// each function_node should have its own graph +search_node_array_type* s_array[SPECULATION_CNT]; // 2d array of function nodes +graph_array_type* g_array[SPECULATION_CNT]; // 2d array of graphs + +// build a set of SPECULATION_CNT graphs, each of which consists of a broadcast_node, +// xranges x yranges function_nodes, and one queue_node for output. +// once speculation starts, if i % SPECULATION_CNT is the current graph, (i+1) % SPECULATION_CNT +// is the first speculation, and so on. +void +build_BMU_graph(SOMap &map1) { + // build current graph + xsize = ((int)map1.size() + xranges - 1) / xranges; + ysize = ((int)map1[0].size() + yranges - 1) / yranges; + function_node_execs.clear(); + function_node_execs.reserve(xranges*yranges+1); + for(int ii = 0; ii < xranges*yranges+1;++ii) function_node_execs.push_back(0); + + for(int scnt = 0; scnt < SPECULATION_CNT; ++scnt) { + g[scnt] = new graph; + send_to[scnt] = new b_node(*(g[scnt])); // broadcast node to the function_nodes + q[scnt] = new queue_node(*(g[scnt])); // output queue + + // create the function_nodes, tie to the graph + s_array[scnt] = new search_node_array_type; + s_array[scnt]->reserve(xranges); + g_array[scnt] = new graph_array_type; + g_array[scnt]->reserve(xranges); + for(int i = 0; i < (int)map1.size(); i += xsize) { + int xindex = i / xsize; + s_array[scnt]->push_back(search_node_vector_type()); + (*s_array[scnt])[xindex].reserve(yranges); + g_array[scnt]->push_back(graph_vector_type()); + (*g_array[scnt])[xindex].reserve(yranges); + for( int j = 0; j < (int)map1[0].size(); j += ysize) { + int offset = (i/xsize)*yranges + (j / ysize); + int xmax = (i + xsize) > (int)map1.size() ? (int)map1.size() : i + xsize; + int ymax = (j + ysize) > (int)map1[0].size() ? (int)map1[0].size() : j + ysize; + subsquare_type sst(i,xmax,1,j,ymax,1); + BMU_search_body bb(map1,sst,function_node_execs[offset]); + graph *g_local = new graph; + search_node *s = new search_node(*g_local, serial, bb); // copies Body + (*g_array[scnt])[xindex].push_back(g_local); + (*s_array[scnt])[xindex].push_back(s); + make_edge(*(send_to[scnt]), *s); // broadcast_node -> function_node + make_edge(*s, *(q[scnt])); // function_node -> queue_node + } + } + } +} + +// Wait for the 2D array of flow::graphs. +void wait_for_all_graphs(int cIndex) { // cIndex ranges over [0 .. SPECULATION_CNT - 1] + for(int x = 0; x < xranges; ++x) { + for(int y = 0; y < yranges; ++y) { + (*g_array[cIndex])[x][y]->wait_for_all(); + } + } +} + +void +destroy_BMU_graph() { + for(int scnt = 0; scnt < SPECULATION_CNT; ++scnt) { + for( int i = 0; i < (int)(*s_array[scnt]).size(); ++i ) { + for(int j = 0; j < (int)(*s_array[scnt])[i].size(); ++j) { + delete (*s_array[scnt])[i][j]; + delete (*g_array[scnt])[i][j]; + } + } + (*s_array[scnt]).clear(); + delete s_array[scnt]; + (*g_array[scnt]).clear(); + delete g_array[scnt]; + delete q[scnt]; + delete send_to[scnt]; + delete g[scnt]; + } +} + +void find_subrange_overlap(int const &xval, int const &yval, double const &radius, int &xlow, int &xhigh, int &ylow, int &yhigh) { + xlow = int((xval-radius)/xsize); + xhigh = int((xval+radius)/xsize); + ylow = int((yval-radius)/ysize); + yhigh = int((yval+radius)/ysize); + // circle may fall partly outside map + if(xlow < 0) xlow = 0; + if(xhigh >= xranges) xhigh = xranges - 1; + if(ylow < 0) ylow = 0; + if(yhigh >= yranges) yhigh = yranges - 1; +} + +bool overlap( int &xval, int &yval, search_result_type &sr) { + int xlow, xhigh, ylow, yhigh; + find_subrange_overlap(get(sr), get(sr), get(sr), xlow, xhigh, ylow, yhigh); + return xval >= xlow && xval <= xhigh && yval >= ylow && yval <= yhigh; +} + +void +cancel_submaps(int &xval, int &yval, double &radius, int indx) { + int xlow; + int xhigh; + int ylow; + int yhigh; + find_subrange_overlap(xval, yval, radius, xlow, xhigh, ylow, yhigh); + for(int x = xlow; x <= xhigh; ++x) { + for(int y = ylow; y <= yhigh; ++y) { + (*g_array[indx])[x][y]->root_task()->cancel_group_execution(); + } + } +} + +void +restart_submaps(int &xval, int &yval, double &radius, int indx, SOM_element &vector) { + int xlow; + int xhigh; + int ylow; + int yhigh; + find_subrange_overlap(xval, yval, radius, xlow, xhigh, ylow, yhigh); + for(int x = xlow; x <= xhigh; ++x) { + for(int y = ylow; y <= yhigh; ++y) { + // have to reset the graph + (*g_array[indx])[x][y]->root_task()->context()->reset(); + // and re-submit the exemplar for search. + (*s_array[indx])[x][y]->try_put(vector); + } + } +} + +search_result_type +graph_BMU( int indx ) { // indx ranges over [0 .. SPECULATION_CNT -1] + wait_for_all_graphs(indx); // wait for the array of subgraphs + (g[indx])->wait_for_all(); + std::vector all_srs(xRangeMax*yRangeMax,search_result_type(DBL_MAX,-1,-1)); + search_result_type sr; + search_result_type min_sr; + get(min_sr) = DBL_MAX; + int result_count = 0; + while((q[indx])->try_get(sr)) { + ++result_count; + // figure which submap this came from + int x = get(sr) / xsize; + int y = get(sr) / ysize; + int offset = x*yranges+y; // linearized subscript + all_srs[offset] = sr; + if(get(sr) < get(min_sr)) + min_sr = sr; + else if(get(sr) == get(min_sr)) { + if(get(sr) < get(min_sr)) { + min_sr = sr; + } + else if((get(sr) == get(min_sr) && + get(sr) < get(min_sr))) + { + min_sr = sr; + } + } + } + return min_sr; + // end of one epoch +} + +void graph_teach(SOMap &map1, teaching_vector_type &in) { + build_BMU_graph(map1); + // normally the training would pick random exemplars to teach the SOM. We need + // the process to be reproducible, so we will pick the exemplars in order, [0, in.size()) + int next_j = 0; + for(int epoch = 0; epoch < nPasses; ++epoch) { + global_i = epoch; + bool canceled_submaps = false; + int j = next_j; // try to make reproducible + next_j = (epoch+1) % in.size(); + search_result_type min_sr; + if(epoch < speculation_start) { + (send_to[epoch%SPECULATION_CNT])->try_put(in[j]); + } + else if(epoch == speculation_start) { + (send_to[epoch%SPECULATION_CNT])->try_put(in[j]); + if(epoch < nPasses-1) { + (send_to[(epoch+1)%SPECULATION_CNT])->try_put(in[next_j]); + } + } + else if(epoch < nPasses - 1) { + (send_to[(epoch+1)%SPECULATION_CNT])->try_put(in[next_j]); + } + min_sr = graph_BMU(epoch % SPECULATION_CNT); //calls wait_for_all() + double min_distance = get<0>(min_sr); + double radius = max_radius * exp(-(double)epoch*radius_decay_rate); + double learning_rate = max_learning_rate * exp(-(double)epoch * learning_decay_rate); + if(epoch >= speculation_start && epoch < (nPasses - 1)) { + // have to cancel the affected submaps + cancel_submaps(get(min_sr), get(min_sr), radius, (epoch+1)%SPECULATION_CNT); + canceled_submaps = true; + } + map1.epoch_update(in[j], epoch, get<1>(min_sr), get<2>(min_sr), radius, learning_rate); + ++global_i; + if(canceled_submaps) { + // do I have to wait for all the non-canceled speculative graph to complete first? + // yes, in case a canceled task was already executing. + wait_for_all_graphs((epoch+1) % SPECULATION_CNT); // wait for the array of subgraphs + restart_submaps(get<1>(min_sr), get<2>(min_sr), radius, (epoch+1)%SPECULATION_CNT, in[next_j]); + } + + last_update = min_sr; + get(last_update) = radius; // not smallest value, but range of effect + } + destroy_BMU_graph(); +} + +static const double serial_time_adjust = 1.25; +static double radius_fraction = 3.0; + +int +main(int argc, char** argv) { + int l_speculation_start; + utility::thread_number_range threads( + task_scheduler_init::default_num_threads, + task_scheduler_init::default_num_threads() // run only the default number of threads if none specified + ); + + utility::parse_cli_arguments(argc,argv, + utility::cli_argument_pack() + //"-h" option for for displaying help is present implicitly + .positional_arg(threads,"n-of-threads","number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.") + // .positional_arg(InputFileName,"input-file","input file name") + // .positional_arg(OutputFileName,"output-file","output file name") + .positional_arg(radius_fraction, "radius-fraction","size of radius at which to start speculating") + .positional_arg(nPasses, "number-of-epochs","number of examples used in learning phase") + .arg(cancel_test, "cancel-test", "test for cancel signal while finding BMU") + .arg(extra_debug, "debug", "additional output") + .arg(dont_speculate,"nospeculate","don't speculate in SOM map teaching") + ); + + readInputData(); + max_radius = (xMax < yMax) ? yMax / 2 : xMax / 2; + // need this value for the 1x1 timing below + radius_decay_rate = -(log(1.0/(double)max_radius) / (double)nPasses); + find_data_ranges(my_teaching, max_range, min_range ); + if(extra_debug) { + printf( "Data range: "); + remark_SOM_element(min_range); + printf( " to "); + remark_SOM_element(max_range); + printf( "\n"); + } + + // find how much time is taken for the single function_node case. + // adjust nPasses so the 1x1 time is somewhere around serial_time_adjust seconds. + // make sure the example test runs for at least 0.5 second. + for(;;) { + task_scheduler_init init(1); + SOMap map1(xMax,yMax); + speculation_start = nPasses + 1; // Don't speculate + + xranges = 1; + yranges = 1; + map1.initialize(InitializeGradient, max_range, min_range); + tick_count t0 = tick_count::now(); + graph_teach(map1, my_teaching); + tick_count t1 = tick_count::now(); + double nSeconds = (t1-t0).seconds(); + if(nSeconds < 0.5) { + xMax *= 2; + yMax *= 2; + continue; + } + double size_adjust = sqrt(serial_time_adjust / nSeconds); + xMax = (int)((double)xMax * size_adjust); + yMax = (int)((double)yMax * size_adjust); + max_radius = (xMax < yMax) ? yMax / 2 : xMax / 2; + radius_decay_rate = log((double)max_radius) / (double)nPasses; + + if(extra_debug) { + printf("original 1x1 case ran in %g seconds\n", nSeconds); + printf(" Size of table == %d x %d\n", xMax, yMax); + printf(" radius_decay_rate == %g\n", radius_decay_rate); + } + break; + } + + // the "max_radius" starts at 1/2*radius_fraction the table size. To start the speculation when the radius is + // 1 / n * the table size, the constant in the log below should be n / 2. so 2 == 1/4, 3 == 1/6th, + // et c. + if(dont_speculate) { + l_speculation_start = nPasses + 1; + if ( extra_debug )printf("speculation will not be done\n"); + } + else { + if(radius_fraction < 1.0 ) { + if ( extra_debug )printf("Warning: radius_fraction should be >= 1. Setting to 1.\n"); + radius_fraction = 1.0; + } + l_speculation_start = (int)((double)nPasses * log(radius_fraction) / log((double)nPasses)); + if ( extra_debug )printf( "We will start speculation at iteration %d\n", l_speculation_start ); + } + double single_time; // for speedup calculations + for(int p = threads.first; p <= threads.last; ++p) { + task_scheduler_init init(p); + if ( extra_debug )printf( " -------------- Running with %d threads. ------------\n", p); + // run the SOM build for a series of subranges + for(xranges = 1; xranges <= xRangeMax; ++xranges) { + for(yranges = xranges; yranges <= yRangeMax; ++yranges) { + if(xranges == 1 && yranges == 1) { + // don't pointlessly speculate if we're only running one subrange. + speculation_start = nPasses + 1; + } + else { + speculation_start = l_speculation_start; + } + SOMap map1(xMax, yMax); + map1.initialize(InitializeGradient, max_range, min_range); + + if(extra_debug) printf( "Start learning for [%d,%d] ----------- \n", xranges,yranges); + tick_count t0 = tick_count::now(); + graph_teach(map1, my_teaching); + tick_count t1 = tick_count::now(); + + if ( extra_debug )printf( "Done learning for [%d,%d], which took %g seconds ", xranges,yranges, (t1-t0).seconds()); + if(xranges == 1 && yranges == 1) single_time = (t1-t0).seconds(); + if ( extra_debug )printf( ": speedup == %g\n", single_time / (t1-t0).seconds()); + + } // yranges + } // xranges + } // #threads p + printf("done\n"); + return 0; +} diff --git a/examples/graph/som/xcode/som.xcodeproj/project.pbxproj b/examples/graph/som/xcode/som.xcodeproj/project.pbxproj new file mode 100644 index 0000000..aeb5256 --- /dev/null +++ b/examples/graph/som/xcode/som.xcodeproj/project.pbxproj @@ -0,0 +1,313 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 522FF8DD11F573FC00A587B2 /* som_graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522FF8DB11F573FC00A587B2 /* som_graph.cpp */; }; + 522FF8DE11F573FC00A587B2 /* som.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522FF8DC11F573FC00A587B2 /* som.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 522FF8DB11F573FC00A587B2 /* som_graph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = som_graph.cpp; path = ../som_graph.cpp; sourceTree = SOURCE_ROOT; }; + 522FF8DC11F573FC00A587B2 /* som.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = som.cpp; path = ../som.cpp; sourceTree = SOURCE_ROOT; }; + 8DD76F6C0486A84900D96B5E /* som */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = som; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* som */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = som; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 522FF8DB11F573FC00A587B2 /* som_graph.cpp */, + 522FF8DC11F573FC00A587B2 /* som.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* som */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* som */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "som" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = som; + productInstallPath = "$(HOME)/bin"; + productName = som; + productReference = 8DD76F6C0486A84900D96B5E /* som */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "som" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* som */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* som */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 522FF8DD11F573FC00A587B2 /* som_graph.cpp in Sources */, + 522FF8DE11F573FC00A587B2 /* som.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = som; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = som; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = som; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = som; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "som" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "som" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/graph/stereo/Makefile b/examples/graph/stereo/Makefile new file mode 100644 index 0000000..f84c97d --- /dev/null +++ b/examples/graph/stereo/Makefile @@ -0,0 +1,72 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=stereo +ARGS= +PERF_RUN_ARGS= + +# icpc by default +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icpc +endif + +# autodetect C++11 support +include ../../common/examples-common.inc + +# TBB libs +TBBLIB=-ltbb +TBBLIB_DEBUG=-ltbb_debug + +# OpenCL lib +OPENCL_LIB=-lOpenCL + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else +ifeq ($(shell uname),Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +override OPENCL_LIB=-framework OpenCL +endif +endif + +all: release test + +release: *.cpp + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS) + +debug: *.cpp + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS) + +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) + diff --git a/examples/graph/stereo/Makefile.windows b/examples/graph/stereo/Makefile.windows new file mode 100644 index 0000000..96417a4 --- /dev/null +++ b/examples/graph/stereo/Makefile.windows @@ -0,0 +1,57 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=stereo +ARGS= +PERF_RUN_ARGS= + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# TBB libs +TBBLIB=tbb.lib +TBBLIB_DEBUG=tbb_debug.lib + +# OpenCL lib +OPENCL_LIB=OpenCL.lib + +# The C++ compiler options +MYCXXFLAGS=/TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_SECURE_NO_WARNINGS /D _SCL_SECURE_NO_WARNINGS $(CXXFLAGS) +MYLDFLAGS=/INCREMENTAL:NO /NOLOGO /DEBUG $(LDFLAGS) + +all: release test +release: + $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link $(TBBLIB) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link $(TBBLIB_DEBUG) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +compiler_check: + @$(CXX) >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + +perf_build: release + +perf_run: + $(PROG) $(PERF_RUN_ARGS) diff --git a/examples/graph/stereo/imageEffects.cl b/examples/graph/stereo/imageEffects.cl new file mode 100644 index 0000000..fb3b6ca --- /dev/null +++ b/examples/graph/stereo/imageEffects.cl @@ -0,0 +1,56 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +__constant int redChannelOffset = 0; +__constant int greenChannelOffset = 1; +__constant int blueChannelOffset = 2; +__constant int channelsPerPixel = 4; +__constant int channelIncreaseValue = 10; + +__kernel void mergeImages( __global uchar* bufferLeft, __global uchar* bufferRight, uint width) { + const int indexWidth = get_global_id(0); + const int indexHeight = get_global_id(1); + + const int pixelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth; + const int pixelGreenChannelIndex = pixelIndex + greenChannelOffset; + const int pixelBlueChannelIndex = pixelIndex + blueChannelOffset; + + bufferLeft[pixelGreenChannelIndex] = (bufferRight[pixelGreenChannelIndex] + bufferLeft[pixelGreenChannelIndex]) / 2; + bufferLeft[pixelBlueChannelIndex] = bufferRight[pixelBlueChannelIndex]; +} + +__kernel void applyLeftImageEffect( __global uchar* bufferLeft, uint width) { + const int indexWidth = get_global_id(0); + const int indexHeight = get_global_id(1); + + const int pixelRedChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + redChannelOffset; + + bufferLeft[pixelRedChannelIndex] += channelIncreaseValue; +} + +__kernel void applyRightImageEffect( __global uchar* bufferRight, uint width) { + const int indexWidth = get_global_id(0); + const int indexHeight = get_global_id(1); + + const int pixelBlueChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + blueChannelOffset; + + bufferRight[pixelBlueChannelIndex] += channelIncreaseValue; + +} diff --git a/examples/graph/stereo/lodepng.cpp b/examples/graph/stereo/lodepng.cpp new file mode 100644 index 0000000..92f1d4b --- /dev/null +++ b/examples/graph/stereo/lodepng.cpp @@ -0,0 +1,6227 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/* +LodePNG version 20160409 + +Copyright (c) 2005-2016 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +/* +The manual and changelog are in the header file "lodepng.h" +Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. +*/ + +#include "lodepng.h" + +#include +#include +#include + +/*Visual Studio: A few warning types are not desired here.*/ +#if defined(_MSC_VER) && (_MSC_VER >= 1310) +#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/ +#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/ +#endif /*_MSC_VER */ + +const char* LODEPNG_VERSION_STRING = "20160409"; + +/* +This source file is built up in the following large parts. The code sections +with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. +-Tools for C and common code for PNG and Zlib +-C Code for Zlib (huffman, deflate, ...) +-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) +-The C++ wrapper around all of the above +*/ + +/*The malloc, realloc and free functions defined here with "lodepng_" in front +of the name, so that you can easily change them to others related to your +platform if needed. Everything else in the code calls these. Pass +-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out +#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and +define them in your own project's source files without needing to change +lodepng source code. Don't forget to remove "static" if you copypaste them +from here.*/ + +#ifdef LODEPNG_COMPILE_ALLOCATORS +static void* lodepng_malloc(size_t size) +{ + return malloc(size); +} + +static void* lodepng_realloc(void* ptr, size_t new_size) +{ + return realloc(ptr, new_size); +} + +static void lodepng_free(void* ptr) +{ + free(ptr); +} +#else /*LODEPNG_COMPILE_ALLOCATORS*/ +void* lodepng_malloc(size_t size); +void* lodepng_realloc(void* ptr, size_t new_size); +void lodepng_free(void* ptr); +#endif /*LODEPNG_COMPILE_ALLOCATORS*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // Tools for C, and common code for PNG and Zlib. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Often in case of an error a value is assigned to a variable and then it breaks +out of a loop (to go to the cleanup phase of a function). This macro does that. +It makes the error handling code shorter and more readable. + +Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83); +*/ +#define CERROR_BREAK(errorvar, code)\ +{\ + errorvar = code;\ + break;\ +} + +/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ +#define ERROR_BREAK(code) CERROR_BREAK(error, code) + +/*Set error var to the error code, and return it.*/ +#define CERROR_RETURN_ERROR(errorvar, code)\ +{\ + errorvar = code;\ + return code;\ +} + +/*Try the code, if it returns error, also return the error.*/ +#define CERROR_TRY_RETURN(call)\ +{\ + unsigned error = call;\ + if(error) return error;\ +} + +/*Set error var to the error code, and return from the void function.*/ +#define CERROR_RETURN(errorvar, code)\ +{\ + errorvar = code;\ + return;\ +} + +/* +About uivector, ucvector and string: +-All of them wrap dynamic arrays or text strings in a similar way. +-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. +-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. +-They're not used in the interface, only internally in this file as static functions. +-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. +*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*dynamic vector of unsigned ints*/ +typedef struct uivector +{ + unsigned* data; + size_t size; /*size in number of unsigned longs*/ + size_t allocsize; /*allocated size in bytes*/ +} uivector; + +static void uivector_cleanup(void* p) +{ + ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; + lodepng_free(((uivector*)p)->data); + ((uivector*)p)->data = NULL; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_reserve(uivector* p, size_t allocsize) +{ + if(allocsize > p->allocsize) + { + size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); + void* data = lodepng_realloc(p->data, newsize); + if(data) + { + p->allocsize = newsize; + p->data = (unsigned*)data; + } + else return 0; /*error: not enough memory*/ + } + return 1; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_resize(uivector* p, size_t size) +{ + if(!uivector_reserve(p, size * sizeof(unsigned))) return 0; + p->size = size; + return 1; /*success*/ +} + +/*resize and give all new elements the value*/ +static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) +{ + size_t oldsize = p->size, i; + if(!uivector_resize(p, size)) return 0; + for(i = oldsize; i < size; ++i) p->data[i] = value; + return 1; +} + +static void uivector_init(uivector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} + +#ifdef LODEPNG_COMPILE_ENCODER +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_push_back(uivector* p, unsigned c) +{ + if(!uivector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* /////////////////////////////////////////////////////////////////////////// */ + +/*dynamic vector of unsigned chars*/ +typedef struct ucvector +{ + unsigned char* data; + size_t size; /*used size*/ + size_t allocsize; /*allocated size*/ +} ucvector; + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_reserve(ucvector* p, size_t allocsize) +{ + if(allocsize > p->allocsize) + { + size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); + void* data = lodepng_realloc(p->data, newsize); + if(data) + { + p->allocsize = newsize; + p->data = (unsigned char*)data; + } + else return 0; /*error: not enough memory*/ + } + return 1; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_resize(ucvector* p, size_t size) +{ + if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0; + p->size = size; + return 1; /*success*/ +} + +#ifdef LODEPNG_COMPILE_PNG + +static void ucvector_cleanup(void* p) +{ + ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0; + lodepng_free(((ucvector*)p)->data); + ((ucvector*)p)->data = NULL; +} + +static void ucvector_init(ucvector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*you can both convert from vector to buffer&size and vica versa. If you use +init_buffer to take over a buffer and size, it is not needed to use cleanup*/ +static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) +{ + p->data = buffer; + p->allocsize = p->size = size; +} +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER) +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_push_back(ucvector* p, unsigned char c) +{ + if(!ucvector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned string_resize(char** out, size_t size) +{ + char* data = (char*)lodepng_realloc(*out, size + 1); + if(data) + { + data[size] = 0; /*null termination char*/ + *out = data; + } + return data != 0; +} + +/*init a {char*, size_t} pair for use as string*/ +static void string_init(char** out) +{ + *out = NULL; + string_resize(out, 0); +} + +/*free the above pair again*/ +static void string_cleanup(char** out) +{ + lodepng_free(*out); + *out = NULL; +} + +static void string_set(char** out, const char* in) +{ + size_t insize = strlen(in), i; + if(string_resize(out, insize)) + { + for(i = 0; i != insize; ++i) + { + (*out)[i] = in[i]; + } + } +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_read32bitInt(const unsigned char* buffer) +{ + return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]); +} + +#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER) +/*buffer must have at least 4 allocated bytes available*/ +static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) +{ + buffer[0] = (unsigned char)((value >> 24) & 0xff); + buffer[1] = (unsigned char)((value >> 16) & 0xff); + buffer[2] = (unsigned char)((value >> 8) & 0xff); + buffer[3] = (unsigned char)((value ) & 0xff); +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + +#ifdef LODEPNG_COMPILE_ENCODER +static void lodepng_add32bitInt(ucvector* buffer, unsigned value) +{ + ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/ + lodepng_set32bitInt(&buffer->data[buffer->size - 4], value); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / File IO / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DISK + +/* returns negative value on error. This should be pure C compatible, so no fstat. */ +static long lodepng_filesize(const char* filename) +{ + FILE* file; + long size; + file = fopen(filename, "rb"); + if(!file) return -1; + + if(fseek(file, 0, SEEK_END) != 0) + { + fclose(file); + return -1; + } + + size = ftell(file); + /* It may give LONG_MAX as directory size, this is invalid for us. */ + if(size == LONG_MAX) size = -1; + + fclose(file); + return size; +} + +/* load file into buffer that already has the correct allocated size. Returns error code.*/ +static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename) +{ + FILE* file; + size_t readsize; + file = fopen(filename, "rb"); + if(!file) return 78; + + readsize = fread(out, 1, size, file); + fclose(file); + + if (readsize != size) return 78; + return 0; +} + +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) +{ + long size = lodepng_filesize(filename); + if (size < 0) return 78; + *outsize = (size_t)size; + + *out = (unsigned char*)lodepng_malloc((size_t)size); + if(!(*out) && size > 0) return 83; /*the above malloc failed*/ + + return lodepng_buffer_file(*out, (size_t)size, filename); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) +{ + FILE* file; + file = fopen(filename, "wb" ); + if(!file) return 79; + fwrite((char*)buffer , 1 , buffersize, file); + fclose(file); + return 0; +} + +#endif /*LODEPNG_COMPILE_DISK*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of common code and tools. Begin of Zlib related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_ENCODER +/*TODO: this ignores potential out of memory errors*/ +#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\ +{\ + /*add a new byte at the end*/\ + if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\ + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\ + (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\ + ++(*bitpointer);\ +} + +static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1)); +} + +static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1)); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1) + +static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream)); + ++(*bitpointer); + return result; +} + +static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0, i; + for(i = 0; i != nbits; ++i) + { + result += ((unsigned)READBIT(*bitpointer, bitstream)) << i; + ++(*bitpointer); + } + return result; +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflate - Huffman / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#define FIRST_LENGTH_CODE_INDEX 257 +#define LAST_LENGTH_CODE_INDEX 285 +/*256 literals, the end code, some length codes, and 2 unused codes*/ +#define NUM_DEFLATE_CODE_SYMBOLS 288 +/*the distance codes have their own symbols, 30 used, 2 unused*/ +#define NUM_DISTANCE_SYMBOLS 32 +/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ +#define NUM_CODE_LENGTH_CODES 19 + +/*the base lengths represented by codes 257-285*/ +static const unsigned LENGTHBASE[29] + = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, + 67, 83, 99, 115, 131, 163, 195, 227, 258}; + +/*the extra bits used by codes 257-285 (added to base length)*/ +static const unsigned LENGTHEXTRA[29] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 0}; + +/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ +static const unsigned DISTANCEBASE[30] + = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, + 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; + +/*the extra bits of backwards distances (added to base)*/ +static const unsigned DISTANCEEXTRA[30] + = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + +/*the order in which "code length alphabet code lengths" are stored, out of this +the huffman tree of the dynamic huffman tree lengths is generated*/ +static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] + = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Huffman tree struct, containing multiple representations of the tree +*/ +typedef struct HuffmanTree +{ + unsigned* tree2d; + unsigned* tree1d; + unsigned* lengths; /*the lengths of the codes of the 1d-tree*/ + unsigned maxbitlen; /*maximum number of bits a single code can get*/ + unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ +} HuffmanTree; + +/*function used for debug purposes to draw the tree in ascii art with C++*/ +/* +static void HuffmanTree_draw(HuffmanTree* tree) +{ + std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl; + for(size_t i = 0; i != tree->tree1d.size; ++i) + { + if(tree->lengths.data[i]) + std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl; + } + std::cout << std::endl; +}*/ + +static void HuffmanTree_init(HuffmanTree* tree) +{ + tree->tree2d = 0; + tree->tree1d = 0; + tree->lengths = 0; +} + +static void HuffmanTree_cleanup(HuffmanTree* tree) +{ + lodepng_free(tree->tree2d); + lodepng_free(tree->tree1d); + lodepng_free(tree->lengths); +} + +/*the tree representation used by the decoder. return value is error*/ +static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) +{ + unsigned nodefilled = 0; /*up to which node it is filled*/ + unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/ + unsigned n, i; + + tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned)); + if(!tree->tree2d) return 83; /*alloc fail*/ + + /* + convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means + uninited, a value >= numcodes is an address to another bit, a value < numcodes + is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as + many columns as codes - 1. + A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. + Here, the internal nodes are stored (what their 0 and 1 option point to). + There is only memory for such good tree currently, if there are more nodes + (due to too long length codes), error 55 will happen + */ + for(n = 0; n < tree->numcodes * 2; ++n) + { + tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/ + } + + for(n = 0; n < tree->numcodes; ++n) /*the codes*/ + { + for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/ + { + unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1); + /*oversubscribed, see comment in lodepng_error_text*/ + if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55; + if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/ + { + if(i + 1 == tree->lengths[n]) /*last bit*/ + { + tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/ + treepos = 0; + } + else + { + /*put address of the next step in here, first that address has to be found of course + (it's just nodefilled + 1)...*/ + ++nodefilled; + /*addresses encoded with numcodes added to it*/ + tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes; + treepos = nodefilled; + } + } + else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes; + } + } + + for(n = 0; n < tree->numcodes * 2; ++n) + { + if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/ + } + + return 0; +} + +/* +Second step for the ...makeFromLengths and ...makeFromFrequencies functions. +numcodes, lengths and maxbitlen must already be filled in correctly. return +value is error. +*/ +static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) +{ + uivector blcount; + uivector nextcode; + unsigned error = 0; + unsigned bits, n; + + uivector_init(&blcount); + uivector_init(&nextcode); + + tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned)); + if(!tree->tree1d) error = 83; /*alloc fail*/ + + if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0) + || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0)) + error = 83; /*alloc fail*/ + + if(!error) + { + /*step 1: count number of instances of each code length*/ + for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]]; + /*step 2: generate the nextcode values*/ + for(bits = 1; bits <= tree->maxbitlen; ++bits) + { + nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1; + } + /*step 3: generate all the codes*/ + for(n = 0; n != tree->numcodes; ++n) + { + if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++; + } + } + + uivector_cleanup(&blcount); + uivector_cleanup(&nextcode); + + if(!error) return HuffmanTree_make2DTree(tree); + else return error; +} + +/* +given the code lengths (as stored in the PNG file), generate the tree as defined +by Deflate. maxbitlen is the maximum bits that a code in the tree can have. +return value is error. +*/ +static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, + size_t numcodes, unsigned maxbitlen) +{ + unsigned i; + tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i]; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->maxbitlen = maxbitlen; + return HuffmanTree_makeFromLengths2(tree); +} + +#ifdef LODEPNG_COMPILE_ENCODER + +/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding", +Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/ + +/*chain node for boundary package merge*/ +typedef struct BPMNode +{ + int weight; /*the sum of all weights in this chain*/ + unsigned index; /*index of this leaf node (called "count" in the paper)*/ + struct BPMNode* tail; /*the next nodes in this chain (null if last)*/ + int in_use; +} BPMNode; + +/*lists of chains*/ +typedef struct BPMLists +{ + /*memory pool*/ + unsigned memsize; + BPMNode* memory; + unsigned numfree; + unsigned nextfree; + BPMNode** freelist; + /*two heads of lookahead chains per list*/ + unsigned listsize; + BPMNode** chains0; + BPMNode** chains1; +} BPMLists; + +/*creates a new chain node with the given parameters, from the memory in the lists */ +static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail) +{ + unsigned i; + BPMNode* result; + + /*memory full, so garbage collect*/ + if(lists->nextfree >= lists->numfree) + { + /*mark only those that are in use*/ + for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0; + for(i = 0; i != lists->listsize; ++i) + { + BPMNode* node; + for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1; + for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1; + } + /*collect those that are free*/ + lists->numfree = 0; + for(i = 0; i != lists->memsize; ++i) + { + if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i]; + } + lists->nextfree = 0; + } + + result = lists->freelist[lists->nextfree++]; + result->weight = weight; + result->index = index; + result->tail = tail; + return result; +} + +static int bpmnode_compare(const void* a, const void* b) +{ + int wa = ((const BPMNode*)a)->weight; + int wb = ((const BPMNode*)b)->weight; + if(wa < wb) return -1; + if(wa > wb) return 1; + /*make the qsort a stable sort*/ + return ((const BPMNode*)a)->index < ((const BPMNode*)b)->index ? 1 : -1; +} + +/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/ +static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num) +{ + unsigned lastindex = lists->chains1[c]->index; + + if(c == 0) + { + if(lastindex >= numpresent) return; + lists->chains0[c] = lists->chains1[c]; + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0); + } + else + { + /*sum of the weights of the head nodes of the previous lookahead chains.*/ + int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight; + lists->chains0[c] = lists->chains1[c]; + if(lastindex < numpresent && sum > leaves[lastindex].weight) + { + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail); + return; + } + lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]); + /*in the end we are only interested in the chain of the last list, so no + need to recurse if we're at the last one (this gives measurable speedup)*/ + if(num + 1 < (int)(2 * numpresent - 2)) + { + boundaryPM(lists, leaves, numpresent, c - 1, num); + boundaryPM(lists, leaves, numpresent, c - 1, num); + } + } +} + +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen) +{ + unsigned error = 0; + unsigned i; + size_t numpresent = 0; /*number of symbols with non-zero frequency*/ + BPMNode* leaves; /*the symbols, only those with > 0 frequency*/ + + if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ + if(( (size_t)1 << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/ + + leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves)); + if(!leaves) return 83; /*alloc fail*/ + + for(i = 0; i != numcodes; ++i) + { + if(frequencies[i] > 0) + { + leaves[numpresent].weight = (int)frequencies[i]; + leaves[numpresent].index = i; + ++numpresent; + } + } + + for(i = 0; i != numcodes; ++i) lengths[i] = 0; + + /*ensure at least two present symbols. There should be at least one symbol + according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To + make these work as well ensure there are at least two symbols. The + Package-Merge code below also doesn't work correctly if there's only one + symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/ + if(numpresent == 0) + { + lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/ + } + else if(numpresent == 1) + { + lengths[leaves[0].index] = 1; + lengths[leaves[0].index == 0 ? 1 : 0] = 1; + } + else + { + BPMLists lists; + BPMNode* node; + + qsort(leaves, numpresent, sizeof(BPMNode), bpmnode_compare); + + lists.listsize = maxbitlen; + lists.memsize = 2 * maxbitlen * (maxbitlen + 1); + lists.nextfree = 0; + lists.numfree = lists.memsize; + lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory)); + lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*)); + lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/ + + if(!error) + { + for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i]; + + bpmnode_create(&lists, leaves[0].weight, 1, 0); + bpmnode_create(&lists, leaves[1].weight, 2, 0); + + for(i = 0; i != lists.listsize; ++i) + { + lists.chains0[i] = &lists.memory[0]; + lists.chains1[i] = &lists.memory[1]; + } + + /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/ + for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i); + + for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail) + { + for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index]; + } + } + + lodepng_free(lists.memory); + lodepng_free(lists.freelist); + lodepng_free(lists.chains0); + lodepng_free(lists.chains1); + } + + lodepng_free(leaves); + return error; +} + +/*Create the Huffman tree given the symbol frequencies*/ +static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, + size_t mincodes, size_t numcodes, unsigned maxbitlen) +{ + unsigned error = 0; + while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/ + tree->maxbitlen = maxbitlen; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + /*initialize all lengths to 0*/ + memset(tree->lengths, 0, numcodes * sizeof(unsigned)); + + error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); + if(!error) error = HuffmanTree_makeFromLengths2(tree); + return error; +} + +static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) +{ + return tree->tree1d[index]; +} + +static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) +{ + return tree->lengths[index]; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ +static unsigned generateFixedLitLenTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ + for(i = 0; i <= 143; ++i) bitlen[i] = 8; + for(i = 144; i <= 255; ++i) bitlen[i] = 9; + for(i = 256; i <= 279; ++i) bitlen[i] = 7; + for(i = 280; i <= 287; ++i) bitlen[i] = 8; + + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static unsigned generateFixedDistanceTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*there are 32 distance codes, but 30-31 are unused*/ + for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5; + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* +returns the code, or (unsigned)(-1) if error happened +inbitlength is the length of the complete buffer, in bits (so its byte length times 8) +*/ +static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp, + const HuffmanTree* codetree, size_t inbitlength) +{ + unsigned treepos = 0, ct; + for(;;) + { + if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/ + /* + decode the symbol from the tree. The "readBitFromStream" code is inlined in + the expression below because this is the biggest bottleneck while decoding + */ + ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)]; + ++(*bp); + if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/ + else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/ + + if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/ + } +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Inflator (Decompressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) +{ + /*TODO: check for out of memory errors*/ + generateFixedLitLenTree(tree_ll); + generateFixedDistanceTree(tree_d); +} + +/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ +static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, + const unsigned char* in, size_t* bp, size_t inlength) +{ + /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ + unsigned error = 0; + unsigned n, HLIT, HDIST, HCLEN, i; + size_t inbitlength = inlength * 8; + + /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ + unsigned* bitlen_ll = 0; /*lit,len code lengths*/ + unsigned* bitlen_d = 0; /*dist code lengths*/ + /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ + unsigned* bitlen_cl = 0; + HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ + + if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/ + + /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ + HLIT = readBitsFromStream(bp, in, 5) + 257; + /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ + HDIST = readBitsFromStream(bp, in, 5) + 1; + /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ + HCLEN = readBitsFromStream(bp, in, 4) + 4; + + if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/ + + HuffmanTree_init(&tree_cl); + + while(!error) + { + /*read the code length codes out of 3 * (amount of code length codes) bits*/ + + bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned)); + if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/); + + for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i) + { + if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3); + else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/ + } + + error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7); + if(error) break; + + /*now we can use this tree to read the lengths for the tree that this function will return*/ + bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0; + for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0; + + /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ + i = 0; + while(i < HLIT + HDIST) + { + unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength); + if(code <= 15) /*a length code*/ + { + if(i < HLIT) bitlen_ll[i] = code; + else bitlen_d[i - HLIT] = code; + ++i; + } + else if(code == 16) /*repeat previous*/ + { + unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ + unsigned value; /*set value to the previous code*/ + + if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/ + + if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 2); + + if(i < HLIT + 1) value = bitlen_ll[i - 1]; + else value = bitlen_d[i - HLIT - 1]; + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) + { + if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ + if(i < HLIT) bitlen_ll[i] = value; + else bitlen_d[i - HLIT] = value; + ++i; + } + } + else if(code == 17) /*repeat "0" 3-10 times*/ + { + unsigned replength = 3; /*read in the bits that indicate repeat length*/ + if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 3); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) + { + if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } + else if(code == 18) /*repeat "0" 11-138 times*/ + { + unsigned replength = 11; /*read in the bits that indicate repeat length*/ + if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 7); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) + { + if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + if(code == (unsigned)(-1)) + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inbitlength ? 10 : 11; + } + else error = 16; /*unexisting code, this can never happen*/ + break; + } + } + if(error) break; + + if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ + + /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ + error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15); + if(error) break; + error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15); + + break; /*end of error-while*/ + } + + lodepng_free(bitlen_cl); + lodepng_free(bitlen_ll); + lodepng_free(bitlen_d); + HuffmanTree_cleanup(&tree_cl); + + return error; +} + +/*inflate a block with dynamic of fixed Huffman tree*/ +static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, + size_t* pos, size_t inlength, unsigned btype) +{ + unsigned error = 0; + HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ + HuffmanTree tree_d; /*the huffman tree for distance codes*/ + size_t inbitlength = inlength * 8; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d); + else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength); + + while(!error) /*decode all symbols until end reached, breaks at end code*/ + { + /*code_ll is literal, length or end code*/ + unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength); + if(code_ll <= 255) /*literal symbol*/ + { + /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/ + if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/); + out->data[*pos] = (unsigned char)code_ll; + ++(*pos); + } + else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ + { + unsigned code_d, distance; + unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ + size_t start, forward, backward, length; + + /*part 1: get length base*/ + length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; + + /*part 2: get extra bits and add the value of that to length*/ + numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; + if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + length += readBitsFromStream(bp, in, numextrabits_l); + + /*part 3: get distance code*/ + code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength); + if(code_d > 29) + { + if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inlength * 8 ? 10 : 11; + } + else error = 18; /*error: invalid distance code (30-31 are never used)*/ + break; + } + distance = DISTANCEBASE[code_d]; + + /*part 4: get extra bits from distance*/ + numextrabits_d = DISTANCEEXTRA[code_d]; + if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + distance += readBitsFromStream(bp, in, numextrabits_d); + + /*part 5: fill in all the out[n] values based on the length and dist*/ + start = (*pos); + if(distance > start) ERROR_BREAK(52); /*too long backward distance*/ + backward = start - distance; + + if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/); + if (distance < length) { + for(forward = 0; forward < length; ++forward) + { + out->data[(*pos)++] = out->data[backward++]; + } + } else { + memcpy(out->data + *pos, out->data + backward, length); + *pos += length; + } + } + else if(code_ll == 256) + { + break; /*end code, break the loop*/ + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = ((*bp) > inlength * 8) ? 10 : 11; + break; + } + } + + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) +{ + size_t p; + unsigned LEN, NLEN, n, error = 0; + + /*go to first boundary of byte*/ + while(((*bp) & 0x7) != 0) ++(*bp); + p = (*bp) / 8; /*byte position*/ + + /*read LEN (2 bytes) and NLEN (2 bytes)*/ + if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/ + LEN = in[p] + 256u * in[p + 1]; p += 2; + NLEN = in[p] + 256u * in[p + 1]; p += 2; + + /*check if 16-bit NLEN is really the one's complement of LEN*/ + if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/ + + if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/ + + /*read the literal data: LEN bytes are now stored in the out buffer*/ + if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/ + for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++]; + + (*bp) = p * 8; + + return error; +} + +static unsigned lodepng_inflatev(ucvector* out, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/ + size_t bp = 0; + unsigned BFINAL = 0; + size_t pos = 0; /*byte position in the out buffer*/ + unsigned error = 0; + + (void)settings; + + while(!BFINAL) + { + unsigned BTYPE; + if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/ + BFINAL = readBitFromStream(&bp, in); + BTYPE = 1u * readBitFromStream(&bp, in); + BTYPE += 2u * readBitFromStream(&bp, in); + + if(BTYPE == 3) return 20; /*error: invalid BTYPE*/ + else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/ + else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/ + + if(error) return error; + } + + return error; +} + +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_inflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + if(settings->custom_inflate) + { + return settings->custom_inflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_inflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflator (Compressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; + +/*bitlen is the size in bits of the code*/ +static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) +{ + addBitsToStreamReversed(bp, compressed, code, bitlen); +} + +/*search the index in the array, that has the largest value smaller than or equal to the given value, +given array must be sorted (if no value is smaller, it returns the size of the given array)*/ +static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) +{ + /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/ + size_t left = 1; + size_t right = array_size - 1; + + while(left <= right) { + size_t mid = (left + right) >> 1; + if (array[mid] >= value) right = mid - 1; + else left = mid + 1; + } + if(left >= array_size || array[left] > value) left--; + return left; +} + +static void addLengthDistance(uivector* values, size_t length, size_t distance) +{ + /*values in encoded vector are those used by deflate: + 0-255: literal bytes + 256: end + 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) + 286-287: invalid*/ + + unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); + unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); + unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); + unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); + + uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX); + uivector_push_back(values, extra_length); + uivector_push_back(values, dist_code); + uivector_push_back(values, extra_distance); +} + +/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3 +bytes as input because 3 is the minimum match length for deflate*/ +static const unsigned HASH_NUM_VALUES = 65536; +static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/ + +typedef struct Hash +{ + int* head; /*hash value to head circular pos - can be outdated if went around window*/ + /*circular pos to prev circular pos*/ + unsigned short* chain; + int* val; /*circular pos to hash value*/ + + /*TODO: do this not only for zeros but for any repeated byte. However for PNG + it's always going to be the zeros that dominate, so not important for PNG*/ + int* headz; /*similar to head, but for chainz*/ + unsigned short* chainz; /*those with same amount of zeros*/ + unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/ +} Hash; + +static unsigned hash_init(Hash* hash, unsigned windowsize) +{ + unsigned i; + hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); + hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); + hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1)); + hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + if(!hash->head || !hash->chain || !hash->val || !hash->headz|| !hash->chainz || !hash->zeros) + { + return 83; /*alloc fail*/ + } + + /*initialize hash table*/ + for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1; + for(i = 0; i != windowsize; ++i) hash->val[i] = -1; + for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/ + + for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1; + for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/ + + return 0; +} + +static void hash_cleanup(Hash* hash) +{ + lodepng_free(hash->head); + lodepng_free(hash->val); + lodepng_free(hash->chain); + + lodepng_free(hash->zeros); + lodepng_free(hash->headz); + lodepng_free(hash->chainz); +} + + + +static unsigned getHash(const unsigned char* data, size_t size, size_t pos) +{ + unsigned result = 0; + if(pos + 2 < size) + { + /*A simple shift and xor hash is used. Since the data of PNGs is dominated + by zeroes due to the filters, a better hash does not have a significant + effect on speed in traversing the chain, and causes more time spend on + calculating the hash.*/ + result ^= (unsigned)(data[pos + 0] << 0u); + result ^= (unsigned)(data[pos + 1] << 4u); + result ^= (unsigned)(data[pos + 2] << 8u); + } else { + size_t amount, i; + if(pos >= size) return 0; + amount = size - pos; + for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u)); + } + return result & HASH_BIT_MASK; +} + +static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) +{ + const unsigned char* start = data + pos; + const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH; + if(end > data + size) end = data + size; + data = start; + while(data != end && *data == 0) ++data; + /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/ + return (unsigned)(data - start); +} + +/*wpos = pos & (windowsize - 1)*/ +static void updateHashChain(Hash* hash, int wpos, unsigned hashval, unsigned short numzeros) +{ + hash->val[wpos] = (int)hashval; + if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval]; + hash->head[hashval] = wpos; + + hash->zeros[wpos] = numzeros; + if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros]; + hash->headz[numzeros] = wpos; +} + +/* +LZ77-encode the data. Return value is error code. The input are raw bytes, the output +is in the form of unsigned integers with codes representing for example literal bytes, or +length/distance pairs. +It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a +sliding window (of windowsize) is used, and all past bytes in that window can be used as +the "dictionary". A brute force search through all possible distances would be slow, and +this hash technique is one out of several ways to speed this up. +*/ +static unsigned encodeLZ77(uivector* out, Hash* hash, + const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize, + unsigned minmatch, unsigned nicematch, unsigned lazymatching) +{ + size_t pos; + unsigned i, error = 0; + /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/ + unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8; + unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64; + + unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/ + unsigned numzeros = 0; + + unsigned offset; /*the offset represents the distance in LZ77 terminology*/ + unsigned length; + unsigned lazy = 0; + unsigned lazylength = 0, lazyoffset = 0; + unsigned hashval; + unsigned current_offset, current_length; + unsigned prev_offset; + const unsigned char *lastptr, *foreptr, *backptr; + unsigned hashpos; + + if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/ + if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/ + + if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH; + + for(pos = inpos; pos < insize; ++pos) + { + unsigned int wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/ + unsigned chainlength = 0; + + hashval = getHash(in, insize, pos); + + if(usezeros && hashval == 0) + { + if(numzeros == 0) numzeros = countZeros(in, insize, pos); + else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } + else + { + numzeros = 0; + } + + updateHashChain(hash, wpos, hashval, numzeros); + + /*the length and offset found for the current position*/ + length = 0; + offset = 0; + + hashpos = hash->chain[wpos]; + + lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; + + /*search for the longest string*/ + prev_offset = 0; + for(;;) + { + if(chainlength++ >= maxchainlength) break; + current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize; + + if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/ + prev_offset = current_offset; + if(current_offset > 0) + { + /*test the next characters*/ + foreptr = &in[pos]; + backptr = &in[pos - current_offset]; + + /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/ + if(numzeros >= 3) + { + unsigned skip = hash->zeros[hashpos]; + if(skip > numzeros) skip = numzeros; + backptr += skip; + foreptr += skip; + } + + while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ + { + ++backptr; + ++foreptr; + } + current_length = (unsigned)(foreptr - &in[pos]); + + if(current_length > length) + { + length = current_length; /*the longest length*/ + offset = current_offset; /*the offset that is related to this longest length*/ + /*jump out once a length of max length is found (speed gain). This also jumps + out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/ + if(current_length >= nicematch) break; + } + } + + if(hashpos == hash->chain[hashpos]) break; + + if(numzeros >= 3 && length > numzeros) + { + hashpos = hash->chainz[hashpos]; + if(hash->zeros[hashpos] != numzeros) break; + } + else + { + hashpos = hash->chain[hashpos]; + /*outdated hash value, happens if particular value was not encountered in whole last window*/ + if(hash->val[hashpos] != (int)hashval) break; + } + } + + if(lazymatching) + { + if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) + { + lazy = 1; + lazylength = length; + lazyoffset = offset; + continue; /*try the next byte*/ + } + if(lazy) + { + lazy = 0; + if(pos == 0) ERROR_BREAK(81); + if(length > lazylength + 1) + { + /*push the previous character as literal*/ + if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + length = lazylength; + offset = lazyoffset; + hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/ + hash->headz[numzeros] = -1; /*idem*/ + --pos; + } + } + } + if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/); + + /*encode it as length/distance pair or literal value*/ + if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ + { + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else if(length < minmatch || (length == 3 && offset > 4096)) + { + /*compensate for the fact that longer offsets have more extra bits, a + length of only 3 may be not worth it then*/ + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + addLengthDistance(out, length, offset); + for(i = 1; i < length; ++i) + { + ++pos; + wpos = pos & (windowsize - 1); + hashval = getHash(in, insize, pos); + if(usezeros && hashval == 0) + { + if(numzeros == 0) numzeros = countZeros(in, insize, pos); + else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } + else + { + numzeros = 0; + } + updateHashChain(hash, wpos, hashval, numzeros); + } + } + } /*end of the loop through each character of input*/ + + return error; +} + +/* /////////////////////////////////////////////////////////////////////////// */ + +static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) +{ + /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, + 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ + + size_t i, j, numdeflateblocks = (datasize + 65534) / 65535; + unsigned datapos = 0; + for(i = 0; i != numdeflateblocks; ++i) + { + unsigned BFINAL, BTYPE, LEN, NLEN; + unsigned char firstbyte; + + BFINAL = (i == numdeflateblocks - 1); + BTYPE = 0; + + firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1)); + ucvector_push_back(out, firstbyte); + + LEN = 65535; + if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos; + NLEN = 65535 - LEN; + + ucvector_push_back(out, (unsigned char)(LEN & 255)); + ucvector_push_back(out, (unsigned char)(LEN >> 8)); + ucvector_push_back(out, (unsigned char)(NLEN & 255)); + ucvector_push_back(out, (unsigned char)(NLEN >> 8)); + + /*Decompressed data*/ + for(j = 0; j < 65535 && datapos < datasize; ++j) + { + ucvector_push_back(out, data[datapos++]); + } + } + + return 0; +} + +/* +write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. +tree_ll: the tree for lit and len codes. +tree_d: the tree for distance codes. +*/ +static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, + const HuffmanTree* tree_ll, const HuffmanTree* tree_d) +{ + size_t i = 0; + for(i = 0; i != lz77_encoded->size; ++i) + { + unsigned val = lz77_encoded->data[i]; + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val)); + if(val > 256) /*for a length code, 3 more things have to be added*/ + { + unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; + unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; + unsigned length_extra_bits = lz77_encoded->data[++i]; + + unsigned distance_code = lz77_encoded->data[++i]; + + unsigned distance_index = distance_code; + unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; + unsigned distance_extra_bits = lz77_encoded->data[++i]; + + addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits); + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code), + HuffmanTree_getLength(tree_d, distance_code)); + addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits); + } + } +} + +/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ +static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) +{ + unsigned error = 0; + + /* + A block is compressed as follows: The PNG data is lz77 encoded, resulting in + literal bytes and length/distance pairs. This is then huffman compressed with + two huffman trees. One huffman tree is used for the lit and len values ("ll"), + another huffman tree is used for the dist values ("d"). These two trees are + stored using their code lengths, and to compress even more these code lengths + are also run-length encoded and huffman compressed. This gives a huffman tree + of code lengths "cl". The code lenghts used to describe this third tree are + the code length code lengths ("clcl"). + */ + + /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ + uivector lz77_encoded; + HuffmanTree tree_ll; /*tree for lit,len values*/ + HuffmanTree tree_d; /*tree for distance codes*/ + HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ + uivector frequencies_ll; /*frequency of lit,len codes*/ + uivector frequencies_d; /*frequency of dist codes*/ + uivector frequencies_cl; /*frequency of code length codes*/ + uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ + uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ + /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl + (these are written as is in the file, it would be crazy to compress these using yet another huffman + tree that needs to be represented by yet another set of code lengths)*/ + uivector bitlen_cl; + size_t datasize = dataend - datapos; + + /* + Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies: + bitlen_lld is to tree_cl what data is to tree_ll and tree_d. + bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. + bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. + */ + + unsigned BFINAL = final; + size_t numcodes_ll, numcodes_d, i; + unsigned HLIT, HDIST, HCLEN; + + uivector_init(&lz77_encoded); + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + HuffmanTree_init(&tree_cl); + uivector_init(&frequencies_ll); + uivector_init(&frequencies_d); + uivector_init(&frequencies_cl); + uivector_init(&bitlen_lld); + uivector_init(&bitlen_lld_e); + uivector_init(&bitlen_cl); + + /*This while loop never loops due to a break at the end, it is here to + allow breaking out of it to the cleanup phase on error conditions.*/ + while(!error) + { + if(settings->use_lz77) + { + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(error) break; + } + else + { + if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/); + for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/ + } + + if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/); + if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/); + + /*Count the frequencies of lit, len and dist codes*/ + for(i = 0; i != lz77_encoded.size; ++i) + { + unsigned symbol = lz77_encoded.data[i]; + ++frequencies_ll.data[symbol]; + if(symbol > 256) + { + unsigned dist = lz77_encoded.data[i + 2]; + ++frequencies_d.data[dist]; + i += 3; + } + } + frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ + + /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ + error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15); + if(error) break; + /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/ + error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15); + if(error) break; + + numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286; + numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30; + /*store the code lengths of both generated trees in bitlen_lld*/ + for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i)); + for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i)); + + /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), + 17 (3-10 zeroes), 18 (11-138 zeroes)*/ + for(i = 0; i != (unsigned)bitlen_lld.size; ++i) + { + unsigned j = 0; /*amount of repititions*/ + while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j; + + if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ + { + ++j; /*include the first zero*/ + if(j <= 10) /*repeat code 17 supports max 10 zeroes*/ + { + uivector_push_back(&bitlen_lld_e, 17); + uivector_push_back(&bitlen_lld_e, j - 3); + } + else /*repeat code 18 supports max 138 zeroes*/ + { + if(j > 138) j = 138; + uivector_push_back(&bitlen_lld_e, 18); + uivector_push_back(&bitlen_lld_e, j - 11); + } + i += (j - 1); + } + else if(j >= 3) /*repeat code for value other than zero*/ + { + size_t k; + unsigned num = j / 6, rest = j % 6; + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + for(k = 0; k < num; ++k) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, 6 - 3); + } + if(rest >= 3) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, rest - 3); + } + else j -= rest; + i += j; + } + else /*too short to benefit from repeat code*/ + { + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + } + } + + /*generate tree_cl, the huffmantree of huffmantrees*/ + + if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i != bitlen_lld_e.size; ++i) + { + ++frequencies_cl.data[bitlen_lld_e.data[i]]; + /*after a repeat code come the bits that specify the number of repetitions, + those don't need to be in the frequencies_cl calculation*/ + if(bitlen_lld_e.data[i] >= 16) ++i; + } + + error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data, + frequencies_cl.size, frequencies_cl.size, 7); + if(error) break; + + if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i != tree_cl.numcodes; ++i) + { + /*lenghts of code length tree is in the order as specified by deflate*/ + bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); + } + while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) + { + /*remove zeros at the end, but minimum size must be 4*/ + if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/); + } + if(error) break; + + /* + Write everything into the output + + After the BFINAL and BTYPE, the dynamic block consists out of the following: + - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN + - (HCLEN+4)*3 bits code lengths of code length alphabet + - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - HDIST + 1 code lengths of distance alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - compressed data + - 256 (end code) + */ + + /*Write block type*/ + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/ + addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/ + + /*write the HLIT, HDIST and HCLEN values*/ + HLIT = (unsigned)(numcodes_ll - 257); + HDIST = (unsigned)(numcodes_d - 1); + HCLEN = (unsigned)bitlen_cl.size - 4; + /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/ + while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN; + addBitsToStream(bp, out, HLIT, 5); + addBitsToStream(bp, out, HDIST, 5); + addBitsToStream(bp, out, HCLEN, 4); + + /*write the code lenghts of the code length alphabet*/ + for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3); + + /*write the lenghts of the lit/len AND the dist alphabet*/ + for(i = 0; i != bitlen_lld_e.size; ++i) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), + HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i])); + /*extra bits of repeat codes*/ + if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2); + else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3); + else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7); + } + + /*write the compressed data symbols*/ + writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + /*error: the length of the end code 256 must be larger than 0*/ + if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64); + + /*write the end code*/ + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + break; /*end of error-while*/ + } + + /*cleanup*/ + uivector_cleanup(&lz77_encoded); + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + HuffmanTree_cleanup(&tree_cl); + uivector_cleanup(&frequencies_ll); + uivector_cleanup(&frequencies_d); + uivector_cleanup(&frequencies_cl); + uivector_cleanup(&bitlen_lld_e); + uivector_cleanup(&bitlen_lld); + uivector_cleanup(&bitlen_cl); + + return error; +} + +static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, + size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) +{ + HuffmanTree tree_ll; /*tree for literal values and length codes*/ + HuffmanTree tree_d; /*tree for distance codes*/ + + unsigned BFINAL = final; + unsigned error = 0; + size_t i; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + generateFixedLitLenTree(&tree_ll); + generateFixedDistanceTree(&tree_d); + + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 1); /*first bit of BTYPE*/ + addBitToStream(bp, out, 0); /*second bit of BTYPE*/ + + if(settings->use_lz77) /*LZ77 encoded*/ + { + uivector lz77_encoded; + uivector_init(&lz77_encoded); + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + uivector_cleanup(&lz77_encoded); + } + else /*no LZ77, but still will be Huffman compressed*/ + { + for(i = datapos; i < dataend; ++i) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); + } + } + /*add END code*/ + if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + /*cleanup*/ + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error = 0; + size_t i, blocksize, numdeflateblocks; + size_t bp = 0; /*the bit pointer*/ + Hash hash; + + if(settings->btype > 2) return 61; + else if(settings->btype == 0) return deflateNoCompression(out, in, insize); + else if(settings->btype == 1) blocksize = insize; + else /*if(settings->btype == 2)*/ + { + /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/ + blocksize = insize / 8 + 8; + if(blocksize < 65536) blocksize = 65536; + if(blocksize > 262144) blocksize = 262144; + } + + numdeflateblocks = (insize + blocksize - 1) / blocksize; + if(numdeflateblocks == 0) numdeflateblocks = 1; + + error = hash_init(&hash, settings->windowsize); + if(error) return error; + + for(i = 0; i != numdeflateblocks && !error; ++i) + { + unsigned final = (i == numdeflateblocks - 1); + size_t start = i * blocksize; + size_t end = start + blocksize; + if(end > insize) end = insize; + + if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final); + else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final); + } + + hash_cleanup(&hash); + + return error; +} + +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_deflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + if(settings->custom_deflate) + { + return settings->custom_deflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_deflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Adler32 */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) +{ + unsigned s1 = adler & 0xffff; + unsigned s2 = (adler >> 16) & 0xffff; + + while(len > 0) + { + /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/ + unsigned amount = len > 5550 ? 5550 : len; + len -= amount; + while(amount > 0) + { + s1 += (*data++); + s2 += s1; + --amount; + } + s1 %= 65521; + s2 %= 65521; + } + + return (s2 << 16) | s1; +} + +/*Return the adler32 of the bytes data[0..len-1]*/ +static unsigned adler32(const unsigned char* data, unsigned len) +{ + return update_adler32(1L, data, len); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Zlib / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + unsigned error = 0; + unsigned CM, CINFO, FDICT; + + if(insize < 2) return 53; /*error, size of zlib data too small*/ + /*read information from zlib header*/ + if((in[0] * 256 + in[1]) % 31 != 0) + { + /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ + return 24; + } + + CM = in[0] & 15; + CINFO = (in[0] >> 4) & 15; + /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ + FDICT = (in[1] >> 5) & 1; + /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ + + if(CM != 8 || CINFO > 7) + { + /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ + return 25; + } + if(FDICT != 0) + { + /*error: the specification of PNG says about the zlib stream: + "The additional flags shall not specify a preset dictionary."*/ + return 26; + } + + error = inflate(out, outsize, in + 2, insize - 2, settings); + if(error) return error; + + if(!settings->ignore_adler32) + { + unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]); + unsigned checksum = adler32(*out, (unsigned)(*outsize)); + if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ + } + + return 0; /*no error*/ +} + +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if(settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_decompress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + /*initially, *out must be NULL and outsize 0, if you just give some random *out + that's pointing to a non allocated buffer, this'll crash*/ + ucvector outv; + size_t i; + unsigned error; + unsigned char* deflatedata = 0; + size_t deflatesize = 0; + + /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ + unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ + unsigned FLEVEL = 0; + unsigned FDICT = 0; + unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; + unsigned FCHECK = 31 - CMFFLG % 31; + CMFFLG += FCHECK; + + /*ucvector-controlled version of the output buffer, for dynamic array*/ + ucvector_init_buffer(&outv, *out, *outsize); + + ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8)); + ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255)); + + error = deflate(&deflatedata, &deflatesize, in, insize, settings); + + if(!error) + { + unsigned ADLER32 = adler32(in, (unsigned)insize); + for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]); + lodepng_free(deflatedata); + lodepng_add32bitInt(&outv, ADLER32); + } + + *out = outv.data; + *outsize = outv.size; + + return error; +} + +/* compress using the default or custom zlib function */ +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if(settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_compress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#else /*no LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DECODER +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if(!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if(!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/*this is a good tradeoff between speed and compression ratio*/ +#define DEFAULT_WINDOWSIZE 2048 + +void lodepng_compress_settings_init(LodePNGCompressSettings* settings) +{ + /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ + settings->btype = 2; + settings->use_lz77 = 1; + settings->windowsize = DEFAULT_WINDOWSIZE; + settings->minmatch = 3; + settings->nicematch = 128; + settings->lazymatching = 1; + + settings->custom_zlib = 0; + settings->custom_deflate = 0; + settings->custom_context = 0; +} + +const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0}; + + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) +{ + settings->ignore_adler32 = 0; + + settings->custom_zlib = 0; + settings->custom_inflate = 0; + settings->custom_context = 0; +} + +const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0}; + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of Zlib related code. Begin of PNG related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / CRC32 / */ +/* ////////////////////////////////////////////////////////////////////////// */ + + +#ifndef LODEPNG_NO_COMPILE_CRC +/* CRC polynomial: 0xedb88320 */ +static unsigned lodepng_crc32_table[256] = { + 0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, + 249268274u, 2044508324u, 3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, + 498536548u, 1789927666u, 4089016648u, 2227061214u, 450548861u, 1843258603u, 4107580753u, 2211677639u, + 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u, 4195302755u, 2366115317u, + 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u, + 901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, + 651767980u, 1373503546u, 3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, + 671266974u, 1594198024u, 3322730930u, 2970347812u, 795835527u, 1483230225u, 3244367275u, 3060149565u, + 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u, 2680153253u, 3904427059u, + 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u, + 1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, + 1706088902u, 314042704u, 2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, + 1303535960u, 984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u, + 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u, 2852801631u, 3708648649u, + 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u, + 1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, + 3988292384u, 2596254646u, 62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, + 3814918930u, 2489596804u, 225274430u, 2053790376u, 3826175755u, 2466906013u, 167816743u, 2097651377u, + 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u, 426522225u, 1852507879u, + 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u, + 3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, + 3624741850u, 2936675148u, 906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, + 3412177804u, 3160834842u, 628085408u, 1382605366u, 3423369109u, 3138078467u, 570562233u, 1426400815u, + 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u, 752459403u, 1541320221u, + 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u, + 2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, + 2262029012u, 4057260610u, 1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, + 2282248934u, 4279200368u, 1711684554u, 285281116u, 2405801727u, 4167216745u, 1634467795u, 376229701u, + 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u, + 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u, + 3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, + 3009837614u, 3294710456u, 1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u +}; + +/*Return the CRC of the bytes buf[0..len-1].*/ +unsigned lodepng_crc32(const unsigned char* data, size_t length) +{ + unsigned r = 0xffffffffu; + size_t i; + for(i = 0; i < length; ++i) + { + r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8); + } + return r ^ 0xffffffffu; +} +#else /* !LODEPNG_NO_COMPILE_CRC */ +unsigned lodepng_crc32(const unsigned char* data, size_t length); +#endif /* !LODEPNG_NO_COMPILE_CRC */ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Reading and writing single bits and bytes from/to stream for LodePNG / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); + ++(*bitpointer); + return result; +} + +static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0; + size_t i; + for(i = nbits - 1; i < nbits; --i) + { + result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i; + } + return result; +} + +#ifdef LODEPNG_COMPILE_DECODER +static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream must be 0 for this to work*/ + if(bit) + { + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ + bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); + } + ++(*bitpointer); +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream may be 0 or 1 for this to work*/ + if(bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7)))); + else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7))); + ++(*bitpointer); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG chunks / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_chunk_length(const unsigned char* chunk) +{ + return lodepng_read32bitInt(&chunk[0]); +} + +void lodepng_chunk_type(char type[5], const unsigned char* chunk) +{ + unsigned i; + for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i]; + type[4] = 0; /*null termination char*/ +} + +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) +{ + if(strlen(type) != 4) return 0; + return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); +} + +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) +{ + return((chunk[4] & 32) != 0); +} + +unsigned char lodepng_chunk_private(const unsigned char* chunk) +{ + return((chunk[6] & 32) != 0); +} + +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) +{ + return((chunk[7] & 32) != 0); +} + +unsigned char* lodepng_chunk_data(unsigned char* chunk) +{ + return &chunk[8]; +} + +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) +{ + return &chunk[8]; +} + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]); + /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ + unsigned checksum = lodepng_crc32(&chunk[4], length + 4); + if(CRC != checksum) return 1; + else return 0; +} + +void lodepng_chunk_generate_crc(unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_crc32(&chunk[4], length + 4); + lodepng_set32bitInt(chunk + 8 + length, CRC); +} + +unsigned char* lodepng_chunk_next(unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk) +{ + unsigned i; + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + unsigned char *chunk_start, *new_buffer; + size_t new_length = (*outlength) + total_chunk_length; + if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/ + + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if(!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk_start = &(*out)[new_length - total_chunk_length]; + + for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i]; + + return 0; +} + +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data) +{ + unsigned i; + unsigned char *chunk, *new_buffer; + size_t new_length = (*outlength) + length + 12; + if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/ + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if(!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk = &(*out)[(*outlength) - length - 12]; + + /*1: length*/ + lodepng_set32bitInt(chunk, (unsigned)length); + + /*2: chunk name (4 letters)*/ + chunk[4] = (unsigned char)type[0]; + chunk[5] = (unsigned char)type[1]; + chunk[6] = (unsigned char)type[2]; + chunk[7] = (unsigned char)type[3]; + + /*3: the data*/ + for(i = 0; i != length; ++i) chunk[8 + i] = data[i]; + + /*4: CRC (of the chunkname characters and the data)*/ + lodepng_chunk_generate_crc(chunk); + + return 0; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Color types and such / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*return type is a LodePNG error code*/ +static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/ +{ + switch(colortype) + { + case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/ + case 2: if(!( bd == 8 || bd == 16)) return 37; break; /*RGB*/ + case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 )) return 37; break; /*palette*/ + case 4: if(!( bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/ + case 6: if(!( bd == 8 || bd == 16)) return 37; break; /*RGBA*/ + default: return 31; + } + return 0; /*allowed color type / bits combination*/ +} + +static unsigned getNumColorChannels(LodePNGColorType colortype) +{ + switch(colortype) + { + case 0: return 1; /*grey*/ + case 2: return 3; /*RGB*/ + case 3: return 1; /*palette*/ + case 4: return 2; /*grey + alpha*/ + case 6: return 4; /*RGBA*/ + } + return 0; /*unexisting color type*/ +} + +static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) +{ + /*bits per pixel is amount of channels * bits per channel*/ + return getNumColorChannels(colortype) * bitdepth; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +void lodepng_color_mode_init(LodePNGColorMode* info) +{ + info->key_defined = 0; + info->key_r = info->key_g = info->key_b = 0; + info->colortype = LCT_RGBA; + info->bitdepth = 8; + info->palette = 0; + info->palettesize = 0; +} + +void lodepng_color_mode_cleanup(LodePNGColorMode* info) +{ + lodepng_palette_clear(info); +} + +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) +{ + size_t i; + lodepng_color_mode_cleanup(dest); + *dest = *source; + if(source->palette) + { + dest->palette = (unsigned char*)lodepng_malloc(1024); + if(!dest->palette && source->palettesize) return 83; /*alloc fail*/ + for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i]; + } + return 0; +} + +static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) +{ + size_t i; + if(a->colortype != b->colortype) return 0; + if(a->bitdepth != b->bitdepth) return 0; + if(a->key_defined != b->key_defined) return 0; + if(a->key_defined) + { + if(a->key_r != b->key_r) return 0; + if(a->key_g != b->key_g) return 0; + if(a->key_b != b->key_b) return 0; + } + /*if one of the palette sizes is 0, then we consider it to be the same as the + other: it means that e.g. the palette was not given by the user and should be + considered the same as the palette inside the PNG.*/ + if(1/*a->palettesize != 0 && b->palettesize != 0*/) { + if(a->palettesize != b->palettesize) return 0; + for(i = 0; i != a->palettesize * 4; ++i) + { + if(a->palette[i] != b->palette[i]) return 0; + } + } + return 1; +} + +void lodepng_palette_clear(LodePNGColorMode* info) +{ + if(info->palette) lodepng_free(info->palette); + info->palette = 0; + info->palettesize = 0; +} + +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + unsigned char* data; + /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with + the max of 256 colors, it'll have the exact alloc size*/ + if(!info->palette) /*allocate palette if empty*/ + { + /*room for 256 colors with 4 bytes each*/ + data = (unsigned char*)lodepng_realloc(info->palette, 1024); + if(!data) return 83; /*alloc fail*/ + else info->palette = data; + } + info->palette[4 * info->palettesize + 0] = r; + info->palette[4 * info->palettesize + 1] = g; + info->palette[4 * info->palettesize + 2] = b; + info->palette[4 * info->palettesize + 3] = a; + ++info->palettesize; + return 0; +} + +unsigned lodepng_get_bpp(const LodePNGColorMode* info) +{ + /*calculate bits per pixel out of colortype and bitdepth*/ + return lodepng_get_bpp_lct(info->colortype, info->bitdepth); +} + +unsigned lodepng_get_channels(const LodePNGColorMode* info) +{ + return getNumColorChannels(info->colortype); +} + +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; +} + +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) +{ + return (info->colortype & 4) != 0; /*4 or 6*/ +} + +unsigned lodepng_is_palette_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_PALETTE; +} + +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) +{ + size_t i; + for(i = 0; i != info->palettesize; ++i) + { + if(info->palette[i * 4 + 3] < 255) return 1; + } + return 0; +} + +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) +{ + return info->key_defined + || lodepng_is_alpha_type(info) + || lodepng_has_palette_alpha(info); +} + +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp(color); + size_t n = w * h; + return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; +} + +size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth); + size_t n = w * h; + return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; +} + + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_DECODER +/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/ +static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp(color); + size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8; + return h * line; +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static void LodePNGUnknownChunks_init(LodePNGInfo* info) +{ + unsigned i; + for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0; + for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0; +} + +static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) +{ + unsigned i; + for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]); +} + +static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) +{ + unsigned i; + + LodePNGUnknownChunks_cleanup(dest); + + for(i = 0; i != 3; ++i) + { + size_t j; + dest->unknown_chunks_size[i] = src->unknown_chunks_size[i]; + dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]); + if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/ + for(j = 0; j < src->unknown_chunks_size[i]; ++j) + { + dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j]; + } + } + + return 0; +} + +/******************************************************************************/ + +static void LodePNGText_init(LodePNGInfo* info) +{ + info->text_num = 0; + info->text_keys = NULL; + info->text_strings = NULL; +} + +static void LodePNGText_cleanup(LodePNGInfo* info) +{ + size_t i; + for(i = 0; i != info->text_num; ++i) + { + string_cleanup(&info->text_keys[i]); + string_cleanup(&info->text_strings[i]); + } + lodepng_free(info->text_keys); + lodepng_free(info->text_strings); +} + +static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->text_keys = 0; + dest->text_strings = 0; + dest->text_num = 0; + for(i = 0; i != source->text_num; ++i) + { + CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i])); + } + return 0; +} + +void lodepng_clear_text(LodePNGInfo* info) +{ + LodePNGText_cleanup(info); +} + +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1))); + if(!new_keys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + ++info->text_num; + info->text_keys = new_keys; + info->text_strings = new_strings; + + string_init(&info->text_keys[info->text_num - 1]); + string_set(&info->text_keys[info->text_num - 1], key); + + string_init(&info->text_strings[info->text_num - 1]); + string_set(&info->text_strings[info->text_num - 1], str); + + return 0; +} + +/******************************************************************************/ + +static void LodePNGIText_init(LodePNGInfo* info) +{ + info->itext_num = 0; + info->itext_keys = NULL; + info->itext_langtags = NULL; + info->itext_transkeys = NULL; + info->itext_strings = NULL; +} + +static void LodePNGIText_cleanup(LodePNGInfo* info) +{ + size_t i; + for(i = 0; i != info->itext_num; ++i) + { + string_cleanup(&info->itext_keys[i]); + string_cleanup(&info->itext_langtags[i]); + string_cleanup(&info->itext_transkeys[i]); + string_cleanup(&info->itext_strings[i]); + } + lodepng_free(info->itext_keys); + lodepng_free(info->itext_langtags); + lodepng_free(info->itext_transkeys); + lodepng_free(info->itext_strings); +} + +static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->itext_keys = 0; + dest->itext_langtags = 0; + dest->itext_transkeys = 0; + dest->itext_strings = 0; + dest->itext_num = 0; + for(i = 0; i != source->itext_num; ++i) + { + CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i], + source->itext_transkeys[i], source->itext_strings[i])); + } + return 0; +} + +void lodepng_clear_itext(LodePNGInfo* info) +{ + LodePNGIText_cleanup(info); +} + +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1))); + char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1))); + char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1))); + if(!new_keys || !new_langtags || !new_transkeys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_langtags); + lodepng_free(new_transkeys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + ++info->itext_num; + info->itext_keys = new_keys; + info->itext_langtags = new_langtags; + info->itext_transkeys = new_transkeys; + info->itext_strings = new_strings; + + string_init(&info->itext_keys[info->itext_num - 1]); + string_set(&info->itext_keys[info->itext_num - 1], key); + + string_init(&info->itext_langtags[info->itext_num - 1]); + string_set(&info->itext_langtags[info->itext_num - 1], langtag); + + string_init(&info->itext_transkeys[info->itext_num - 1]); + string_set(&info->itext_transkeys[info->itext_num - 1], transkey); + + string_init(&info->itext_strings[info->itext_num - 1]); + string_set(&info->itext_strings[info->itext_num - 1], str); + + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +void lodepng_info_init(LodePNGInfo* info) +{ + lodepng_color_mode_init(&info->color); + info->interlace_method = 0; + info->compression_method = 0; + info->filter_method = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + info->background_defined = 0; + info->background_r = info->background_g = info->background_b = 0; + + LodePNGText_init(info); + LodePNGIText_init(info); + + info->time_defined = 0; + info->phys_defined = 0; + + LodePNGUnknownChunks_init(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +void lodepng_info_cleanup(LodePNGInfo* info) +{ + lodepng_color_mode_cleanup(&info->color); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + LodePNGText_cleanup(info); + LodePNGIText_cleanup(info); + + LodePNGUnknownChunks_cleanup(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + lodepng_info_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->color); + CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color)); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + CERROR_TRY_RETURN(LodePNGText_copy(dest, source)); + CERROR_TRY_RETURN(LodePNGIText_copy(dest, source)); + + LodePNGUnknownChunks_init(dest); + CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source)); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + return 0; +} + +void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) +{ + LodePNGInfo temp = *a; + *a = *b; + *b = temp; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/ +static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) +{ + unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/ + /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/ + unsigned p = index & m; + in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/ + in = in << (bits * (m - p)); + if(p == 0) out[index * bits / 8] = in; + else out[index * bits / 8] |= in; +} + +typedef struct ColorTree ColorTree; + +/* +One node of a color tree +This is the data structure used to count the number of unique colors and to get a palette +index for a color. It's like an octree, but because the alpha channel is used too, each +node has 16 instead of 8 children. +*/ +struct ColorTree +{ + ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/ + int index; /*the payload. Only has a meaningful value if this is in the last level*/ +}; + +static void color_tree_init(ColorTree* tree) +{ + int i; + for(i = 0; i != 16; ++i) tree->children[i] = 0; + tree->index = -1; +} + +static void color_tree_cleanup(ColorTree* tree) +{ + int i; + for(i = 0; i != 16; ++i) + { + if(tree->children[i]) + { + color_tree_cleanup(tree->children[i]); + lodepng_free(tree->children[i]); + } + } +} + +/*returns -1 if color not present, its index otherwise*/ +static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + int bit = 0; + for(bit = 0; bit < 8; ++bit) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) return -1; + else tree = tree->children[i]; + } + return tree ? tree->index : -1; +} + +#ifdef LODEPNG_COMPILE_ENCODER +static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + return color_tree_get(tree, r, g, b, a) >= 0; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*color is not allowed to already exist. +Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/ +static void color_tree_add(ColorTree* tree, + unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index) +{ + int bit; + for(bit = 0; bit < 8; ++bit) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) + { + tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree)); + color_tree_init(tree->children[i]); + } + tree = tree->children[i]; + } + tree->index = (int)index; +} + +/*put a pixel, given its RGBA color, into image of any color type*/ +static unsigned rgba8ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, ColorTree* tree /*for palette*/, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + if(mode->colortype == LCT_GREY) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if(mode->bitdepth == 8) out[i] = grey; + else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey; + else + { + /*take the most significant bits of grey*/ + grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1); + addColorBits(out, i, mode->bitdepth, grey); + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + out[i * 3 + 0] = r; + out[i * 3 + 1] = g; + out[i * 3 + 2] = b; + } + else + { + out[i * 6 + 0] = out[i * 6 + 1] = r; + out[i * 6 + 2] = out[i * 6 + 3] = g; + out[i * 6 + 4] = out[i * 6 + 5] = b; + } + } + else if(mode->colortype == LCT_PALETTE) + { + int index = color_tree_get(tree, r, g, b, a); + if(index < 0) return 82; /*color not in palette*/ + if(mode->bitdepth == 8) out[i] = index; + else addColorBits(out, i, mode->bitdepth, (unsigned)index); + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if(mode->bitdepth == 8) + { + out[i * 2 + 0] = grey; + out[i * 2 + 1] = a; + } + else if(mode->bitdepth == 16) + { + out[i * 4 + 0] = out[i * 4 + 1] = grey; + out[i * 4 + 2] = out[i * 4 + 3] = a; + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + out[i * 4 + 0] = r; + out[i * 4 + 1] = g; + out[i * 4 + 2] = b; + out[i * 4 + 3] = a; + } + else + { + out[i * 8 + 0] = out[i * 8 + 1] = r; + out[i * 8 + 2] = out[i * 8 + 3] = g; + out[i * 8 + 4] = out[i * 8 + 5] = b; + out[i * 8 + 6] = out[i * 8 + 7] = a; + } + } + + return 0; /*no error*/ +} + +/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/ +static void rgba16ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, + unsigned short r, unsigned short g, unsigned short b, unsigned short a) +{ + if(mode->colortype == LCT_GREY) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 2 + 0] = (grey >> 8) & 255; + out[i * 2 + 1] = grey & 255; + } + else if(mode->colortype == LCT_RGB) + { + out[i * 6 + 0] = (r >> 8) & 255; + out[i * 6 + 1] = r & 255; + out[i * 6 + 2] = (g >> 8) & 255; + out[i * 6 + 3] = g & 255; + out[i * 6 + 4] = (b >> 8) & 255; + out[i * 6 + 5] = b & 255; + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 4 + 0] = (grey >> 8) & 255; + out[i * 4 + 1] = grey & 255; + out[i * 4 + 2] = (a >> 8) & 255; + out[i * 4 + 3] = a & 255; + } + else if(mode->colortype == LCT_RGBA) + { + out[i * 8 + 0] = (r >> 8) & 255; + out[i * 8 + 1] = r & 255; + out[i * 8 + 2] = (g >> 8) & 255; + out[i * 8 + 3] = g & 255; + out[i * 8 + 4] = (b >> 8) & 255; + out[i * 8 + 5] = b & 255; + out[i * 8 + 6] = (a >> 8) & 255; + out[i * 8 + 7] = a & 255; + } +} + +/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/ +static void getPixelColorRGBA8(unsigned char* r, unsigned char* g, + unsigned char* b, unsigned char* a, + const unsigned char* in, size_t i, + const LodePNGColorMode* mode) +{ + if(mode->colortype == LCT_GREY) + { + if(mode->bitdepth == 8) + { + *r = *g = *b = in[i]; + if(mode->key_defined && *r == mode->key_r) *a = 0; + else *a = 255; + } + else if(mode->bitdepth == 16) + { + *r = *g = *b = in[i * 2 + 0]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 255; + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = i * mode->bitdepth; + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + *r = *g = *b = (value * 255) / highest; + if(mode->key_defined && value == mode->key_r) *a = 0; + else *a = 255; + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2]; + if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0; + else *a = 255; + } + else + { + *r = in[i * 6 + 0]; + *g = in[i * 6 + 2]; + *b = in[i * 6 + 4]; + if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 255; + } + } + else if(mode->colortype == LCT_PALETTE) + { + unsigned index; + if(mode->bitdepth == 8) index = in[i]; + else + { + size_t j = i * mode->bitdepth; + index = readBitsFromReversedStream(&j, in, mode->bitdepth); + } + + if(index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but common PNG decoders make it black instead. + Done here too, slightly faster due to no error handling needed.*/ + *r = *g = *b = 0; + *a = 255; + } + else + { + *r = mode->palette[index * 4 + 0]; + *g = mode->palette[index * 4 + 1]; + *b = mode->palette[index * 4 + 2]; + *a = mode->palette[index * 4 + 3]; + } + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + if(mode->bitdepth == 8) + { + *r = *g = *b = in[i * 2 + 0]; + *a = in[i * 2 + 1]; + } + else + { + *r = *g = *b = in[i * 4 + 0]; + *a = in[i * 4 + 2]; + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + *r = in[i * 4 + 0]; + *g = in[i * 4 + 1]; + *b = in[i * 4 + 2]; + *a = in[i * 4 + 3]; + } + else + { + *r = in[i * 8 + 0]; + *g = in[i * 8 + 2]; + *b = in[i * 8 + 4]; + *a = in[i * 8 + 6]; + } + } +} + +/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color +mode test cases, optimized to convert the colors much faster, when converting +to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with +enough memory, if has_alpha is true the output is RGBA. mode has the color mode +of the input buffer.*/ +static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels, + unsigned has_alpha, const unsigned char* in, + const LodePNGColorMode* mode) +{ + unsigned num_channels = has_alpha ? 4 : 3; + size_t i; + if(mode->colortype == LCT_GREY) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i]; + if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255; + } + } + else if(mode->bitdepth == 16) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2]; + if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255; + } + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; + if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255; + } + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 3 + 0]; + buffer[1] = in[i * 3 + 1]; + buffer[2] = in[i * 3 + 2]; + if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r + && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255; + } + } + else + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 6 + 0]; + buffer[1] = in[i * 6 + 2]; + buffer[2] = in[i * 6 + 4]; + if(has_alpha) buffer[3] = mode->key_defined + && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255; + } + } + } + else if(mode->colortype == LCT_PALETTE) + { + unsigned index; + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + if(mode->bitdepth == 8) index = in[i]; + else index = readBitsFromReversedStream(&j, in, mode->bitdepth); + + if(index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but most PNG decoders make it black instead. + Done here too, slightly faster due to no error handling needed.*/ + buffer[0] = buffer[1] = buffer[2] = 0; + if(has_alpha) buffer[3] = 255; + } + else + { + buffer[0] = mode->palette[index * 4 + 0]; + buffer[1] = mode->palette[index * 4 + 1]; + buffer[2] = mode->palette[index * 4 + 2]; + if(has_alpha) buffer[3] = mode->palette[index * 4 + 3]; + } + } + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; + if(has_alpha) buffer[3] = in[i * 2 + 1]; + } + } + else + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; + if(has_alpha) buffer[3] = in[i * 4 + 2]; + } + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 4 + 0]; + buffer[1] = in[i * 4 + 1]; + buffer[2] = in[i * 4 + 2]; + if(has_alpha) buffer[3] = in[i * 4 + 3]; + } + } + else + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 8 + 0]; + buffer[1] = in[i * 8 + 2]; + buffer[2] = in[i * 8 + 4]; + if(has_alpha) buffer[3] = in[i * 8 + 6]; + } + } + } +} + +/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with +given color type, but the given color type must be 16-bit itself.*/ +static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a, + const unsigned char* in, size_t i, const LodePNGColorMode* mode) +{ + if(mode->colortype == LCT_GREY) + { + *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 65535; + } + else if(mode->colortype == LCT_RGB) + { + *r = 256u * in[i * 6 + 0] + in[i * 6 + 1]; + *g = 256u * in[i * 6 + 2] + in[i * 6 + 3]; + *b = 256u * in[i * 6 + 4] + in[i * 6 + 5]; + if(mode->key_defined + && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 65535; + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1]; + *a = 256u * in[i * 4 + 2] + in[i * 4 + 3]; + } + else if(mode->colortype == LCT_RGBA) + { + *r = 256u * in[i * 8 + 0] + in[i * 8 + 1]; + *g = 256u * in[i * 8 + 2] + in[i * 8 + 3]; + *b = 256u * in[i * 8 + 4] + in[i * 8 + 5]; + *a = 256u * in[i * 8 + 6] + in[i * 8 + 7]; + } +} + +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h) +{ + unsigned int i; + ColorTree tree; + size_t numpixels = w * h; + + if(lodepng_color_mode_equal(mode_out, mode_in)) + { + size_t numbytes = lodepng_get_raw_size(w, h, mode_in); + for(i = 0; i != numbytes; ++i) out[i] = in[i]; + return 0; + } + + if(mode_out->colortype == LCT_PALETTE) + { + size_t palettesize = mode_out->palettesize; + const unsigned char* palette = mode_out->palette; + size_t palsize = (size_t)1 << mode_out->bitdepth; + /*if the user specified output palette but did not give the values, assume + they want the values of the input color type (assuming that one is palette). + Note that we never create a new palette ourselves.*/ + if(palettesize == 0) + { + palettesize = mode_in->palettesize; + palette = mode_in->palette; + } + if(palettesize < palsize) palsize = palettesize; + color_tree_init(&tree); + for(i = 0; i != palsize; ++i) + { + const unsigned char* p = &palette[i * 4]; + color_tree_add(&tree, p[0], p[1], p[2], p[3], i); + } + } + + if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16) + { + for(i = 0; i != numpixels; ++i) + { + unsigned short r = 0, g = 0, b = 0, a = 0; + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + rgba16ToPixel(out, i, mode_out, r, g, b, a); + } + } + else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) + { + getPixelColorsRGBA8(out, numpixels, 1, in, mode_in); + } + else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) + { + getPixelColorsRGBA8(out, numpixels, 0, in, mode_in); + } + else + { + unsigned char r = 0, g = 0, b = 0, a = 0; + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); + CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a)); + } + } + + if(mode_out->colortype == LCT_PALETTE) + { + color_tree_cleanup(&tree); + } + + return 0; /*no error*/ +} + +#ifdef LODEPNG_COMPILE_ENCODER + +void lodepng_color_profile_init(LodePNGColorProfile* profile) +{ + profile->colored = 0; + profile->key = 0; + profile->alpha = 0; + profile->key_r = profile->key_g = profile->key_b = 0; + profile->numcolors = 0; + profile->bits = 1; +} + +/*function used for debug purposes with C++*/ +/*void printColorProfile(LodePNGColorProfile* p) +{ + std::cout << "colored: " << (int)p->colored << ", "; + std::cout << "key: " << (int)p->key << ", "; + std::cout << "key_r: " << (int)p->key_r << ", "; + std::cout << "key_g: " << (int)p->key_g << ", "; + std::cout << "key_b: " << (int)p->key_b << ", "; + std::cout << "alpha: " << (int)p->alpha << ", "; + std::cout << "numcolors: " << (int)p->numcolors << ", "; + std::cout << "bits: " << (int)p->bits << std::endl; +}*/ + +/*Returns how many bits needed to represent given value (max 8 bit)*/ +static unsigned getValueRequiredBits(unsigned char value) +{ + if(value == 0 || value == 255) return 1; + /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/ + if(value % 17 == 0) return value % 85 == 0 ? 2 : 4; + return 8; +} + +/*profile must already have been inited with mode. +It's ok to set some parameters of profile to done already.*/ +unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, + const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* mode) +{ + unsigned error = 0; + size_t i; + ColorTree tree; + size_t numpixels = w * h; + + unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0; + unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1; + unsigned numcolors_done = 0; + unsigned bpp = lodepng_get_bpp(mode); + unsigned bits_done = bpp == 1 ? 1 : 0; + unsigned maxnumcolors = 257; + unsigned sixteen = 0; + if(bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256)); + + color_tree_init(&tree); + + /*Check if the 16-bit input is truly 16-bit*/ + if(mode->bitdepth == 16) + { + unsigned short r, g, b, a; + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) || + (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/ + { + sixteen = 1; + break; + } + } + } + + if(sixteen) + { + unsigned short r = 0, g = 0, b = 0, a = 0; + profile->bits = 16; + bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/ + + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + + if(!colored_done && (r != g || r != b)) + { + profile->colored = 1; + colored_done = 1; + } + + if(!alpha_done) + { + unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); + if(a != 65535 && (a != 0 || (profile->key && !matchkey))) + { + profile->alpha = 1; + alpha_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + else if(a == 0 && !profile->alpha && !profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + else if(a == 65535 && profile->key && matchkey) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + } + } + if(alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if(profile->key && !profile->alpha) + { + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + } + } + } + } + else /* < 16-bit */ + { + unsigned char r = 0, g = 0, b = 0, a = 0; + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); + + if(!bits_done && profile->bits < 8) + { + /*only r is checked, < 8 bits is only relevant for greyscale*/ + unsigned bits = getValueRequiredBits(r); + if(bits > profile->bits) profile->bits = bits; + } + bits_done = (profile->bits >= bpp); + + if(!colored_done && (r != g || r != b)) + { + profile->colored = 1; + colored_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/ + } + + if(!alpha_done) + { + unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); + if(a != 255 && (a != 0 || (profile->key && !matchkey))) + { + profile->alpha = 1; + alpha_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + else if(a == 0 && !profile->alpha && !profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + else if(a == 255 && profile->key && matchkey) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + } + + if(!numcolors_done) + { + if(!color_tree_has(&tree, r, g, b, a)) + { + color_tree_add(&tree, r, g, b, a, profile->numcolors); + if(profile->numcolors < 256) + { + unsigned char* p = profile->palette; + unsigned n = profile->numcolors; + p[n * 4 + 0] = r; + p[n * 4 + 1] = g; + p[n * 4 + 2] = b; + p[n * 4 + 3] = a; + } + ++profile->numcolors; + numcolors_done = profile->numcolors >= maxnumcolors; + } + } + + if(alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if(profile->key && !profile->alpha) + { + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); + if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + } + } + } + + /*make the profile's key always 16-bit for consistency - repeat each byte twice*/ + profile->key_r += (profile->key_r << 8); + profile->key_g += (profile->key_g << 8); + profile->key_b += (profile->key_b << 8); + } + + color_tree_cleanup(&tree); + return error; +} + +/*Automatically chooses color type that gives smallest amount of bits in the +output image, e.g. grey if there are only greyscale pixels, palette if there +are less than 256 colors, ... +Updates values of mode with a potentially smaller color model. mode_out should +contain the user chosen color model, but will be overwritten with the new chosen one.*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in) +{ + LodePNGColorProfile prof; + unsigned error = 0; + unsigned i, n, palettebits, grey_ok, palette_ok; + + lodepng_color_profile_init(&prof); + error = lodepng_get_color_profile(&prof, image, w, h, mode_in); + if(error) return error; + mode_out->key_defined = 0; + + if(prof.key && w * h <= 16) + { + prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/ + if(prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + grey_ok = !prof.colored && !prof.alpha; /*grey without alpha, with potentially low bits*/ + n = prof.numcolors; + palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8)); + palette_ok = n <= 256 && (n * 2 < w * h) && prof.bits <= 8; + if(w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/ + if(grey_ok && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/ + + if(palette_ok) + { + unsigned char* p = prof.palette; + lodepng_palette_clear(mode_out); /*remove potential earlier palette*/ + for(i = 0; i != prof.numcolors; ++i) + { + error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]); + if(error) break; + } + + mode_out->colortype = LCT_PALETTE; + mode_out->bitdepth = palettebits; + + if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize + && mode_in->bitdepth == mode_out->bitdepth) + { + /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/ + lodepng_color_mode_cleanup(mode_out); + lodepng_color_mode_copy(mode_out, mode_in); + } + } + else /*8-bit or 16-bit per channel*/ + { + mode_out->bitdepth = prof.bits; + mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA) + : (prof.colored ? LCT_RGB : LCT_GREY); + + if(prof.key && !prof.alpha) + { + unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/ + mode_out->key_r = prof.key_r & mask; + mode_out->key_g = prof.key_g & mask; + mode_out->key_b = prof.key_b & mask; + mode_out->key_defined = 1; + } + } + + return error; +} + +#endif /* #ifdef LODEPNG_COMPILE_ENCODER */ + +/* +Paeth predicter, used by PNG filter type 4 +The parameters are of type short, but should come from unsigned chars, the shorts +are only needed to make the paeth calculation correct. +*/ +static unsigned char paethPredictor(short a, short b, short c) +{ + short pa = abs(b - c); + short pb = abs(a - c); + short pc = abs(a + b - c - c); + + if(pc < pa && pc < pb) return (unsigned char)c; + else if(pb < pa) return (unsigned char)b; + else return (unsigned char)a; +} + +/*shared values used by multiple Adam7 related functions*/ + +static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ +static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ +static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ +static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ + +/* +Outputs various dimensions and positions in the image related to the Adam7 reduced images. +passw: output containing the width of the 7 passes +passh: output containing the height of the 7 passes +filter_passstart: output containing the index of the start and end of each + reduced image with filter bytes +padded_passstart output containing the index of the start and end of each + reduced image when without filter bytes but with padded scanlines +passstart: output containing the index of the start and end of each reduced + image without padding between scanlines, but still padding between the images +w, h: width and height of non-interlaced image +bpp: bits per pixel +"padded" is only relevant if bpp is less than 8 and a scanline or image does not + end at a full byte +*/ +static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], + size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) +{ + /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ + unsigned i; + + /*calculate width and height in pixels of each pass*/ + for(i = 0; i != 7; ++i) + { + passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; + passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; + if(passw[i] == 0) passh[i] = 0; + if(passh[i] == 0) passw[i] = 0; + } + + filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; + for(i = 0; i != 7; ++i) + { + /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ + filter_passstart[i + 1] = filter_passstart[i] + + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); + /*bits padded if needed to fill full byte at end of each scanline*/ + padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); + /*only padded at end of reduced image*/ + passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; + } +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Decoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*read the information from the header and store it in the LodePNGInfo. return value is error*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state, + const unsigned char* in, size_t insize) +{ + LodePNGInfo* info = &state->info_png; + if(insize == 0 || in == 0) + { + CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/ + } + if(insize < 33) + { + CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/ + } + + /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ + lodepng_info_cleanup(info); + lodepng_info_init(info); + + if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 + || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) + { + CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/ + } + if(lodepng_chunk_length(in + 8) != 13) + { + CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/ + } + if(!lodepng_chunk_type_equals(in + 8, "IHDR")) + { + CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/ + } + + /*read the values given in the header*/ + *w = lodepng_read32bitInt(&in[16]); + *h = lodepng_read32bitInt(&in[20]); + info->color.bitdepth = in[24]; + info->color.colortype = (LodePNGColorType)in[25]; + info->compression_method = in[26]; + info->filter_method = in[27]; + info->interlace_method = in[28]; + + if(*w == 0 || *h == 0) + { + CERROR_RETURN_ERROR(state->error, 93); + } + + if(!state->decoder.ignore_crc) + { + unsigned CRC = lodepng_read32bitInt(&in[29]); + unsigned checksum = lodepng_crc32(&in[12], 17); + if(CRC != checksum) + { + CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/ + } + } + + /*error: only compression method 0 is allowed in the specification*/ + if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); + /*error: only filter method 0 is allowed in the specification*/ + if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); + /*error: only interlace methods 0 and 1 exist in the specification*/ + if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); + + state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); + return state->error; +} + +static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, + size_t bytewidth, unsigned char filterType, size_t length) +{ + /* + For PNG filter method 0 + unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, + the filter works byte per byte (bytewidth = 1) + precon is the previous unfiltered scanline, recon the result, scanline the current one + the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead + recon and scanline MAY be the same memory address! precon must be disjoint. + */ + + size_t i; + switch(filterType) + { + case 0: + for(i = 0; i != length; ++i) recon[i] = scanline[i]; + break; + case 1: + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth]; + break; + case 2: + if(precon) + { + for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i]; + } + else + { + for(i = 0; i != length; ++i) recon[i] = scanline[i]; + } + break; + case 3: + if(precon) + { + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1); + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1); + } + else + { + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1); + } + break; + case 4: + if(precon) + { + for(i = 0; i != bytewidth; ++i) + { + recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ + } + for(i = bytewidth; i < length; ++i) + { + recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); + } + } + else + { + for(i = 0; i != bytewidth; ++i) + { + recon[i] = scanline[i]; + } + for(i = bytewidth; i < length; ++i) + { + /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ + recon[i] = (scanline[i] + recon[i - bytewidth]); + } + } + break; + default: return 36; /*error: unexisting filter type given*/ + } + return 0; +} + +static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + /* + For PNG filter method 0 + this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) + out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline + w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel + in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) + */ + + unsigned y; + unsigned char* prevline = 0; + + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + size_t linebytes = (w * bpp + 7) / 8; + + for(y = 0; y < h; ++y) + { + size_t outindex = linebytes * y; + size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + unsigned char filterType = in[inindex]; + + CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes)); + + prevline = &out[outindex]; + } + + return 0; +} + +/* +in: Adam7 interlaced image, with no padding bits between scanlines, but between + reduced images so that each reduced image starts at a byte. +out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h +bpp: bits per pixel +out has the following size in bits: w * h * bpp. +in is possibly bigger due to padding bits between reduced images. +out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation +(because that's likely a little bit faster) +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; + size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + for(b = 0; b < bytewidth; ++b) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + for(b = 0; b < bpp; ++b) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/ + setBitOfReversedStream0(&obp, out, bit); + } + } + } + } +} + +static void removePaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /* + After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need + to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers + for the Adam7 code, the color convert code and the output to the user. + in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must + have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits + also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 + only useful if (ilinebits - olinebits) is a value in the range 1..7 + */ + unsigned y; + size_t diff = ilinebits - olinebits; + size_t ibp = 0, obp = 0; /*input and output bit pointers*/ + for(y = 0; y < h; ++y) + { + size_t x; + for(x = 0; x < olinebits; ++x) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + ibp += diff; + } +} + +/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from +the IDAT chunks (with filter index bytes and possible padding bits) +return value is error*/ +static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, + unsigned w, unsigned h, const LodePNGInfo* info_png) +{ + /* + This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. + Steps: + *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8) + *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace + NOTE: the in buffer will be overwritten with intermediate data! + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + if(bpp == 0) return 31; /*error: invalid colortype*/ + + if(info_png->interlace_method == 0) + { + if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp)); + removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); + } + /*we can immediately filter into the out buffer, no other steps needed*/ + else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp)); + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + for(i = 0; i != 7; ++i) + { + CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp)); + /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, + move bytes instead of bits or move not at all*/ + if(bpp < 8) + { + /*remove padding bits in scanlines; after this there still may be padding + bits between the different reduced images: each reduced image still starts nicely at a byte*/ + removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, + ((passw[i] * bpp + 7) / 8) * 8, passh[i]); + } + } + + Adam7_deinterlace(out, in, w, h, bpp); + } + + return 0; +} + +static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned pos = 0, i; + if(color->palette) lodepng_free(color->palette); + color->palettesize = chunkLength / 3; + color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize); + if(!color->palette && color->palettesize) + { + color->palettesize = 0; + return 83; /*alloc fail*/ + } + if(color->palettesize > 256) return 38; /*error: palette too big*/ + + for(i = 0; i != color->palettesize; ++i) + { + color->palette[4 * i + 0] = data[pos++]; /*R*/ + color->palette[4 * i + 1] = data[pos++]; /*G*/ + color->palette[4 * i + 2] = data[pos++]; /*B*/ + color->palette[4 * i + 3] = 255; /*alpha*/ + } + + return 0; /* OK */ +} + +static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned i; + if(color->colortype == LCT_PALETTE) + { + /*error: more alpha values given than there are palette entries*/ + if(chunkLength > color->palettesize) return 38; + + for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i]; + } + else if(color->colortype == LCT_GREY) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if(chunkLength != 2) return 30; + + color->key_defined = 1; + color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1]; + } + else if(color->colortype == LCT_RGB) + { + /*error: this chunk must be 6 bytes for RGB image*/ + if(chunkLength != 6) return 41; + + color->key_defined = 1; + color->key_r = 256u * data[0] + data[1]; + color->key_g = 256u * data[2] + data[3]; + color->key_b = 256u * data[4] + data[5]; + } + else return 42; /*error: tRNS chunk not allowed for other color models*/ + + return 0; /* OK */ +} + + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*background color chunk (bKGD)*/ +static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(info->color.colortype == LCT_PALETTE) + { + /*error: this chunk must be 1 byte for indexed color image*/ + if(chunkLength != 1) return 43; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = data[0]; + } + else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if(chunkLength != 2) return 44; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1]; + } + else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + /*error: this chunk must be 6 bytes for greyscale image*/ + if(chunkLength != 6) return 45; + + info->background_defined = 1; + info->background_r = 256u * data[0] + data[1]; + info->background_g = 256u * data[2] + data[3]; + info->background_b = 256u * data[4] + data[5]; + } + + return 0; /* OK */ +} + +/*text chunk (tEXt)*/ +static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, unsigned int chunkLength) +{ + unsigned error = 0; + char *key = 0, *str = 0; + unsigned i; + + while(!error) /*not really a while loop, only used to break on error*/ + { + unsigned length, string2_begin; + + length = 0; + while(length < chunkLength && data[length] != 0) ++length; + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i != length; ++i) key[i] = (char)data[i]; + + string2_begin = length + 1; /*skip keyword null terminator*/ + + length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin; + str = (char*)lodepng_malloc(length + 1); + if(!str) CERROR_BREAK(error, 83); /*alloc fail*/ + + str[length] = 0; + for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i]; + + error = lodepng_add_text(info, key, str); + + break; + } + + lodepng_free(key); + lodepng_free(str); + + return error; +} + +/*compressed text chunk (zTXt)*/ +static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, unsigned int chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, string2_begin; + char *key = 0; + ucvector decoded; + + ucvector_init(&decoded); + + while(!error) /*not really a while loop, only used to break on error*/ + { + for(length = 0; length < chunkLength && data[length] != 0; ++length) ; + if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i != length; ++i) key[i] = (char)data[i]; + + if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + string2_begin = length + 2; + if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + + length = chunkLength - string2_begin; + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[string2_begin]), + length, zlibsettings); + if(error) break; + ucvector_push_back(&decoded, 0); + + error = lodepng_add_text(info, key, (char*)decoded.data); + + break; + } + + lodepng_free(key); + ucvector_cleanup(&decoded); + + return error; +} + +/*international text chunk (iTXt)*/ +static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, unsigned int chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, begin, compressed; + char *key = 0, *langtag = 0, *transkey = 0; + ucvector decoded; + ucvector_init(&decoded); + + while(!error) /*not really a while loop, only used to break on error*/ + { + /*Quick check if the chunk length isn't too small. Even without check + it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ + if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/ + + /*read the key*/ + for(length = 0; length < chunkLength && data[length] != 0; ++length) ; + if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i != length; ++i) key[i] = (char)data[i]; + + /*read the compression method*/ + compressed = data[length + 1]; + if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty for the next 3 texts*/ + + /*read the langtag*/ + begin = length + 3; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + langtag = (char*)lodepng_malloc(length + 1); + if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/ + + langtag[length] = 0; + for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i]; + + /*read the transkey*/ + begin += length + 1; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + transkey = (char*)lodepng_malloc(length + 1); + if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/ + + transkey[length] = 0; + for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i]; + + /*read the actual text*/ + begin += length + 1; + + length = chunkLength < begin ? 0 : chunkLength - begin; + + if(compressed) + { + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[begin]), + length, zlibsettings); + if(error) break; + if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size; + ucvector_push_back(&decoded, 0); + } + else + { + if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/); + + decoded.data[length] = 0; + for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i]; + } + + error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data); + + break; + } + + lodepng_free(key); + lodepng_free(langtag); + lodepng_free(transkey); + ucvector_cleanup(&decoded); + + return error; +} + +static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(chunkLength != 7) return 73; /*invalid tIME chunk size*/ + + info->time_defined = 1; + info->time.year = 256u * data[0] + data[1]; + info->time.month = data[2]; + info->time.day = data[3]; + info->time.hour = data[4]; + info->time.minute = data[5]; + info->time.second = data[6]; + + return 0; /* OK */ +} + +static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/ + + info->phys_defined = 1; + info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; + info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7]; + info->phys_unit = data[8]; + + return 0; /* OK */ +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ +static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + unsigned char IEND = 0; + const unsigned char* chunk; + size_t i; + ucvector idat; /*the data from idat chunks*/ + ucvector scanlines; + size_t predict; + size_t numpixels; + size_t outsize; + + /*for unknown chunk order*/ + unsigned unknown = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + + /*provide some proper output values if error will happen*/ + *out = 0; + + state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/ + if(state->error) return; + + numpixels = *w * *h; + + /*multiplication overflow*/ + if(*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92); + /*multiplication overflow possible further below. Allows up to 2^31-1 pixel + bytes with 16-bit RGBA, the rest is room for filter bytes.*/ + if(numpixels > 268435455) CERROR_RETURN(state->error, 92); + + ucvector_init(&idat); + chunk = &in[33]; /*first byte of the first chunk after the header*/ + + /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. + IDAT data is put at the start of the in buffer*/ + while(!IEND && !state->error) + { + unsigned chunkLength; + const unsigned char* data; /*the data in the chunk*/ + + /*error: size of the in buffer too small to contain next chunk*/ + if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30); + + /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ + chunkLength = lodepng_chunk_length(chunk); + /*error: chunk length larger than the max PNG chunk size*/ + if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63); + + if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) + { + CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/ + } + + data = lodepng_chunk_data_const(chunk); + + /*IDAT chunk, containing compressed image data*/ + if(lodepng_chunk_type_equals(chunk, "IDAT")) + { + size_t oldsize = idat.size; + if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/); + for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i]; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 3; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*IEND chunk*/ + else if(lodepng_chunk_type_equals(chunk, "IEND")) + { + IEND = 1; + } + /*palette chunk (PLTE)*/ + else if(lodepng_chunk_type_equals(chunk, "PLTE")) + { + state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 2; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*palette transparency chunk (tRNS)*/ + else if(lodepng_chunk_type_equals(chunk, "tRNS")) + { + state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength); + if(state->error) break; + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*background color chunk (bKGD)*/ + else if(lodepng_chunk_type_equals(chunk, "bKGD")) + { + state->error = readChunk_bKGD(&state->info_png, data, chunkLength); + if(state->error) break; + } + /*text chunk (tEXt)*/ + else if(lodepng_chunk_type_equals(chunk, "tEXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_tEXt(&state->info_png, data, chunkLength); + if(state->error) break; + } + } + /*compressed text chunk (zTXt)*/ + else if(lodepng_chunk_type_equals(chunk, "zTXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if(state->error) break; + } + } + /*international text chunk (iTXt)*/ + else if(lodepng_chunk_type_equals(chunk, "iTXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if(state->error) break; + } + } + else if(lodepng_chunk_type_equals(chunk, "tIME")) + { + state->error = readChunk_tIME(&state->info_png, data, chunkLength); + if(state->error) break; + } + else if(lodepng_chunk_type_equals(chunk, "pHYs")) + { + state->error = readChunk_pHYs(&state->info_png, data, chunkLength); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + else /*it's not an implemented chunk type, so ignore it: skip over the data*/ + { + /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ + if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69); + + unknown = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if(state->decoder.remember_unknown_chunks) + { + state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1], + &state->info_png.unknown_chunks_size[critical_pos - 1], chunk); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + + if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ + { + if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/ + } + + if(!IEND) chunk = lodepng_chunk_next_const(chunk); + } + + ucvector_init(&scanlines); + /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation. + If the decompressed size does not match the prediction, the image must be corrupt.*/ + if(state->info_png.interlace_method == 0) + { + /*The extra *h is added because this are the filter bytes every scanline starts with*/ + predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h; + } + else + { + /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/ + const LodePNGColorMode* color = &state->info_png.color; + predict = 0; + predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); + if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); + predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3); + if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2); + predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2); + if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1); + predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1); + } + if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/ + if(!state->error) + { + state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data, + idat.size, &state->decoder.zlibsettings); + if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/ + } + ucvector_cleanup(&idat); + + if(!state->error) + { + outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color); + *out = (unsigned char*)lodepng_malloc(outsize); + if(!*out) state->error = 83; /*alloc fail*/ + } + if(!state->error) + { + for(i = 0; i < outsize; i++) (*out)[i] = 0; + state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png); + } + ucvector_cleanup(&scanlines); +} + +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + *out = 0; + decodeGeneric(out, w, h, state, in, insize); + if(state->error) return state->error; + if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) + { + /*same color type, no copying or converting of data needed*/ + /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype + the raw image has to the end user*/ + if(!state->decoder.color_convert) + { + state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color); + if(state->error) return state->error; + } + } + else + { + /*color conversion needed; sort of copy of the data*/ + unsigned char* data = *out; + size_t outsize; + + /*TODO: check if this works according to the statement in the documentation: "The converter can convert + from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/ + if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA) + && !(state->info_raw.bitdepth == 8)) + { + return 56; /*unsupported color mode conversion*/ + } + + outsize = lodepng_get_raw_size(*w, *h, &state->info_raw); + *out = (unsigned char*)lodepng_malloc(outsize); + if(!(*out)) + { + state->error = 83; /*alloc fail*/ + } + else state->error = lodepng_convert(*out, data, &state->info_raw, + &state->info_png.color, *w, *h); + lodepng_free(data); + } + return state->error; +} + +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + error = lodepng_decode(out, w, h, &state, in, insize); + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8); +} + +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer = 0; + size_t buffersize; + unsigned error; + error = lodepng_load_file(&buffer, &buffersize, filename); + if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8); +} + +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) +{ + settings->color_convert = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->read_text_chunks = 1; + settings->remember_unknown_chunks = 0; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + settings->ignore_crc = 0; + lodepng_decompress_settings_init(&settings->zlibsettings); +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) + +void lodepng_state_init(LodePNGState* state) +{ +#ifdef LODEPNG_COMPILE_DECODER + lodepng_decoder_settings_init(&state->decoder); +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + lodepng_encoder_settings_init(&state->encoder); +#endif /*LODEPNG_COMPILE_ENCODER*/ + lodepng_color_mode_init(&state->info_raw); + lodepng_info_init(&state->info_png); + state->error = 1; +} + +void lodepng_state_cleanup(LodePNGState* state) +{ + lodepng_color_mode_cleanup(&state->info_raw); + lodepng_info_cleanup(&state->info_png); +} + +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) +{ + lodepng_state_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->info_raw); + lodepng_info_init(&dest->info_png); + dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return; + dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return; +} + +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Encoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*chunkName must be string of 4 characters*/ +static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) +{ + CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data)); + out->allocsize = out->size; /*fix the allocsize again*/ + return 0; +} + +static void writeSignature(ucvector* out) +{ + /*8 bytes PNG signature, aka the magic bytes*/ + ucvector_push_back(out, 137); + ucvector_push_back(out, 80); + ucvector_push_back(out, 78); + ucvector_push_back(out, 71); + ucvector_push_back(out, 13); + ucvector_push_back(out, 10); + ucvector_push_back(out, 26); + ucvector_push_back(out, 10); +} + +static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) +{ + unsigned error = 0; + ucvector header; + ucvector_init(&header); + + lodepng_add32bitInt(&header, w); /*width*/ + lodepng_add32bitInt(&header, h); /*height*/ + ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/ + ucvector_push_back(&header, (unsigned char)colortype); /*color type*/ + ucvector_push_back(&header, 0); /*compression method*/ + ucvector_push_back(&header, 0); /*filter method*/ + ucvector_push_back(&header, interlace_method); /*interlace method*/ + + error = addChunk(out, "IHDR", header.data, header.size); + ucvector_cleanup(&header); + + return error; +} + +static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector PLTE; + ucvector_init(&PLTE); + for(i = 0; i != info->palettesize * 4; ++i) + { + /*add all channels except alpha channel*/ + if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); + } + error = addChunk(out, "PLTE", PLTE.data, PLTE.size); + ucvector_cleanup(&PLTE); + + return error; +} + +static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector tRNS; + ucvector_init(&tRNS); + if(info->colortype == LCT_PALETTE) + { + size_t amount = info->palettesize; + /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/ + for(i = info->palettesize; i != 0; --i) + { + if(info->palette[4 * (i - 1) + 3] == 255) --amount; + else break; + } + /*add only alpha channel*/ + for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); + } + else if(info->colortype == LCT_GREY) + { + if(info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); + } + } + else if(info->colortype == LCT_RGB) + { + if(info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255)); + } + } + + error = addChunk(out, "tRNS", tRNS.data, tRNS.size); + ucvector_cleanup(&tRNS); + + return error; +} + +static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, + LodePNGCompressSettings* zlibsettings) +{ + ucvector zlibdata; + unsigned error = 0; + + /*compress with the Zlib compressor*/ + ucvector_init(&zlibdata); + error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings); + if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size); + ucvector_cleanup(&zlibdata); + + return error; +} + +static unsigned addChunk_IEND(ucvector* out) +{ + unsigned error = 0; + error = addChunk(out, "IEND", 0, 0); + return error; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) +{ + unsigned error = 0; + size_t i; + ucvector text; + ucvector_init(&text); + for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&text, 0); /*0 termination char*/ + for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]); + error = addChunk(out, "tEXt", text.data, text.size); + ucvector_cleanup(&text); + + return error; +} + +static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, + LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data, compressed; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + ucvector_init(&compressed); + for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*0 termination char*/ + ucvector_push_back(&data, 0); /*compression method: 0*/ + + error = zlib_compress(&compressed.data, &compressed.size, + (unsigned char*)textstring, textsize, zlibsettings); + if(!error) + { + for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]); + error = addChunk(out, "zTXt", data.data, data.size); + } + + ucvector_cleanup(&compressed); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, + const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + + for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*null termination char*/ + ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/ + ucvector_push_back(&data, 0); /*compression method*/ + for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + + if(compressed) + { + ucvector compressed_data; + ucvector_init(&compressed_data); + error = zlib_compress(&compressed_data.data, &compressed_data.size, + (unsigned char*)textstring, textsize, zlibsettings); + if(!error) + { + for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]); + } + ucvector_cleanup(&compressed_data); + } + else /*not compressed*/ + { + for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]); + } + + if(!error) error = addChunk(out, "iTXt", data.data, data.size); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector bKGD; + ucvector_init(&bKGD); + if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); + } + else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255)); + } + else if(info->color.colortype == LCT_PALETTE) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/ + } + + error = addChunk(out, "bKGD", bKGD.data, bKGD.size); + ucvector_cleanup(&bKGD); + + return error; +} + +static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) +{ + unsigned error = 0; + unsigned char* data = (unsigned char*)lodepng_malloc(7); + if(!data) return 83; /*alloc fail*/ + data[0] = (unsigned char)(time->year >> 8); + data[1] = (unsigned char)(time->year & 255); + data[2] = (unsigned char)time->month; + data[3] = (unsigned char)time->day; + data[4] = (unsigned char)time->hour; + data[5] = (unsigned char)time->minute; + data[6] = (unsigned char)time->second; + error = addChunk(out, "tIME", data, 7); + lodepng_free(data); + return error; +} + +static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector data; + ucvector_init(&data); + + lodepng_add32bitInt(&data, info->phys_x); + lodepng_add32bitInt(&data, info->phys_y); + ucvector_push_back(&data, info->phys_unit); + + error = addChunk(out, "pHYs", data.data, data.size); + ucvector_cleanup(&data); + + return error; +} + +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, + size_t length, size_t bytewidth, unsigned char filterType) +{ + size_t i; + switch(filterType) + { + case 0: /*None*/ + for(i = 0; i != length; ++i) out[i] = scanline[i]; + break; + case 1: /*Sub*/ + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth]; + break; + case 2: /*Up*/ + if(prevline) + { + for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i]; + } + else + { + for(i = 0; i != length; ++i) out[i] = scanline[i]; + } + break; + case 3: /*Average*/ + if(prevline) + { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1); + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1); + } + else + { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1); + } + break; + case 4: /*Paeth*/ + if(prevline) + { + /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ + for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]); + for(i = bytewidth; i < length; ++i) + { + out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); + } + } + else + { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ + for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]); + } + break; + default: return; /*unexisting filter type given*/ + } +} + +/* log2 approximation. A slight bit faster than std::log. */ +static float flog2(float f) +{ + float result = 0; + while(f > 32) { result += 4; f /= 16; } + while(f > 2) { ++result; f /= 2; } + return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f); +} + +static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* info, const LodePNGEncoderSettings* settings) +{ + /* + For PNG filter method 0 + out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are + the scanlines with 1 extra byte per scanline + */ + + unsigned bpp = lodepng_get_bpp(info); + /*the width of a scanline in bytes, not including the filter type*/ + size_t linebytes = (w * bpp + 7) / 8; + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + const unsigned char* prevline = 0; + unsigned x, y; + unsigned error = 0; + LodePNGFilterStrategy strategy = settings->filter_strategy; + + /* + There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: + * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. + use fixed filtering, with the filter None). + * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is + not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply + all five filters and select the filter that produces the smallest sum of absolute values per row. + This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true. + + If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, + but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum + heuristic is used. + */ + if(settings->filter_palette_zero && + (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO; + + if(bpp == 0) return 31; /*error: invalid color type*/ + + if(strategy == LFS_ZERO) + { + for(y = 0; y != h; ++y) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + out[outindex] = 0; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0); + prevline = &in[inindex]; + } + } + else if(strategy == LFS_MINSUM) + { + /*adaptive filtering*/ + size_t sum[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned char type, bestType = 0; + + for(type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) return 83; /*alloc fail*/ + } + + if(!error) + { + for(y = 0; y != h; ++y) + { + /*try the 5 filter types*/ + for(type = 0; type != 5; ++type) + { + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + + /*calculate the sum of the result*/ + sum[type] = 0; + if(type == 0) + { + for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]); + } + else + { + for(x = 0; x != linebytes; ++x) + { + /*For differences, each byte should be treated as signed, values above 127 are negative + (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. + This means filtertype 0 is almost never chosen, but that is justified.*/ + unsigned char s = attempt[type][x]; + sum[type] += s < 128 ? s : (255U - s); + } + } + + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + } + + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else if(strategy == LFS_ENTROPY) + { + float sum[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + float smallest = 0; + unsigned type, bestType = 0; + unsigned count[256]; + + for(type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) return 83; /*alloc fail*/ + } + + for(y = 0; y != h; ++y) + { + /*try the 5 filter types*/ + for(type = 0; type != 5; ++type) + { + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + for(x = 0; x != 256; ++x) count[x] = 0; + for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]]; + ++count[type]; /*the filter type itself is part of the scanline*/ + sum[type] = 0; + for(x = 0; x != 256; ++x) + { + float p = count[x] / (float)(linebytes + 1); + sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p; + } + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else if(strategy == LFS_PREDEFINED) + { + for(y = 0; y != h; ++y) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + unsigned char type = settings->predefined_filters[y]; + out[outindex] = type; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); + prevline = &in[inindex]; + } + } + else if(strategy == LFS_BRUTE_FORCE) + { + /*brute force filter chooser. + deflate the scanline after every filter attempt to see which one deflates best. + This is very slow and gives only slightly smaller, sometimes even larger, result*/ + size_t size[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned type = 0, bestType = 0; + unsigned char* dummy; + LodePNGCompressSettings zlibsettings = settings->zlibsettings; + /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, + to simulate the true case where the tree is the same for the whole image. Sometimes it gives + better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare + cases better compression. It does make this a bit less slow, so it's worth doing this.*/ + zlibsettings.btype = 1; + /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG + images only, so disable it*/ + zlibsettings.custom_zlib = 0; + zlibsettings.custom_deflate = 0; + for(type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) return 83; /*alloc fail*/ + } + for(y = 0; y != h; ++y) /*try the 5 filter types*/ + { + for(type = 0; type != 5; ++type) + { + size_t testsize = linebytes; + /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/ + + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + size[type] = 0; + dummy = 0; + zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings); + lodepng_free(dummy); + /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || size[type] < smallest) + { + bestType = type; + smallest = size[type]; + } + } + prevline = &in[y * linebytes]; + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else return 88; /* unknown filter strategy */ + + return error; +} + +static void addPaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /*The opposite of the removePaddingBits function + olinebits must be >= ilinebits*/ + unsigned y; + size_t diff = olinebits - ilinebits; + size_t obp = 0, ibp = 0; /*bit pointers*/ + for(y = 0; y != h; ++y) + { + size_t x; + for(x = 0; x < ilinebits; ++x) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + /*obp += diff; --> no, fill in some value in the padding bits too, to avoid + "Use of uninitialised value of size ###" warning from valgrind*/ + for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0); + } +} + +/* +in: non-interlaced image with size w*h +out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with + no padding bits between scanlines, but between reduced images so that each + reduced image starts at a byte. +bpp: bits per pixel +there are no padding bits, not between scanlines, not between reduced images +in has the following size in bits: w * h * bpp. +out is possibly bigger due to padding bits between reduced images +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; + for(b = 0; b < bytewidth; ++b) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + for(b = 0; b < bpp; ++b) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + } + } + } +} + +/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. +return value is error**/ +static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, + unsigned w, unsigned h, + const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) +{ + /* + This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: + *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter + *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + unsigned error = 0; + + if(info_png->interlace_method == 0) + { + *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out) && (*outsize)) error = 83; /*alloc fail*/ + + if(!error) + { + /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ + if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8)); + if(!padded) error = 83; /*alloc fail*/ + if(!error) + { + addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h); + error = filter(*out, padded, w, h, &info_png->color, settings); + } + lodepng_free(padded); + } + else + { + /*we can immediately filter into the out buffer, no other steps needed*/ + error = filter(*out, in, w, h, &info_png->color, settings); + } + } + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned char* adam7; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out)) error = 83; /*alloc fail*/ + + adam7 = (unsigned char*)lodepng_malloc(passstart[7]); + if(!adam7 && passstart[7]) error = 83; /*alloc fail*/ + + if(!error) + { + unsigned i; + + Adam7_interlace(adam7, in, w, h, bpp); + for(i = 0; i != 7; ++i) + { + if(bpp < 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]); + if(!padded) ERROR_BREAK(83); /*alloc fail*/ + addPaddingBits(padded, &adam7[passstart[i]], + ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]); + error = filter(&(*out)[filter_passstart[i]], padded, + passw[i], passh[i], &info_png->color, settings); + lodepng_free(padded); + } + else + { + error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], + passw[i], passh[i], &info_png->color, settings); + } + + if(error) break; + } + } + + lodepng_free(adam7); + } + + return error; +} + +/* +palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA... +returns 0 if the palette is opaque, +returns 1 if the palette has a single color with alpha 0 ==> color key +returns 2 if the palette is semi-translucent. +*/ +static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize) +{ + size_t i; + unsigned key = 0; + unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/ + for(i = 0; i != palettesize; ++i) + { + if(!key && palette[4 * i + 3] == 0) + { + r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2]; + key = 1; + i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/ + } + else if(palette[4 * i + 3] != 255) return 2; + /*when key, no opaque RGB may have key's RGB*/ + else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2; + } + return key; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) +{ + unsigned char* inchunk = data; + while((size_t)(inchunk - data) < datasize) + { + CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk)); + out->allocsize = out->size; /*fix the allocsize again*/ + inchunk = lodepng_chunk_next(inchunk); + } + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state) +{ + LodePNGInfo info; + ucvector outv; + unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ + size_t datasize = 0; + + /*provide some proper output values if error will happen*/ + *out = 0; + *outsize = 0; + state->error = 0; + + lodepng_info_init(&info); + lodepng_info_copy(&info, &state->info_png); + + if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette) + && (info.color.palettesize == 0 || info.color.palettesize > 256)) + { + state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/ + return state->error; + } + + if(state->encoder.auto_convert) + { + state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw); + } + if(state->error) return state->error; + + if(state->encoder.zlibsettings.btype > 2) + { + CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/ + } + if(state->info_png.interlace_method > 1) + { + CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/ + } + + state->error = checkColorValidity(info.color.colortype, info.color.bitdepth); + if(state->error) return state->error; /*error: unexisting color type given*/ + state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth); + if(state->error) return state->error; /*error: unexisting color type given*/ + + if(!lodepng_color_mode_equal(&state->info_raw, &info.color)) + { + unsigned char* converted; + size_t size = (w * h * lodepng_get_bpp(&info.color) + 7) / 8; + + converted = (unsigned char*)lodepng_malloc(size); + if(!converted && size) state->error = 83; /*alloc fail*/ + if(!state->error) + { + state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h); + } + if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); + lodepng_free(converted); + } + else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); + + ucvector_init(&outv); + while(!state->error) /*while only executed once, to break on error*/ + { +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + size_t i; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*write signature and chunks*/ + writeSignature(&outv); + /*IHDR*/ + addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*unknown chunks between IHDR and PLTE*/ + if(info.unknown_chunks_data[0]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*PLTE*/ + if(info.color.colortype == LCT_PALETTE) + { + addChunk_PLTE(&outv, &info.color); + } + if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) + { + addChunk_PLTE(&outv, &info.color); + } + /*tRNS*/ + if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0) + { + addChunk_tRNS(&outv, &info.color); + } + if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined) + { + addChunk_tRNS(&outv, &info.color); + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*bKGD (must come between PLTE and the IDAt chunks*/ + if(info.background_defined) addChunk_bKGD(&outv, &info); + /*pHYs (must come before the IDAT chunks)*/ + if(info.phys_defined) addChunk_pHYs(&outv, &info); + + /*unknown chunks between PLTE and IDAT*/ + if(info.unknown_chunks_data[1]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*IDAT (multiple IDAT chunks must be consecutive)*/ + state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*tIME*/ + if(info.time_defined) addChunk_tIME(&outv, &info.time); + /*tEXt and/or zTXt*/ + for(i = 0; i != info.text_num; ++i) + { + if(strlen(info.text_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if(strlen(info.text_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + if(state->encoder.text_compression) + { + addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings); + } + else + { + addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); + } + } + /*LodePNG version id in text chunk*/ + if(state->encoder.add_id) + { + unsigned alread_added_id_text = 0; + for(i = 0; i != info.text_num; ++i) + { + if(!strcmp(info.text_keys[i], "LodePNG")) + { + alread_added_id_text = 1; + break; + } + } + if(alread_added_id_text == 0) + { + addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ + } + } + /*iTXt*/ + for(i = 0; i != info.itext_num; ++i) + { + if(strlen(info.itext_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if(strlen(info.itext_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + addChunk_iTXt(&outv, state->encoder.text_compression, + info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], + &state->encoder.zlibsettings); + } + + /*unknown chunks between IDAT and IEND*/ + if(info.unknown_chunks_data[2]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + addChunk_IEND(&outv); + + break; /*this isn't really a while loop; no error happened so break out now!*/ + } + + lodepng_info_cleanup(&info); + lodepng_free(data); + /*instead of cleaning the vector up, give it to the output*/ + *out = outv.data; + *outsize = outv.size; + + return state->error; +} + +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image, + unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + state.info_png.color.colortype = colortype; + state.info_png.color.bitdepth = bitdepth; + lodepng_encode(out, outsize, image, w, h, &state); + error = state.error; + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth); + if(!error) error = lodepng_save_file(buffer, buffersize, filename); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) +{ + lodepng_compress_settings_init(&settings->zlibsettings); + settings->filter_palette_zero = 1; + settings->filter_strategy = LFS_MINSUM; + settings->auto_convert = 1; + settings->force_palette = 0; + settings->predefined_filters = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->add_id = 0; + settings->text_compression = 1; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/* +This returns the description of a numerical error code in English. This is also +the documentation of all the error codes. +*/ +const char* lodepng_error_text(unsigned code) +{ + switch(code) + { + case 0: return "no error, everything went ok"; + case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ + case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ + case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ + case 13: return "problem while processing dynamic deflate block"; + case 14: return "problem while processing dynamic deflate block"; + case 15: return "problem while processing dynamic deflate block"; + case 16: return "unexisting code while processing dynamic deflate block"; + case 17: return "end of out buffer memory reached while inflating"; + case 18: return "invalid distance code while inflating"; + case 19: return "end of out buffer memory reached while inflating"; + case 20: return "invalid deflate block BTYPE encountered while decoding"; + case 21: return "NLEN is not ones complement of LEN in a deflate block"; + /*end of out buffer memory reached while inflating: + This can happen if the inflated deflate data is longer than the amount of bytes required to fill up + all the pixels of the image, given the color depth and image dimensions. Something that doesn't + happen in a normal, well encoded, PNG image.*/ + case 22: return "end of out buffer memory reached while inflating"; + case 23: return "end of in buffer memory reached while inflating"; + case 24: return "invalid FCHECK in zlib header"; + case 25: return "invalid compression method in zlib header"; + case 26: return "FDICT encountered in zlib header while it's not used for PNG"; + case 27: return "PNG file is smaller than a PNG header"; + /*Checks the magic file header, the first 8 bytes of the PNG file*/ + case 28: return "incorrect PNG signature, it's no PNG or corrupted"; + case 29: return "first chunk is not the header chunk"; + case 30: return "chunk length too large, chunk broken off at end of file"; + case 31: return "illegal PNG color type or bpp"; + case 32: return "illegal PNG compression method"; + case 33: return "illegal PNG filter method"; + case 34: return "illegal PNG interlace method"; + case 35: return "chunk length of a chunk is too large or the chunk too small"; + case 36: return "illegal PNG filter type encountered"; + case 37: return "illegal bit depth for this color type given"; + case 38: return "the palette is too big"; /*more than 256 colors*/ + case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette"; + case 40: return "tRNS chunk has wrong size for greyscale image"; + case 41: return "tRNS chunk has wrong size for RGB image"; + case 42: return "tRNS chunk appeared while it was not allowed for this color type"; + case 43: return "bKGD chunk has wrong size for palette image"; + case 44: return "bKGD chunk has wrong size for greyscale image"; + case 45: return "bKGD chunk has wrong size for RGB image"; + case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?"; + case 49: return "jumped past memory while generating dynamic huffman tree"; + case 50: return "jumped past memory while generating dynamic huffman tree"; + case 51: return "jumped past memory while inflating huffman block"; + case 52: return "jumped past memory while inflating"; + case 53: return "size of zlib data too small"; + case 54: return "repeat symbol in tree while there was no value symbol yet"; + /*jumped past tree while generating huffman tree, this could be when the + tree will have more leaves than symbols after generating it out of the + given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ + case 55: return "jumped past tree while generating huffman tree"; + case 56: return "given output image colortype or bitdepth not supported for color conversion"; + case 57: return "invalid CRC encountered (checking CRC can be disabled)"; + case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; + case 59: return "requested color conversion not supported"; + case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; + case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; + /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/ + case 62: return "conversion from color to greyscale not supported"; + case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/ + /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ + case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; + case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; + case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; + case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; + case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; + case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)"; + case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)"; + case 73: return "invalid tIME chunk size"; + case 74: return "invalid pHYs chunk size"; + /*length could be wrong, or data chopped off*/ + case 75: return "no null termination char found while decoding text chunk"; + case 76: return "iTXt chunk too short to contain required bytes"; + case 77: return "integer overflow in buffer size"; + case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ + case 79: return "failed to open file for writing"; + case 80: return "tried creating a tree of 0 symbols"; + case 81: return "lazy matching at pos 0 is impossible"; + case 82: return "color conversion to palette requested while a color isn't in palette"; + case 83: return "memory allocation failed"; + case 84: return "given image too small to contain all pixels to be encoded"; + case 86: return "impossible offset in lz77 encoding (internal bug)"; + case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined"; + case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy"; + case 89: return "text chunk keyword too short or long: must have size 1-79"; + /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/ + case 90: return "windowsize must be a power of two"; + case 91: return "invalid decompressed idat size"; + case 92: return "too many pixels, not supported"; + case 93: return "zero width or height is invalid"; + case 94: return "header chunk must have a size of 13 bytes"; + } + return "unknown error code"; +} +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // C++ Wrapper // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ + +#ifdef LODEPNG_COMPILE_DISK +unsigned load_file(std::vector& buffer, const std::string& filename) +{ + long size = lodepng_filesize(filename.c_str()); + if(size < 0) return 78; + buffer.resize((size_t)size); + return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str()); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned save_file(const std::vector& buffer, const std::string& filename) +{ + return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str()); +} +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings) +{ + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings) +{ + return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings) +{ + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings) +{ + return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ + + +#ifdef LODEPNG_COMPILE_PNG + +State::State() +{ + lodepng_state_init(this); +} + +State::State(const State& other) +{ + lodepng_state_init(this); + lodepng_state_copy(this, &other); +} + +State::~State() +{ + lodepng_state_cleanup(this); +} + +State& State::operator=(const State& other) +{ + lodepng_state_copy(this, &other); + return *this; +} + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth); + if(buffer && !error) + { + State state; + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, LodePNGColorType colortype, unsigned bitdepth) +{ + return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth); +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize) +{ + unsigned char* buffer = NULL; + unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize); + if(buffer && !error) + { + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + } + lodepng_free(buffer); + return error; +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in) +{ + return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size()); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, + LodePNGColorType colortype, unsigned bitdepth) +{ + std::vector buffer; + unsigned error = load_file(buffer, filename); + if(error) return error; + return decode(out, w, h, buffer, colortype, bitdepth); +} +#endif /* LODEPNG_COMPILE_DECODER */ +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} + +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state) +{ + if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, state); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + std::vector buffer; + unsigned error = encode(buffer, in, w, h, colortype, bitdepth); + if(!error) error = save_file(buffer, filename); + return error; +} + +unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_PNG */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ diff --git a/examples/graph/stereo/lodepng.h b/examples/graph/stereo/lodepng.h new file mode 100644 index 0000000..11c8906 --- /dev/null +++ b/examples/graph/stereo/lodepng.h @@ -0,0 +1,1778 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/* +LodePNG version 20160409 + +Copyright (c) 2005-2016 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#ifndef LODEPNG_H +#define LODEPNG_H + +#include /*for size_t*/ + +extern const char* LODEPNG_VERSION_STRING; + +/* +The following #defines are used to create code sections. They can be disabled +to disable code sections, which can give faster compile time and smaller binary. +The "NO_COMPILE" defines are designed to be used to pass as defines to the +compiler command to disable them without modifying this header, e.g. +-DLODEPNG_NO_COMPILE_ZLIB for gcc. +In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to +allow implementing a custom lodepng_crc32. +*/ +/*deflate & zlib. If disabled, you must specify alternative zlib functions in +the custom_zlib field of the compress and decompress settings*/ +#ifndef LODEPNG_NO_COMPILE_ZLIB +#define LODEPNG_COMPILE_ZLIB +#endif +/*png encoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_PNG +#define LODEPNG_COMPILE_PNG +#endif +/*deflate&zlib decoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_DECODER +#define LODEPNG_COMPILE_DECODER +#endif +/*deflate&zlib encoder and png encoder*/ +#ifndef LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_COMPILE_ENCODER +#endif +/*the optional built in harddisk file loading and saving functions*/ +#ifndef LODEPNG_NO_COMPILE_DISK +#define LODEPNG_COMPILE_DISK +#endif +/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/ +#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_COMPILE_ANCILLARY_CHUNKS +#endif +/*ability to convert error numerical codes to English text string*/ +#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_COMPILE_ERROR_TEXT +#endif +/*Compile the default allocators (C's free, malloc and realloc). If you disable this, +you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your +source files with custom allocators.*/ +#ifndef LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_COMPILE_ALLOCATORS +#endif +/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/ +#ifdef __cplusplus +#ifndef LODEPNG_NO_COMPILE_CPP +#define LODEPNG_COMPILE_CPP +#endif +#endif + +#ifdef LODEPNG_COMPILE_CPP +#include +#include +#endif /*LODEPNG_COMPILE_CPP*/ + +#ifdef LODEPNG_COMPILE_PNG +/*The PNG color types (also used for raw).*/ +typedef enum LodePNGColorType +{ + LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/ + LCT_RGB = 2, /*RGB: 8,16 bit*/ + LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/ + LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/ + LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/ +} LodePNGColorType; + +#ifdef LODEPNG_COMPILE_DECODER +/* +Converts PNG data in memory to raw pixel data. +out: Output parameter. Pointer to buffer that will contain the raw pixel data. + After decoding, its size is w * h * (bytes per pixel) bytes larger than + initially. Bytes per pixel depends on colortype and bitdepth. + Must be freed after usage with free(*out). + Note: for 16-bit per channel colors, uses big endian format like PNG does. +w: Output parameter. Pointer to width of pixel data. +h: Output parameter. Pointer to height of pixel data. +in: Memory buffer with the PNG file. +insize: size of the in buffer. +colortype: the desired color type for the raw output image. See explanation on PNG color types. +bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/ +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/ +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +#ifdef LODEPNG_COMPILE_DISK +/* +Load PNG from disk, from file with given name. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/ +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); + +/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/ +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Converts raw pixel data into a PNG image in memory. The colortype and bitdepth + of the output PNG image cannot be chosen, they are automatically determined + by the colortype, bitdepth and content of the input pixel data. + Note: for 16-bit per channel colors, needs big endian format like PNG does. +out: Output parameter. Pointer to buffer that will contain the PNG image data. + Must be freed after usage with free(*out). +outsize: Output parameter. Pointer to the size in bytes of the out buffer. +image: The raw pixel data to encode. The size of this buffer should be + w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth. +w: width of the raw pixel data in pixels. +h: height of the raw pixel data in pixels. +colortype: the color type of the raw input image. See explanation on PNG color types. +bitdepth: the bit depth of the raw input image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DISK +/* +Converts raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned lodepng_encode_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_DECODER +/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype +is the format to output the pixels to. Default is RGBA 8-bit per channel.*/ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts PNG file from disk to raw pixel data in memory. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::string& filename, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype +is that of the raw input data. The output PNG color type will be auto chosen.*/ +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts 32-bit RGBA raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/*Returns an English description of the numerical error code.*/ +const char* lodepng_error_text(unsigned code); +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Settings for zlib decompression*/ +typedef struct LodePNGDecompressSettings LodePNGDecompressSettings; +struct LodePNGDecompressSettings +{ + unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ + + /*use custom zlib decoder instead of built in one (default: null)*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + /*use custom deflate decoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned (*custom_inflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGDecompressSettings lodepng_default_decompress_settings; +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Settings for zlib compression. Tweaking these settings tweaks the balance +between speed and compression ratio. +*/ +typedef struct LodePNGCompressSettings LodePNGCompressSettings; +struct LodePNGCompressSettings /*deflate = compress*/ +{ + /*LZ77 related settings*/ + unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ + unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ + unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/ + unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/ + unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/ + unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/ + + /*use custom zlib encoder instead of built in one (default: null)*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + /*use custom deflate encoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned (*custom_deflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGCompressSettings lodepng_default_compress_settings; +void lodepng_compress_settings_init(LodePNGCompressSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_PNG +/* +Color mode of an image. Contains all information required to decode the pixel +bits to RGBA colors. This information is the same as used in the PNG file +format, and is used both for PNG and raw image data in LodePNG. +*/ +typedef struct LodePNGColorMode +{ + /*header (IHDR)*/ + LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/ + unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/ + + /* + palette (PLTE and tRNS) + + Dynamically allocated with the colors of the palette, including alpha. + When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use + lodepng_palette_clear, then for each color use lodepng_palette_add. + If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette. + + When decoding, by default you can ignore this palette, since LodePNG already + fills the palette colors in the pixels of the raw RGBA output. + + The palette is only supported for color type 3. + */ + unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/ + size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/ + + /* + transparent color key (tRNS) + + This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit. + For greyscale PNGs, r, g and b will all 3 be set to the same. + + When decoding, by default you can ignore this information, since LodePNG sets + pixels with this key to transparent already in the raw RGBA output. + + The color key is only supported for color types 0 and 2. + */ + unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ + unsigned key_r; /*red/greyscale component of color key*/ + unsigned key_g; /*green component of color key*/ + unsigned key_b; /*blue component of color key*/ +} LodePNGColorMode; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_color_mode_init(LodePNGColorMode* info); +void lodepng_color_mode_cleanup(LodePNGColorMode* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source); + +void lodepng_palette_clear(LodePNGColorMode* info); +/*add 1 color to the palette*/ +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a); + +/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/ +unsigned lodepng_get_bpp(const LodePNGColorMode* info); +/*get the amount of color channels used, based on colortype in the struct. +If a palette is used, it counts as 1 channel.*/ +unsigned lodepng_get_channels(const LodePNGColorMode* info); +/*is it a greyscale type? (only colortype 0 or 4)*/ +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info); +/*has it got an alpha channel? (only colortype 2 or 6)*/ +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info); +/*has it got a palette? (only colortype 3)*/ +unsigned lodepng_is_palette_type(const LodePNGColorMode* info); +/*only returns true if there is a palette and there is a value in the palette with alpha < 255. +Loops through the palette to check this.*/ +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info); +/* +Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. +Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). +Returns false if the image can only have opaque pixels. +In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, +or if "key_defined" is true. +*/ +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info); +/*Returns the byte size of a raw image buffer with given width, height and color mode*/ +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*The information of a Time chunk in PNG.*/ +typedef struct LodePNGTime +{ + unsigned year; /*2 bytes used (0-65535)*/ + unsigned month; /*1-12*/ + unsigned day; /*1-31*/ + unsigned hour; /*0-23*/ + unsigned minute; /*0-59*/ + unsigned second; /*0-60 (to allow for leap seconds)*/ +} LodePNGTime; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*Information about the PNG image, except pixels, width and height.*/ +typedef struct LodePNGInfo +{ + /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/ + unsigned compression_method;/*compression method of the original file. Always 0.*/ + unsigned filter_method; /*filter method of the original file*/ + unsigned interlace_method; /*interlace method of the original file*/ + LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /* + suggested background color chunk (bKGD) + This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit. + + For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding + the encoder writes the red one. For palette PNGs: When decoding, the RGB value + will be stored, not a palette index. But when encoding, specify the index of + the palette in background_r, the other two are then ignored. + + The decoder does not use this background color to edit the color of pixels. + */ + unsigned background_defined; /*is a suggested background color given?*/ + unsigned background_r; /*red component of suggested background color*/ + unsigned background_g; /*green component of suggested background color*/ + unsigned background_b; /*blue component of suggested background color*/ + + /* + non-international text chunks (tEXt and zTXt) + + The char** arrays each contain num strings. The actual messages are in + text_strings, while text_keys are keywords that give a short description what + the actual text represents, e.g. Title, Author, Description, or anything else. + + A keyword is minimum 1 character and maximum 79 characters long. It's + discouraged to use a single line length longer than 79 characters for texts. + + Don't allocate these text buffers yourself. Use the init/cleanup functions + correctly and use lodepng_add_text and lodepng_clear_text. + */ + size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ + char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/ + char** text_strings; /*the actual text*/ + + /* + international text chunks (iTXt) + Similar to the non-international text chunks, but with additional strings + "langtags" and "transkeys". + */ + size_t itext_num; /*the amount of international texts in this PNG*/ + char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/ + char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ + char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/ + char** itext_strings; /*the actual international text - UTF-8 string*/ + + /*time chunk (tIME)*/ + unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/ + LodePNGTime time; + + /*phys chunk (pHYs)*/ + unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ + unsigned phys_x; /*pixels per unit in x direction*/ + unsigned phys_y; /*pixels per unit in y direction*/ + unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ + + /* + unknown chunks + There are 3 buffers, one for each position in the PNG where unknown chunks can appear + each buffer contains all unknown chunks for that position consecutively + The 3 buffers are the unknown chunks between certain critical chunks: + 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND + Do not allocate or traverse this data yourself. Use the chunk traversing functions declared + later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct. + */ + unsigned char* unknown_chunks_data[3]; + size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGInfo; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_info_init(LodePNGInfo* info); +void lodepng_info_cleanup(LodePNGInfo* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/ + +void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/ +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/* +Converts raw buffer from one color type to another color type, based on +LodePNGColorMode structs to describe the input and output color type. +See the reference manual at the end of this header file to see which color conversions are supported. +return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) +The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel +of the output color type (lodepng_get_bpp). +For < 8 bpp images, there should not be padding bits at the end of scanlines. +For 16-bit per channel colors, uses big endian format like PNG does. +Return value is LodePNG error code +*/ +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DECODER +/* +Settings for the decoder. This contains settings for the PNG and the Zlib +decoder, but not the Info settings from the Info structs. +*/ +typedef struct LodePNGDecoderSettings +{ + LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ + + unsigned ignore_crc; /*ignore CRC checksums*/ + + unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/ + /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/ + unsigned remember_unknown_chunks; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGDecoderSettings; + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/ +typedef enum LodePNGFilterStrategy +{ + /*every filter at zero*/ + LFS_ZERO, + /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/ + LFS_MINSUM, + /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending + on the image, this is better or worse than minsum.*/ + LFS_ENTROPY, + /* + Brute-force-search PNG filters by compressing each filter for each scanline. + Experimental, very slow, and only rarely gives better compression than MINSUM. + */ + LFS_BRUTE_FORCE, + /*use predefined_filters buffer: you specify the filter type for each scanline*/ + LFS_PREDEFINED +} LodePNGFilterStrategy; + +/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding. +Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/ +typedef struct LodePNGColorProfile +{ + unsigned colored; /*not greyscale*/ + unsigned key; /*if true, image is not opaque. Only if true and alpha is false, color key is possible.*/ + unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/ + unsigned short key_g; + unsigned short key_b; + unsigned alpha; /*alpha channel or alpha palette required*/ + unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/ + unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/ + unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/ +} LodePNGColorProfile; + +void lodepng_color_profile_init(LodePNGColorProfile* profile); + +/*Get a LodePNGColorProfile of the image.*/ +unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in); +/*The function LodePNG uses internally to decide the PNG color with auto_convert. +Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in); + +/*Settings for the encoder.*/ +typedef struct LodePNGEncoderSettings +{ + LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ + + unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/ + + /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than + 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to + completely follow the official PNG heuristic, filter_palette_zero must be true and + filter_strategy must be LFS_MINSUM*/ + unsigned filter_palette_zero; + /*Which filter strategy to use when not using zeroes due to filter_palette_zero. + Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/ + LodePNGFilterStrategy filter_strategy; + /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with + the same length as the amount of scanlines in the image, and each value must <= 5. You + have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero + must be set to 0 to ensure this is also used on palette or low bitdepth images.*/ + const unsigned char* predefined_filters; + + /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). + If colortype is 3, PLTE is _always_ created.*/ + unsigned force_palette; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*add LodePNG identifier and version as a text chunk, for debugging*/ + unsigned add_id; + /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ + unsigned text_compression; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGEncoderSettings; + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) +/*The settings, state and information for extended encoding and decoding.*/ +typedef struct LodePNGState +{ +#ifdef LODEPNG_COMPILE_DECODER + LodePNGDecoderSettings decoder; /*the decoding settings*/ +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + LodePNGEncoderSettings encoder; /*the encoding settings*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/ + LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/ + unsigned error; +#ifdef LODEPNG_COMPILE_CPP + /* For the lodepng::State subclass. */ + virtual ~LodePNGState(){} +#endif +} LodePNGState; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_state_init(LodePNGState* state); +void lodepng_state_cleanup(LodePNGState* state); +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source); +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_DECODER +/* +Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and +getting much more information about the PNG image and color mode. +*/ +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); + +/* +Read the PNG header, but not the actual data. This returns only the information +that is in the header chunk of the PNG, such as width, height and color type. The +information is placed in the info_png field of the LodePNGState. +*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* +The lodepng_chunk functions are normally not needed, except to traverse the +unknown chunks stored in the LodePNGInfo struct, or add new ones to it. +It also allows traversing the chunks of an encoded PNG file yourself. + +PNG standard chunk naming conventions: +First byte: uppercase = critical, lowercase = ancillary +Second byte: uppercase = public, lowercase = private +Third byte: must be uppercase +Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy +*/ + +/* +Gets the length of the data of the chunk. Total chunk length has 12 bytes more. +There must be at least 4 bytes to read from. If the result value is too large, +it may be corrupt data. +*/ +unsigned lodepng_chunk_length(const unsigned char* chunk); + +/*puts the 4-byte type in null terminated string*/ +void lodepng_chunk_type(char type[5], const unsigned char* chunk); + +/*check if the type is the given type*/ +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type); + +/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/ +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk); + +/*0: public, 1: private (see PNG standard)*/ +unsigned char lodepng_chunk_private(const unsigned char* chunk); + +/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/ +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk); + +/*get pointer to the data of the chunk, where the input points to the header of the chunk*/ +unsigned char* lodepng_chunk_data(unsigned char* chunk); +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk); + +/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/ +unsigned lodepng_chunk_check_crc(const unsigned char* chunk); + +/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ +void lodepng_chunk_generate_crc(unsigned char* chunk); + +/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/ +unsigned char* lodepng_chunk_next(unsigned char* chunk); +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk); + +/* +Appends chunk to the data in out. The given chunk should already have its chunk header. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returns error code (0 if it went ok) +*/ +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk); + +/* +Appends new chunk to out. The chunk to append is given by giving its length, type +and data separately. The type is a 4-letter string. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returne error code (0 if it went ok) +*/ +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data); + + +/*Calculate CRC32 of buffer*/ +unsigned lodepng_crc32(const unsigned char* buf, size_t len); +#endif /*LODEPNG_COMPILE_PNG*/ + + +#ifdef LODEPNG_COMPILE_ZLIB +/* +This zlib part can be used independently to zlib compress and decompress a +buffer. It cannot be used to create gzip files however, and it only supports the +part of zlib that is required for PNG, it does not support dictionaries. +*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/ +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); + +/* +Decompresses Zlib data. Reallocates the out buffer and appends the data. The +data must be according to the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Compresses data with Zlib. Reallocates the out buffer and appends the data. +Zlib adds a small header and trailer around the deflate data. +The data is output in the format of the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +/* +Find length-limited Huffman code for given frequencies. This function is in the +public interface only for tests, it's used internally by lodepng_deflate. +*/ +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen); + +/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/ +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into buffer. The function allocates the out buffer, and +after usage you should free it. +out: output parameter, contains pointer to loaded buffer. +outsize: output parameter, size of the allocated out buffer +filename: the path to the file to load +return value: error code (0 means ok) +*/ +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename); + +/* +Save a file from buffer to disk. Warning, if it exists, this function overwrites +the file without warning! +buffer: the buffer to write +buffersize: size of the buffer to write +filename: the path to the file to save to +return value: error code (0 means ok) +*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ + +#ifdef LODEPNG_COMPILE_CPP +/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */ +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_PNG +class State : public LodePNGState +{ + public: + State(); + State(const State& other); + virtual ~State(); + State& operator=(const State& other); +}; + +#ifdef LODEPNG_COMPILE_DECODER +/* Same as other lodepng::decode, but using a State for more settings and information. */ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize); +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* Same as other lodepng::encode, but using a State for more settings and information. */ +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state); +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into an std::vector. +return value: error code (0 means ok) +*/ +unsigned load_file(std::vector& buffer, const std::string& filename); + +/* +Save the binary data in an std::vector to a file on disk. The file is overwritten +without warning. +*/ +unsigned save_file(const std::vector& buffer, const std::string& filename); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_PNG */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +/* Zlib-decompress an unsigned char buffer */ +unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); + +/* Zlib-decompress an std::vector */ +unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +/* Zlib-compress an unsigned char buffer */ +unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); + +/* Zlib-compress an std::vector */ +unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ + +/* +TODO: +[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often +[.] check compatibility with various compilers - done but needs to be redone for every newer version +[X] converting color to 16-bit per channel types +[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values) +[ ] make sure encoder generates no chunks with size > (2^31)-1 +[ ] partial decoding (stream processing) +[X] let the "isFullyOpaque" function check color keys and transparent palettes too +[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" +[ ] don't stop decoding on errors like 69, 57, 58 (make warnings) +[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes +[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ... +[ ] allow user to give data (void*) to custom allocator +*/ + +#endif /*LODEPNG_H inclusion guard*/ + +/* +LodePNG Documentation +--------------------- + +0. table of contents +-------------------- + + 1. about + 1.1. supported features + 1.2. features not supported + 2. C and C++ version + 3. security + 4. decoding + 5. encoding + 6. color conversions + 6.1. PNG color types + 6.2. color conversions + 6.3. padding bits + 6.4. A note about 16-bits per channel and endianness + 7. error values + 8. chunks and PNG editing + 9. compiler support + 10. examples + 10.1. decoder C++ example + 10.2. decoder C example + 11. state settings reference + 12. changes + 13. contact information + + +1. about +-------- + +PNG is a file format to store raster images losslessly with good compression, +supporting different color types and alpha channel. + +LodePNG is a PNG codec according to the Portable Network Graphics (PNG) +Specification (Second Edition) - W3C Recommendation 10 November 2003. + +The specifications used are: + +*) Portable Network Graphics (PNG) Specification (Second Edition): + http://www.w3.org/TR/2003/REC-PNG-20031110 +*) RFC 1950 ZLIB Compressed Data Format version 3.3: + http://www.gzip.org/zlib/rfc-zlib.html +*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: + http://www.gzip.org/zlib/rfc-deflate.html + +The most recent version of LodePNG can currently be found at +http://lodev.org/lodepng/ + +LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds +extra functionality. + +LodePNG exists out of two files: +-lodepng.h: the header file for both C and C++ +-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage + +If you want to start using LodePNG right away without reading this doc, get the +examples from the LodePNG website to see how to use it in code, or check the +smaller examples in chapter 13 here. + +LodePNG is simple but only supports the basic requirements. To achieve +simplicity, the following design choices were made: There are no dependencies +on any external library. There are functions to decode and encode a PNG with +a single function call, and extended versions of these functions taking a +LodePNGState struct allowing to specify or get more information. By default +the colors of the raw image are always RGB or RGBA, no matter what color type +the PNG file uses. To read and write files, there are simple functions to +convert the files to/from buffers in memory. + +This all makes LodePNG suitable for loading textures in games, demos and small +programs, ... It's less suitable for full fledged image editors, loading PNGs +over network (it requires all the image data to be available before decoding can +begin), life-critical systems, ... + +1.1. supported features +----------------------- + +The following features are supported by the decoder: + +*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, + or the same color type as the PNG +*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image +*) Adam7 interlace and deinterlace for any color type +*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk +*) support for alpha channels, including RGBA color model, translucent palettes and color keying +*) zlib decompression (inflate) +*) zlib compression (deflate) +*) CRC32 and ADLER32 checksums +*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. +*) the following chunks are supported (generated/interpreted) by both encoder and decoder: + IHDR: header information + PLTE: color palette + IDAT: pixel data + IEND: the final chunk + tRNS: transparency for palettized images + tEXt: textual information + zTXt: compressed textual information + iTXt: international textual information + bKGD: suggested background color + pHYs: physical dimensions + tIME: modification time + +1.2. features not supported +--------------------------- + +The following features are _not_ supported: + +*) some features needed to make a conformant PNG-Editor might be still missing. +*) partial loading/stream processing. All data must be available and is processed in one call. +*) The following public chunks are not supported but treated as unknown chunks by LodePNG + cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT + Some of these are not supported on purpose: LodePNG wants to provide the RGB values + stored in the pixels, not values modified by system dependent gamma or color models. + + +2. C and C++ version +-------------------- + +The C version uses buffers allocated with alloc that you need to free() +yourself. You need to use init and cleanup functions for each struct whenever +using a struct from the C version to avoid exploits and memory leaks. + +The C++ version has extra functions with std::vectors in the interface and the +lodepng::State class which is a LodePNGState with constructor and destructor. + +These files work without modification for both C and C++ compilers because all +the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers +ignore it, and the C code is made to compile both with strict ISO C90 and C++. + +To use the C++ version, you need to rename the source file to lodepng.cpp +(instead of lodepng.c), and compile it with a C++ compiler. + +To use the C version, you need to rename the source file to lodepng.c (instead +of lodepng.cpp), and compile it with a C compiler. + + +3. Security +----------- + +Even if carefully designed, it's always possible that LodePNG contains possible +exploits. If you discover one, please let me know, and it will be fixed. + +When using LodePNG, care has to be taken with the C version of LodePNG, as well +as the C-style structs when working with C++. The following conventions are used +for all C-style structs: + +-if a struct has a corresponding init function, always call the init function when making a new one +-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks +-if a struct has a corresponding copy function, use the copy function instead of "=". + The destination must also be inited already. + + +4. Decoding +----------- + +Decoding converts a PNG compressed image to a raw pixel buffer. + +Most documentation on using the decoder is at its declarations in the header +above. For C, simple decoding can be done with functions such as +lodepng_decode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_decode. For C++, all decoding can be done with the +various lodepng::decode functions, and lodepng::State can be used for advanced +features. + +When using the LodePNGState, it uses the following fields for decoding: +*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here +*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get +*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use + +LodePNGInfo info_png +-------------------- + +After decoding, this contains extra information of the PNG image, except the actual +pixels, width and height because these are already gotten directly from the decoder +functions. + +It contains for example the original color type of the PNG image, text comments, +suggested background color, etc... More details about the LodePNGInfo struct are +at its declaration documentation. + +LodePNGColorMode info_raw +------------------------- + +When decoding, here you can specify which color type you want +the resulting raw image to be. If this is different from the colortype of the +PNG, then the decoder will automatically convert the result. This conversion +always works, except if you want it to convert a color PNG to greyscale or to +a palette with missing colors. + +By default, 32-bit color is used for the result. + +LodePNGDecoderSettings decoder +------------------------------ + +The settings can be used to ignore the errors created by invalid CRC and Adler32 +chunks, and to disable the decoding of tEXt chunks. + +There's also a setting color_convert, true by default. If false, no conversion +is done, the resulting data will be as it was in the PNG (after decompression) +and you'll have to puzzle the colors of the pixels together yourself using the +color type information in the LodePNGInfo. + + +5. Encoding +----------- + +Encoding converts a raw pixel buffer to a PNG compressed image. + +Most documentation on using the encoder is at its declarations in the header +above. For C, simple encoding can be done with functions such as +lodepng_encode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_encode. For C++, all encoding can be done with the +various lodepng::encode functions, and lodepng::State can be used for advanced +features. + +Like the decoder, the encoder can also give errors. However it gives less errors +since the encoder input is trusted, the decoder input (a PNG image that could +be forged by anyone) is not trusted. + +When using the LodePNGState, it uses the following fields for encoding: +*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be. +*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has +*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use + +LodePNGInfo info_png +-------------------- + +When encoding, you use this the opposite way as when decoding: for encoding, +you fill in the values you want the PNG to have before encoding. By default it's +not needed to specify a color type for the PNG since it's automatically chosen, +but it's possible to choose it yourself given the right settings. + +The encoder will not always exactly match the LodePNGInfo struct you give, +it tries as close as possible. Some things are ignored by the encoder. The +encoder uses, for example, the following settings from it when applicable: +colortype and bitdepth, text chunks, time chunk, the color key, the palette, the +background color, the interlace method, unknown chunks, ... + +When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk. +If the palette contains any colors for which the alpha channel is not 255 (so +there are translucent colors in the palette), it'll add a tRNS chunk. + +LodePNGColorMode info_raw +------------------------- + +You specify the color type of the raw image that you give to the input here, +including a possible transparent color key and palette you happen to be using in +your raw image data. + +By default, 32-bit color is assumed, meaning your input has to be in RGBA +format with 4 bytes (unsigned chars) per pixel. + +LodePNGEncoderSettings encoder +------------------------------ + +The following settings are supported (some are in sub-structs): +*) auto_convert: when this option is enabled, the encoder will +automatically choose the smallest possible color mode (including color key) that +can encode the colors of all pixels without information loss. +*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, + 2 = dynamic huffman tree (best compression). Should be 2 for proper + compression. +*) use_lz77: whether or not to use LZ77 for compressed block types. Should be + true for proper compression. +*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value + 2048 by default, but can be set to 32768 for better, but slow, compression. +*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE + chunk if force_palette is true. This can used as suggested palette to convert + to by viewers that don't support more than 256 colors (if those still exist) +*) add_id: add text chunk "Encoder: LodePNG " to the image. +*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks. + zTXt chunks use zlib compression on the text. This gives a smaller result on + large texts but a larger result on small texts (such as a single program name). + It's all tEXt or all zTXt though, there's no separate setting per text yet. + + +6. color conversions +-------------------- + +An important thing to note about LodePNG, is that the color type of the PNG, and +the color type of the raw image, are completely independent. By default, when +you decode a PNG, you get the result as a raw image in the color type you want, +no matter whether the PNG was encoded with a palette, greyscale or RGBA color. +And if you encode an image, by default LodePNG will automatically choose the PNG +color type that gives good compression based on the values of colors and amount +of colors in the image. It can be configured to let you control it instead as +well, though. + +To be able to do this, LodePNG does conversions from one color mode to another. +It can convert from almost any color type to any other color type, except the +following conversions: RGB to greyscale is not supported, and converting to a +palette when the palette doesn't have a required color is not supported. This is +not supported on purpose: this is information loss which requires a color +reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey +is easy, but there are multiple ways if you want to give some channels more +weight). + +By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB +color, no matter what color type the PNG has. And by default when encoding, +LodePNG automatically picks the best color model for the output PNG, and expects +the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control +the color format of the images yourself, you can skip this chapter. + +6.1. PNG color types +-------------------- + +A PNG image can have many color types, ranging from 1-bit color to 64-bit color, +as well as palettized color modes. After the zlib decompression and unfiltering +in the PNG image is done, the raw pixel data will have that color type and thus +a certain amount of bits per pixel. If you want the output raw image after +decoding to have another color type, a conversion is done by LodePNG. + +The PNG specification gives the following color types: + +0: greyscale, bit depths 1, 2, 4, 8, 16 +2: RGB, bit depths 8 and 16 +3: palette, bit depths 1, 2, 4 and 8 +4: greyscale with alpha, bit depths 8 and 16 +6: RGBA, bit depths 8 and 16 + +Bit depth is the amount of bits per pixel per color channel. So the total amount +of bits per pixel is: amount of channels * bitdepth. + +6.2. color conversions +---------------------- + +As explained in the sections about the encoder and decoder, you can specify +color types and bit depths in info_png and info_raw to change the default +behaviour. + +If, when decoding, you want the raw image to be something else than the default, +you need to set the color type and bit depth you want in the LodePNGColorMode, +or the parameters colortype and bitdepth of the simple decoding function. + +If, when encoding, you use another color type than the default in the raw input +image, you need to specify its color type and bit depth in the LodePNGColorMode +of the raw image, or use the parameters colortype and bitdepth of the simple +encoding function. + +If, when encoding, you don't want LodePNG to choose the output PNG color type +but control it yourself, you need to set auto_convert in the encoder settings +to false, and specify the color type you want in the LodePNGInfo of the +encoder (including palette: it can generate a palette if auto_convert is true, +otherwise not). + +If the input and output color type differ (whether user chosen or auto chosen), +LodePNG will do a color conversion, which follows the rules below, and may +sometimes result in an error. + +To avoid some confusion: +-the decoder converts from PNG to raw image +-the encoder converts from raw image to PNG +-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image +-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG +-when encoding, the color type in LodePNGInfo is ignored if auto_convert + is enabled, it is automatically generated instead +-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original + PNG image, but it can be ignored since the raw image has the color type you requested instead +-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion + between the color types is done if the color types are supported. If it is not + supported, an error is returned. If the types are the same, no conversion is done. +-even though some conversions aren't supported, LodePNG supports loading PNGs from any + colortype and saving PNGs to any colortype, sometimes it just requires preparing + the raw image correctly before encoding. +-both encoder and decoder use the same color converter. + +Non supported color conversions: +-color to greyscale: no error is thrown, but the result will look ugly because +only the red channel is taken +-anything to palette when that palette does not have that color in it: in this +case an error is thrown + +Supported color conversions: +-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA +-any grey or grey+alpha, to grey or grey+alpha +-anything to a palette, as long as the palette has the requested colors in it +-removing alpha channel +-higher to smaller bitdepth, and vice versa + +If you want no color conversion to be done (e.g. for speed or control): +-In the encoder, you can make it save a PNG with any color type by giving the +raw color mode and LodePNGInfo the same color mode, and setting auto_convert to +false. +-In the decoder, you can make it store the pixel data in the same color type +as the PNG has, by setting the color_convert setting to false. Settings in +info_raw are then ignored. + +The function lodepng_convert does the color conversion. It is available in the +interface but normally isn't needed since the encoder and decoder already call +it. + +6.3. padding bits +----------------- + +In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines +have a bit amount that isn't a multiple of 8, then padding bits are used so that each +scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output. +The raw input image you give to the encoder, and the raw output image you get from the decoder +will NOT have these padding bits, e.g. in the case of a 1-bit image with a width +of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte, +not the first bit of a new byte. + +6.4. A note about 16-bits per channel and endianness +---------------------------------------------------- + +LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like +for any other color format. The 16-bit values are stored in big endian (most +significant byte first) in these arrays. This is the opposite order of the +little endian used by x86 CPU's. + +LodePNG always uses big endian because the PNG file format does so internally. +Conversions to other formats than PNG uses internally are not supported by +LodePNG on purpose, there are myriads of formats, including endianness of 16-bit +colors, the order in which you store R, G, B and A, and so on. Supporting and +converting to/from all that is outside the scope of LodePNG. + +This may mean that, depending on your use case, you may want to convert the big +endian output of LodePNG to little endian with a for loop. This is certainly not +always needed, many applications and libraries support big endian 16-bit colors +anyway, but it means you cannot simply cast the unsigned char* buffer to an +unsigned short* buffer on x86 CPUs. + + +7. error values +--------------- + +All functions in LodePNG that return an error code, return 0 if everything went +OK, or a non-zero code if there was an error. + +The meaning of the LodePNG error values can be retrieved with the function +lodepng_error_text: given the numerical error code, it returns a description +of the error in English as a string. + +Check the implementation of lodepng_error_text to see the meaning of each code. + + +8. chunks and PNG editing +------------------------- + +If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG +editor that should follow the rules about handling of unknown chunks, or if your +program is able to read other types of chunks than the ones handled by LodePNG, +then that's possible with the chunk functions of LodePNG. + +A PNG chunk has the following layout: + +4 bytes length +4 bytes type name +length bytes data +4 bytes CRC + +8.1. iterating through chunks +----------------------------- + +If you have a buffer containing the PNG image data, then the first chunk (the +IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the +signature of the PNG and are not part of a chunk. But if you start at byte 8 +then you have a chunk, and can check the following things of it. + +NOTE: none of these functions check for memory buffer boundaries. To avoid +exploits, always make sure the buffer contains all the data of the chunks. +When using lodepng_chunk_next, make sure the returned value is within the +allocated memory. + +unsigned lodepng_chunk_length(const unsigned char* chunk): + +Get the length of the chunk's data. The total chunk length is this length + 12. + +void lodepng_chunk_type(char type[5], const unsigned char* chunk): +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type): + +Get the type of the chunk or compare if it's a certain type + +unsigned char lodepng_chunk_critical(const unsigned char* chunk): +unsigned char lodepng_chunk_private(const unsigned char* chunk): +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk): + +Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). +Check if the chunk is private (public chunks are part of the standard, private ones not). +Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical +chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your +program doesn't handle that type of unknown chunk. + +unsigned char* lodepng_chunk_data(unsigned char* chunk): +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk): + +Get a pointer to the start of the data of the chunk. + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk): +void lodepng_chunk_generate_crc(unsigned char* chunk): + +Check if the crc is correct or generate a correct one. + +unsigned char* lodepng_chunk_next(unsigned char* chunk): +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk): + +Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these +functions do no boundary checking of the allocated data whatsoever, so make sure there is enough +data available in the buffer to be able to go to the next chunk. + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk): +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data): + +These functions are used to create new chunks that are appended to the data in *out that has +length *outlength. The append function appends an existing chunk to the new data. The create +function creates a new chunk with the given parameters and appends it. Type is the 4-letter +name of the chunk. + +8.2. chunks in info_png +----------------------- + +The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3 +buffers (each with size) to contain 3 types of unknown chunks: +the ones that come before the PLTE chunk, the ones that come between the PLTE +and the IDAT chunks, and the ones that come after the IDAT chunks. +It's necessary to make the distionction between these 3 cases because the PNG +standard forces to keep the ordering of unknown chunks compared to the critical +chunks, but does not force any other ordering rules. + +info_png.unknown_chunks_data[0] is the chunks before PLTE +info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT +info_png.unknown_chunks_data[2] is the chunks after IDAT + +The chunks in these 3 buffers can be iterated through and read by using the same +way described in the previous subchapter. + +When using the decoder to decode a PNG, you can make it store all unknown chunks +if you set the option settings.remember_unknown_chunks to 1. By default, this +option is off (0). + +The encoder will always encode unknown chunks that are stored in the info_png. +If you need it to add a particular chunk that isn't known by LodePNG, you can +use lodepng_chunk_append or lodepng_chunk_create to the chunk data in +info_png.unknown_chunks_data[x]. + +Chunks that are known by LodePNG should not be added in that way. E.g. to make +LodePNG add a bKGD chunk, set background_defined to true and add the correct +parameters there instead. + + +9. compiler support +------------------- + +No libraries other than the current standard C library are needed to compile +LodePNG. For the C++ version, only the standard C++ library is needed on top. +Add the files lodepng.c(pp) and lodepng.h to your project, include +lodepng.h where needed, and your program can read/write PNG files. + +It is compatible with C90 and up, and C++03 and up. + +If performance is important, use optimization when compiling! For both the +encoder and decoder, this makes a large difference. + +Make sure that LodePNG is compiled with the same compiler of the same version +and with the same settings as the rest of the program, or the interfaces with +std::vectors and std::strings in C++ can be incompatible. + +CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. + +*) gcc and g++ + +LodePNG is developed in gcc so this compiler is natively supported. It gives no +warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ +version 4.7.1 on Linux, 32-bit and 64-bit. + +*) Clang + +Fully supported and warning-free. + +*) Mingw + +The Mingw compiler (a port of gcc for Windows) should be fully supported by +LodePNG. + +*) Visual Studio and Visual C++ Express Edition + +LodePNG should be warning-free with warning level W4. Two warnings were disabled +with pragmas though: warning 4244 about implicit conversions, and warning 4996 +where it wants to use a non-standard function fopen_s instead of the standard C +fopen. + +Visual Studio may want "stdafx.h" files to be included in each source file and +give an error "unexpected end of file while looking for precompiled header". +This is not standard C++ and will not be added to the stock LodePNG. You can +disable it for lodepng.cpp only by right clicking it, Properties, C/C++, +Precompiled Headers, and set it to Not Using Precompiled Headers there. + +NOTE: Modern versions of VS should be fully supported, but old versions, e.g. +VS6, are not guaranteed to work. + +*) Compilers on Macintosh + +LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for +C and C++. + +*) Other Compilers + +If you encounter problems on any compilers, feel free to let me know and I may +try to fix it if the compiler is modern and standards complient. + + +10. examples +------------ + +This decoder example shows the most basic usage of LodePNG. More complex +examples can be found on the LodePNG website. + +10.1. decoder C++ example +------------------------- + +#include "lodepng.h" +#include + +int main(int argc, char *argv[]) +{ + const char* filename = argc > 1 ? argv[1] : "test.png"; + + //load and decode + std::vector image; + unsigned width, height; + unsigned error = lodepng::decode(image, width, height, filename); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... +} + +10.2. decoder C example +----------------------- + +#include "lodepng.h" + +int main(int argc, char *argv[]) +{ + unsigned error; + unsigned char* image; + size_t width, height; + const char* filename = argc > 1 ? argv[1] : "test.png"; + + error = lodepng_decode32_file(&image, &width, &height, filename); + + if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error)); + + / * use image here * / + + free(image); + return 0; +} + +11. state settings reference +---------------------------- + +A quick reference of some settings to set on the LodePNGState + +For decoding: + +state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums +state.decoder.zlibsettings.custom_...: use custom inflate function +state.decoder.ignore_crc: ignore CRC checksums +state.decoder.color_convert: convert internal PNG color to chosen one +state.decoder.read_text_chunks: whether to read in text metadata chunks +state.decoder.remember_unknown_chunks: whether to read in unknown chunks +state.info_raw.colortype: desired color type for decoded image +state.info_raw.bitdepth: desired bit depth for decoded image +state.info_raw....: more color settings, see struct LodePNGColorMode +state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo + +For encoding: + +state.encoder.zlibsettings.btype: disable compression by setting it to 0 +state.encoder.zlibsettings.use_lz77: use LZ77 in compression +state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize +state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match +state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching +state.encoder.zlibsettings.lazymatching: try one more LZ77 matching +state.encoder.zlibsettings.custom_...: use custom deflate function +state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png +state.encoder.filter_palette_zero: PNG filter strategy for palette +state.encoder.filter_strategy: PNG filter strategy to encode with +state.encoder.force_palette: add palette even if not encoding to one +state.encoder.add_id: add LodePNG identifier and version as a text chunk +state.encoder.text_compression: use compressed text chunks for metadata +state.info_raw.colortype: color type of raw input image you provide +state.info_raw.bitdepth: bit depth of raw input image you provide +state.info_raw: more color settings, see struct LodePNGColorMode +state.info_png.color.colortype: desired color type if auto_convert is false +state.info_png.color.bitdepth: desired bit depth if auto_convert is false +state.info_png.color....: more color settings, see struct LodePNGColorMode +state.info_png....: more PNG related settings, see struct LodePNGInfo + + +12. changes +----------- + +The version number of LodePNG is the date of the change given in the format +yyyymmdd. + +Some changes aren't backwards compatible. Those are indicated with a (!) +symbol. + +*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within + the limits of pure C90). +*) 08 dec 2015: Made load_file function return error if file can't be opened. +*) 24 okt 2015: Bugfix with decoding to palette output. +*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding. +*) 23 aug 2014: Reduced needless memory usage of decoder. +*) 28 jun 2014: Removed fix_png setting, always support palette OOB for + simplicity. Made ColorProfile public. +*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization. +*) 22 dec 2013: Power of two windowsize required for optimization. +*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key. +*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png). +*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_" + prefix for the custom allocators and made it possible with a new #define to + use custom ones in your project without needing to change lodepng's code. +*) 28 jan 2013: Bugfix with color key. +*) 27 okt 2012: Tweaks in text chunk keyword length error handling. +*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode. + (no palette). Better deflate tree encoding. New compression tweak settings. + Faster color conversions while decoding. Some internal cleanups. +*) 23 sep 2012: Reduced warnings in Visual Studio a little bit. +*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions + and made it work with function pointers instead. +*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc + and free functions and toggle #defines from compiler flags. Small fixes. +*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible. +*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed + redundant C++ codec classes. Reduced amount of structs. Everything changed, + but it is cleaner now imho and functionality remains the same. Also fixed + several bugs and shrunk the implementation code. Made new samples. +*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best + PNG color model and bit depth, based on the amount and type of colors of the + raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color. +*) 9 okt 2011: simpler hash chain implementation for the encoder. +*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. +*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. + A bug with the PNG filtertype heuristic was fixed, so that it chooses much + better ones (it's quite significant). A setting to do an experimental, slow, + brute force search for PNG filter types is added. +*) 17 aug 2011 (!): changed some C zlib related function names. +*) 16 aug 2011: made the code less wide (max 120 characters per line). +*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. +*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. +*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman + to optimize long sequences of zeros. +*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and + LodePNG_InfoColor_canHaveAlpha functions for convenience. +*) 7 nov 2010: added LodePNG_error_text function to get error code description. +*) 30 okt 2010: made decoding slightly faster +*) 26 okt 2010: (!) changed some C function and struct names (more consistent). + Reorganized the documentation and the declaration order in the header. +*) 08 aug 2010: only changed some comments and external samples. +*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. +*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. +*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could + read by ignoring the problem but windows apps couldn't. +*) 06 jun 2008: added more error checks for out of memory cases. +*) 26 apr 2008: added a few more checks here and there to ensure more safety. +*) 06 mar 2008: crash with encoding of strings fixed +*) 02 feb 2008: support for international text chunks added (iTXt) +*) 23 jan 2008: small cleanups, and #defines to divide code in sections +*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. +*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. +*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added + Also various fixes, such as in the deflate and the padding bits code. +*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved + filtering code of encoder. +*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A + C++ wrapper around this provides an interface almost identical to before. + Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code + are together in these files but it works both for C and C++ compilers. +*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks +*) 30 aug 2007: bug fixed which makes this Borland C++ compatible +*) 09 aug 2007: some VS2005 warnings removed again +*) 21 jul 2007: deflate code placed in new namespace separate from zlib code +*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images +*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing + invalid std::vector element [0] fixed, and level 3 and 4 warnings removed +*) 02 jun 2007: made the encoder add a tag with version by default +*) 27 may 2007: zlib and png code separated (but still in the same file), + simple encoder/decoder functions added for more simple usage cases +*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), + moved some examples from here to lodepng_examples.cpp +*) 12 may 2007: palette decoding bug fixed +*) 24 apr 2007: changed the license from BSD to the zlib license +*) 11 mar 2007: very simple addition: ability to encode bKGD chunks. +*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding + palettized PNG images. Plus little interface change with palette and texts. +*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. + Fixed a bug where the end code of a block had length 0 in the Huffman tree. +*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented + and supported by the encoder, resulting in smaller PNGs at the output. +*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. +*) 24 jan 2007: gave encoder an error interface. Added color conversion from any + greyscale type to 8-bit greyscale with or without alpha. +*) 21 jan 2007: (!) Totally changed the interface. It allows more color types + to convert to and is more uniform. See the manual for how it works now. +*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: + encode/decode custom tEXt chunks, separate classes for zlib & deflate, and + at last made the decoder give errors for incorrect Adler32 or Crc. +*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. +*) 29 dec 2006: Added support for encoding images without alpha channel, and + cleaned out code as well as making certain parts faster. +*) 28 dec 2006: Added "Settings" to the encoder. +*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. + Removed some code duplication in the decoder. Fixed little bug in an example. +*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. + Fixed a bug of the decoder with 16-bit per color. +*) 15 okt 2006: Changed documentation structure +*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the + given image buffer, however for now it's not compressed. +*) 08 sep 2006: (!) Changed to interface with a Decoder class +*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different + way. Renamed decodePNG to decodePNGGeneric. +*) 29 jul 2006: (!) Changed the interface: image info is now returned as a + struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. +*) 28 jul 2006: Cleaned the code and added new error checks. + Corrected terminology "deflate" into "inflate". +*) 23 jun 2006: Added SDL example in the documentation in the header, this + example allows easy debugging by displaying the PNG and its transparency. +*) 22 jun 2006: (!) Changed way to obtain error value. Added + loadFile function for convenience. Made decodePNG32 faster. +*) 21 jun 2006: (!) Changed type of info vector to unsigned. + Changed position of palette in info vector. Fixed an important bug that + happened on PNGs with an uncompressed block. +*) 16 jun 2006: Internally changed unsigned into unsigned where + needed, and performed some optimizations. +*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them + in LodePNG namespace. Changed the order of the parameters. Rewrote the + documentation in the header. Renamed files to lodepng.cpp and lodepng.h +*) 22 apr 2006: Optimized and improved some code +*) 07 sep 2005: (!) Changed to std::vector interface +*) 12 aug 2005: Initial release (C++, decoder only) + + +13. contact information +----------------------- + +Feel free to contact me with suggestions, problems, comments, ... concerning +LodePNG. If you encounter a PNG image that doesn't work properly with this +decoder, feel free to send it and I'll use it to find and fix the problem. + +My email address is (puzzle the account and domain together with an @ symbol): +Domain: gmail dot com. +Account: lode dot vandevenne. + + +Copyright (c) 2005-2016 Lode Vandevenne +*/ diff --git a/examples/graph/stereo/msvs/stereo.sln b/examples/graph/stereo/msvs/stereo.sln new file mode 100644 index 0000000..ee332b8 --- /dev/null +++ b/examples/graph/stereo/msvs/stereo.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stereo", "stereo.vcxproj", "{9C777D75-70FF-4C24-AB74-EBCDF3328AB9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|Win32.ActiveCfg = Debug|Win32 + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|Win32.Build.0 = Debug|Win32 + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|x64.ActiveCfg = Debug|x64 + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Debug|x64.Build.0 = Debug|x64 + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|Win32.ActiveCfg = Release|Win32 + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|Win32.Build.0 = Release|Win32 + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|x64.ActiveCfg = Release|x64 + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/graph/stereo/msvs/stereo.vcxproj b/examples/graph/stereo/msvs/stereo.vcxproj new file mode 100644 index 0000000..e460ece --- /dev/null +++ b/examples/graph/stereo/msvs/stereo.vcxproj @@ -0,0 +1,163 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {9C777D75-70FF-4C24-AB74-EBCDF3328AB9} + stereo + + + + Application + true + v120 + MultiByte + + + Application + true + v120 + MultiByte + + + Application + false + v120 + true + MultiByte + + + Application + false + v120 + true + MultiByte + + + + + + + + + + + + + + + + + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + $(SolutionDir)$(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(ProjectName)\$(Configuration)\ + + + + Level3 + Disabled + true + $(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories) + _MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + $(INTELOCLSDKROOT)lib\x86;$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + OpenCL.lib;%(AdditionalDependencies) + + + + + Level3 + Disabled + true + $(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories) + _MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + $(INTELOCLSDKROOT)lib\x64;$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + OpenCL.lib;%(AdditionalDependencies) + + + + + Level3 + MaxSpeed + true + true + true + $(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories) + _MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + $(INTELOCLSDKROOT)lib\x86;$(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + OpenCL.lib;%(AdditionalDependencies) + + + + + Level3 + MaxSpeed + true + true + true + $(SolutionDir)..\..\..\..\include;$(INTELOCLSDKROOT)include;$(TBBROOT)\include;%(AdditionalIncludeDirectories) + _MBCS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + $(INTELOCLSDKROOT)lib\x64;$(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + OpenCL.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/graph/stereo/readme.html b/examples/graph/stereo/readme.html new file mode 100644 index 0000000..3fb7031 --- /dev/null +++ b/examples/graph/stereo/readme.html @@ -0,0 +1,445 @@ + + + + + + Intel® Threading Building Blocks. Stereo sample + + + + + +

+ The Stereo example is an implementation of the algorithm that applies stereoscopic 3D effect on two input images and achieved by means of encoding each eye's image using filters of different colors: red and blue - + Anaglyph effect. +

+ The example uses the flow graph interface and can be executed both on CPU and GPU for image processing. + The output of this application is a PNG image with the anaglyph effect applied. +

+ + This example includes software developed by Lode Vandevenne. See + here for copyright information. + +
+ It exemplifies the opencl_node usage in the flow graph interface in context of creating a stereo image from two input images. +

+ This example uses C++11 lambda expressions. Specifying a compiler option such as -std=c++11 or similar might be necessary in order to build the example. + For more information please refer to the documentation for the compiler you use. +

+ +
+
System Requirements
+ +
+

+ For the most up to date system requirements, see the release notes. +

+

+ Additionally, you have to install OpenCL™ version 1.2 or higher in order to run this example. See the OpenCL™ Drivers and Runtimes for Intel® Architecture. +

+
+
+ +
+
Files
+ +
+
+
stereo.cpp +
The implementation of stereo image creation algorithm based on the flow graph interface. +
lodepng.cpp +
Library for reading and writing png images. +
lodepng.h +
Public header file for the lodepng library. +
utils.h +
Support functions for this example. +
imageEffects.cl +
OpenCL kernel file with image effects algorithms. +
Makefile +
Makefile for building the example. +
+
+
+ +
+
Directories
+ +
+
+
msvs +
Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
xcode +
Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
+

For information about the minimum supported version of IDE, see release notes.

+
+
+ +
+
Build instructions
+ +
+

General build directions can be found here.

+
+
+ +
+
Usage
+ +
+
+
stereo -h +
Prints the help for command line options +
stereo [-v] [-alg=value] [first_filename] [second_filename] +
-v print diagnostic output to screen
+ -alg name of the used pipeline realization - can be host, target (default) or host_target
+ first_filename first input file name
+ second_filename second input file name
+
+
+
+ +
+ Up to parent directory +
+ +
+
Legal Information
+ +
+

+ Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
* Other names and brands may be claimed as the property of others. +
© 2017, Intel Corporation +

+ +

+ LodePNG version 20160409 + Copyright (c) 2005-2016 Lode Vandevenne +

+

+ This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. +
+ Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: +

    +
  1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +
  2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +
  3. This notice may not be removed or altered from any source + distribution. +
+

+
+
+ + + diff --git a/examples/graph/stereo/stereo.cpp b/examples/graph/stereo/stereo.cpp new file mode 100644 index 0000000..291d330 --- /dev/null +++ b/examples/graph/stereo/stereo.cpp @@ -0,0 +1,439 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#define TBB_PREVIEW_FLOW_GRAPH_NODES 1 +#define TBB_PREVIEW_FLOW_GRAPH_FEATURES 1 + +#include "tbb/tbb_config.h" +#include "../../common/utility/utility.h" + +#if __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT + +#if _MSC_VER +// suppress warning C4503: decorated name length exceeded, name was truncated +#pragma warning(disable : 4503) +#endif + +#include + +#include "tbb/flow_graph.h" +#include "tbb/flow_graph_opencl_node.h" +#include "tbb/tick_count.h" + +#include "utils.h" + +static const int redChannelOffset = 0; +static const int greenChannelOffset = 1; +static const int blueChannelOffset = 2; +static const int channelsPerPixel = 4; +static const int channelIncreaseValue = 10; + +void applyLeftImageEffect(utils::image_buffer& image) { + const int heighBase = channelsPerPixel * image.width; + std::vector& buffer = *image.buffer; + + // Increase the Red channel of left image by 10 + for (unsigned int y = 0; y < image.height; y++) { + const int heightOffset = heighBase * y; + for (unsigned int x = 0; x < image.width; x++) { + int pixelOffset = heightOffset + channelsPerPixel * x + redChannelOffset; + buffer[pixelOffset] += channelIncreaseValue; + } + } +} + +void applyRightImageEffect(utils::image_buffer& image) { + const int heighBase = channelsPerPixel * image.width; + std::vector& buffer = *image.buffer; + + // Increase the Blue channel of left image by 10 + for (unsigned int y = 0; y < image.height; y++) { + const int heightOffset = heighBase * y; + for (unsigned int x = 0; x < image.width; x++) { + const int pixelOffset = heightOffset + channelsPerPixel * x + blueChannelOffset; + buffer[pixelOffset] += channelIncreaseValue; + } + } +} + +// This function merges to image buffers into the first buffer (leftImageBuffer as a destination) +void mergeImageBuffers(utils::image_buffer& leftImage, const utils::image_buffer& rightImage) { + const int heighBase = channelsPerPixel * leftImage.width; + std::vector& leftImageBuffer = *leftImage.buffer; + std::vector& rightImageBuffer = *rightImage.buffer; + + // Apply stereoscopic merge using algorithm: R: left image, G: left and right images (middle value), B: right image + for (unsigned int y = 0; y < leftImage.height; y++) { + const int heightOffset = heighBase * y; + for (unsigned int x = 0; x < leftImage.width; x++) { + const int pixelOffset = heightOffset + channelsPerPixel * x; + const int greenChannelIndex = pixelOffset + greenChannelOffset; + const int blueChannelIndex = pixelOffset + blueChannelOffset; + const int middleGreenChannel = (leftImageBuffer[greenChannelIndex] + rightImageBuffer[greenChannelIndex]); + leftImageBuffer[greenChannelIndex] = middleGreenChannel / 2; + leftImageBuffer[blueChannelIndex] = rightImageBuffer[blueChannelIndex]; + } + } +} + +void fillOpenclBuffer(tbb::flow::opencl_buffer& openclBuffer, const std::vector& sourceBuffer) { + std::copy(sourceBuffer.begin(), sourceBuffer.end(), openclBuffer.begin()); +} + +class gpu_device_selector { +public: + template + tbb::flow::opencl_device operator()(tbb::flow::opencl_factory& f) { + // Set your GPU device if available to execute kernel on + const tbb::flow::opencl_device_list &devices = f.devices(); + tbb::flow::opencl_device_list::const_iterator it = std::find_if( + devices.cbegin(), devices.cend(), + [](const tbb::flow::opencl_device &d) { + cl_device_type type; + d.info(CL_DEVICE_TYPE, type); + return CL_DEVICE_TYPE_GPU == type; + }); + + if (it == devices.cend()) { + std::cout << "Info: could not find any GPU devices. Choosing the first available device (default behaviour)." << std::endl; + return *(f.devices().begin()); + } else { + // Return GPU device from factory + return *it; + } + } +}; + +// Image processing function that is executed on CPU only +void hostFunction(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) { + using namespace tbb::flow; + typedef tuple< utils::image_buffer, utils::image_buffer > MergeImagesTuple; + + graph g; + + function_node< std::string, utils::image_buffer > fileReaderOne(g, serial, [](const std::string& fileToRead) -> utils::image_buffer { + return utils::getOrGenerateImage(fileToRead); + }); + + function_node< std::string, utils::image_buffer > fileReaderTwo = fileReaderOne; + + function_node< utils::image_buffer, utils::image_buffer > leftImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer { + applyLeftImageEffect(image); + return image; + }); + + function_node< utils::image_buffer, utils::image_buffer > rightImageEffect(g, unlimited, [](utils::image_buffer image) -> utils::image_buffer { + applyRightImageEffect(image); + return image; + }); + + join_node< tuple< utils::image_buffer, utils::image_buffer > > joinNode(g); + + function_node< MergeImagesTuple, utils::image_buffer > mergeImages(g, unlimited, [](const MergeImagesTuple& bufferTuple) -> utils::image_buffer { + // Two input images from tupple are merged into the first image, + utils::image_buffer leftImageBuffer = std::get<0>(bufferTuple); + utils::image_buffer rightImageBuffer = std::get<1>(bufferTuple); + + mergeImageBuffers(leftImageBuffer, rightImageBuffer); + + return leftImageBuffer; + }); + + function_node< utils::image_buffer > outputWriter(g, unlimited, [&outputFile](const utils::image_buffer& image) { + utils::writePNGImage(image, outputFile); + }); + + // Read left image + make_edge(fileReaderOne, leftImageEffect); + + // Read right image + make_edge(fileReaderTwo, rightImageEffect); + + // Process left image + make_edge(leftImageEffect, tbb::flow::input_port<0>(joinNode)); + + // Process right image + make_edge(rightImageEffect, tbb::flow::input_port<1>(joinNode)); + + // Merge images + make_edge(joinNode, mergeImages); + make_edge(mergeImages, outputWriter); + + // Start graph image processing + fileReaderOne.try_put(firstFile); + fileReaderTwo.try_put(secondFile); + + g.wait_for_all(); +} + + +// Image processing function using OpenCL +/** Reading and writing image to file is executed on CPU, while all buffers manipulation are executed on GPU */ +void openclFunctionGPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) { + using namespace tbb::flow; + typedef opencl_buffer OpenclImageBuffer; + typedef std::array NDRange; + typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple; + typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple; + typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple; + + graph g; + + gpu_device_selector gpu_selector; + + function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple { + utils::image_buffer src = utils::getOrGenerateImage(fileToRead); + + // Create and initialize opencl_buffer in order to pass it to kernel + OpenclImageBuffer oclImage(src.buffer->size()); + fillOpenclBuffer(oclImage, *src.buffer); + + NDRange rangeList = { src.width, src.height }; + return std::make_tuple(oclImage, src.width, rangeList); + }); + + function_node< std::string, OpenclImageTuple > fileReaderTwo = fileReaderOne; + + split_node< OpenclImageTuple > splitArgumentsLeftNode(g); + + // Kernel should be in the current folder + opencl_program<> program("imageEffects.cl"); + + opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel("applyLeftImageEffect"), gpu_selector); + + split_node< OpenclImageTuple > splitArgumentsRightNode(g); + + opencl_node< OpenclImageTuple > rightImageEffect(g, program.get_kernel("applyRightImageEffect"), gpu_selector); + + opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel("mergeImages"), gpu_selector); + + join_node< WriteImageBufferTuple > joinTupleNode(g); + + function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) { + // The result image have to be copied in order to be changed, + // the second parameter - image size, can be taken by const reference + OpenclImageBuffer imageBuffer = std::get<0>(image); + const NDRange& imageSize = std::get<1>(image); + unsigned int width = imageSize[0]; + unsigned int height = imageSize[1]; + + utils::writePNGImage(imageBuffer.data(), width, height, outputFile); + }); + + // Process left image + make_edge(fileReaderOne, splitArgumentsLeftNode); + make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect)); + make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect)); + + // Pass OpenCL NDRange via input port because it depends on input data + make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect)); + + // Process right image + make_edge(fileReaderTwo, splitArgumentsRightNode); + make_edge(output_port<0>(splitArgumentsRightNode), input_port<0>(rightImageEffect)); + make_edge(output_port<1>(splitArgumentsRightNode), input_port<1>(rightImageEffect)); + + // Pass OpenCL NDRange via input port because it depends on input data + make_edge(output_port<2>(splitArgumentsRightNode), input_port<2>(rightImageEffect)); + + // Merge images + make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages)); + make_edge(output_port<0>(rightImageEffect), input_port<1>(mergeImages)); + make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages)); + + // Set OpenCL NDRange here (because the values may vary, depending on input data) + make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages)); + + // Write image to PNG + make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode)); + make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode)); + make_edge(joinTupleNode, outputWriter); + + // Define where to get ndrange and kernel arguments + leftImageEffect.set_args(port_ref<0, 1>()); + leftImageEffect.set_range(port_ref<2>()); + + rightImageEffect.set_args(port_ref<0, 1>()); + rightImageEffect.set_range(port_ref<2>()); + + mergeImages.set_args(port_ref<0, 2>()); + mergeImages.set_range(port_ref<3>()); + + // Start graph image processing pipeline + fileReaderOne.try_put(firstFile); + fileReaderTwo.try_put(secondFile); + + g.wait_for_all(); +} + + +// Second image processing function using OpenCL +/** Reading and writing image to file is executed on CPU, while some buffers manipulation are executed on GPU + and others runs on CPU device. This case should have the best performance among others. */ +void openclFunctionGPUPlusCPU(const std::string& firstFile, const std::string& secondFile, const std::string& outputFile) { + using namespace tbb::flow; + typedef opencl_buffer OpenclImageBuffer; + typedef std::array NDRange; + typedef tuple< OpenclImageBuffer, cl_uint, NDRange > OpenclImageTuple; + typedef tuple< OpenclImageBuffer, OpenclImageBuffer, cl_uint, NDRange > OpenclImagesMergeTuple; + typedef tuple< OpenclImageBuffer, NDRange > WriteImageBufferTuple; + + graph g; + + gpu_device_selector gpu_selector; + + function_node< std::string, OpenclImageTuple > fileReaderOne(g, serial, [&g](const std::string& fileToRead) -> OpenclImageTuple { + utils::image_buffer src = utils::getOrGenerateImage(fileToRead); + + // Create and initialize opencl_buffer in order to pass it to mergeImages kernel + OpenclImageBuffer oclImage(src.buffer->size()); + fillOpenclBuffer(oclImage, *src.buffer); + + NDRange rangeList = { src.width, src.height }; + return std::make_tuple(oclImage, src.width, rangeList); + }); + + function_node< std::string, utils::image_buffer > fileReaderTwo(g, serial, [](const std::string& fileToRead) -> utils::image_buffer { + return utils::readPNGImage(fileToRead); + }); + + split_node< OpenclImageTuple > splitArgumentsLeftNode(g); + + // Kernel should be in the current folder + opencl_program<> program("imageEffects.cl"); + + opencl_node< OpenclImageTuple > leftImageEffect(g, program.get_kernel("applyLeftImageEffect"), gpu_selector); + + function_node< utils::image_buffer, OpenclImageBuffer > rightImageEffect(g, unlimited, [&g](utils::image_buffer image) -> OpenclImageBuffer { + applyRightImageEffect(image); + + // Create and initialize opencl_buffer in order to pass it to kernel + OpenclImageBuffer oclImage(image.buffer->size()); + fillOpenclBuffer(oclImage, *image.buffer); + + return oclImage; + }); + + opencl_node< OpenclImagesMergeTuple > mergeImages(g, program.get_kernel("mergeImages"), gpu_selector); + + join_node< WriteImageBufferTuple > joinTupleNode(g); + + function_node< WriteImageBufferTuple > outputWriter(g, unlimited, [&outputFile](const WriteImageBufferTuple& image) { + // The result image have to be copied in order to be changed, + // the second parameter - image size, can be taken by const reference + OpenclImageBuffer imageBuffer = std::get<0>(image); + const NDRange& imageSize = std::get<1>(image); + unsigned int width = imageSize[0]; + unsigned int height = imageSize[1]; + + utils::writePNGImage(imageBuffer.data(), width, height, outputFile); + }); + + // Process left image on GPU + make_edge(fileReaderOne, splitArgumentsLeftNode); + make_edge(output_port<0>(splitArgumentsLeftNode), input_port<0>(leftImageEffect)); + make_edge(output_port<1>(splitArgumentsLeftNode), input_port<1>(leftImageEffect)); + + // Pass OpenCL NDRange via input port because it depends on input data + make_edge(output_port<2>(splitArgumentsLeftNode), input_port<2>(leftImageEffect)); + + // Process right image on CPU + make_edge(fileReaderTwo, rightImageEffect); + + // Merge images on GPU + make_edge(output_port<0>(leftImageEffect), input_port<0>(mergeImages)); + make_edge(rightImageEffect, input_port<1>(mergeImages)); + make_edge(output_port<1>(leftImageEffect), input_port<2>(mergeImages)); + + // Pass OpenCL NDRange via input port because it depends on input data + make_edge(output_port<2>(leftImageEffect), input_port<3>(mergeImages)); + + // Write image to PNG + make_edge(output_port<0>(mergeImages), input_port<0>(joinTupleNode)); + make_edge(output_port<3>(mergeImages), input_port<1>(joinTupleNode)); + make_edge(joinTupleNode, outputWriter); + + // Define where to get ndrange and kernel arguments + leftImageEffect.set_args(port_ref<0, 1>()); + leftImageEffect.set_range(port_ref<2>()); + + mergeImages.set_args(port_ref<0, 2>()); + mergeImages.set_range(port_ref<3>()); + + // Start graph image processing pipeline + fileReaderOne.try_put(firstFile); + fileReaderTwo.try_put(secondFile); + + g.wait_for_all(); +} + + +int main(int argc, char* argv[]) { + try { + + tbb::tick_count mainStartTime = tbb::tick_count::now(); + + bool verbose = false; + std::string algVersion; + + std::string inputFileFirst; + std::string inputFileSecond; + std::string outputFile = "output.png"; + + utility::parse_cli_arguments(argc, argv, + utility::cli_argument_pack() + //"-h" option for displaying help + .arg(verbose, "-v", "verbose mode") + .arg(algVersion, "-alg", "name of the used pipeline realisation - can be host, target (default) or host_target") + .positional_arg(inputFileFirst, "first_filename", "first input file name") + .positional_arg(inputFileSecond, "second_filename", "second input file name") + ); + + if (!utils::isBothImagesExists(inputFileFirst, inputFileSecond)) { + std::cout << "Info: one or both images does not exists or empty. Input images will be generated instead." << std::endl; + inputFileFirst.clear(); + inputFileSecond.clear(); + } else { + std::cout << "First input file name: " << inputFileFirst << std::endl; + std::cout << "Second input file name: " << inputFileSecond << std::endl; + } + + if (algVersion.empty() || algVersion == "target") { + openclFunctionGPU(inputFileFirst, inputFileSecond, outputFile); + } else if (algVersion == "host_target") { + openclFunctionGPUPlusCPU(inputFileFirst, inputFileSecond, outputFile); + } else if (algVersion == "host") { + hostFunction(inputFileFirst, inputFileSecond, outputFile); + } + + utility::report_elapsed_time((tbb::tick_count::now() - mainStartTime).seconds()); + + return 0; + } catch (std::exception& e) { + std::cerr << "Error occurred :\"" << e.what() << "\"\n"; + return -1; + } +} +#else +int main() { + utility::report_skipped(); + return 0; +} +#endif /* __TBB_PREVIEW_OPENCL_NODE && __TBB_CPP11_LAMBDAS_PRESENT */ diff --git a/examples/graph/stereo/utils.h b/examples/graph/stereo/utils.h new file mode 100644 index 0000000..ae199aa --- /dev/null +++ b/examples/graph/stereo/utils.h @@ -0,0 +1,104 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include +#include + +#include "lodepng.h" + +namespace utils { + + struct image_buffer { + unsigned int width, height; + std::shared_ptr< std::vector > buffer; // smart pointer to the vector of raw pixels in RGBA format, 4 bytes per pixel + }; + + image_buffer readPNGImage(const std::string& imageName) { + image_buffer image; + image.buffer = std::make_shared< std::vector >(); + + unsigned int error = lodepng::decode(*image.buffer, image.width, image.height, imageName.c_str()); + + if (error) { + std::string exceptionMessage = "decoder error: " + std::string(lodepng_error_text(error)); + throw std::runtime_error(exceptionMessage); + } + return image; + } + + void readPNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const char* imageName) { + unsigned int error = lodepng_decode32_file(&imageBuffer, &width, &height, imageName); + + if (error) { + std::string exceptionMessage = "decoder error: " + std::string(lodepng_error_text(error)); + throw std::runtime_error(exceptionMessage); + } + } + + void writePNGImage(const image_buffer& image, const std::string& outputFile) { + unsigned int error = lodepng::encode(outputFile, *image.buffer, image.width, image.height); + if (error) { + std::string exceptionMessage = "encoder error: " + std::string(lodepng_error_text(error)); + throw std::runtime_error(exceptionMessage); + } + } + + void writePNGImage(unsigned char* imageBuffer, unsigned int& width, unsigned int& height, const std::string& outputFile) { + unsigned int error = lodepng::encode(outputFile, imageBuffer, width, height); + if (error) { + std::string exceptionMessage = "encoder error: " + std::string(lodepng_error_text(error)); + throw std::runtime_error(exceptionMessage); + } + } + + image_buffer generatePNGImage() { + image_buffer image; + image.width = 1024; + image.height = 1024; + + image.buffer = std::make_shared< std::vector >(image.width * image.height * 4); + std::vector& buffer = *image.buffer; + + const int widthOffset = 4 * image.width; + for (unsigned y = 0; y < image.height; y++) { + for (unsigned x = 0; x < image.width; x++) { + const int pixelOffset = widthOffset * y + 4 * x; + buffer[pixelOffset] = 200 * !(x & y); + buffer[pixelOffset + 1] = x ^ y; + buffer[pixelOffset + 2] = x | y; + buffer[pixelOffset + 3] = 255; + } + } + return image; + } + + bool isFileExist(const std::string& fileName) { + std::ifstream file(fileName); + return file.good(); + } + + bool isBothImagesExists(const std::string& firstFile, const std::string& secondFile) { + return isFileExist(firstFile) && isFileExist(secondFile); + } + + image_buffer getOrGenerateImage(const std::string& fileName) { + return fileName.empty() ? generatePNGImage() : readPNGImage(fileName); + } +} diff --git a/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj b/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..865a22e --- /dev/null +++ b/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj @@ -0,0 +1,321 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; }; + 0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; }; + 8415B6821CFC8B7F00A875B5 /* stereo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6801CFC8B7F00A875B5 /* stereo.cpp */; }; + 8415B6881CFC8B9200A875B5 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6851CFC8B9200A875B5 /* lodepng.cpp */; }; + 8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8415B6891CFC96D900A875B5 /* OpenCL.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + 0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; + 8415B6801CFC8B7F00A875B5 /* stereo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stereo.cpp; path = ../stereo.cpp; sourceTree = ""; }; + 8415B6811CFC8B7F00A875B5 /* utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = utils.hpp; path = ../utils.hpp; sourceTree = ""; }; + 8415B6831CFC8B9200A875B5 /* imageEffects.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; name = imageEffects.cl; path = ../imageEffects.cl; sourceTree = ""; }; + 8415B6841CFC8B9200A875B5 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = index.html; path = ../index.html; sourceTree = ""; }; + 8415B6851CFC8B9200A875B5 /* lodepng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lodepng.cpp; path = ../lodepng.cpp; sourceTree = ""; }; + 8415B6861CFC8B9200A875B5 /* lodepng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lodepng.h; path = ../lodepng.h; sourceTree = ""; }; + 8415B6891CFC96D900A875B5 /* OpenCL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenCL.framework; path = System/Library/Frameworks/OpenCL.framework; sourceTree = SDKROOT; }; + 8DD76F6C0486A84900D96B5E /* Stereo */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Stereo; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */, + 0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* Stereo */ = { + isa = PBXGroup; + children = ( + 8415B6891CFC96D900A875B5 /* OpenCL.framework */, + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = Stereo; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 8415B6831CFC8B9200A875B5 /* imageEffects.cl */, + 8415B6841CFC8B9200A875B5 /* index.html */, + 8415B6851CFC8B9200A875B5 /* lodepng.cpp */, + 8415B6861CFC8B9200A875B5 /* lodepng.h */, + 8415B6801CFC8B7F00A875B5 /* stereo.cpp */, + 8415B6811CFC8B7F00A875B5 /* utils.hpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* Stereo */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* Stereo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Stereo" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Stereo; + productInstallPath = "$(HOME)/bin"; + productName = Stereo; + productReference = 8DD76F6C0486A84900D96B5E /* Stereo */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "stereo" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* Stereo */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* Stereo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8415B6881CFC8B9200A875B5 /* lodepng.cpp in Sources */, + 8415B6821CFC8B7F00A875B5 /* stereo.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Stereo; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Stereo; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Stereo; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = Stereo; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Stereo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "stereo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000..5c619d7 --- /dev/null +++ b/examples/index.html @@ -0,0 +1,575 @@ + + + + + + Intel® Threading Building Blocks Samples + + + + + +

+ This directory includes example usages of Intel® Threading Building Blocks (Intel® TBB). +

+ +
+
System Requirements:
+ +
+

+ For the most up to date system requirements, see the release notes. +

+
+
+ +
+
Directories
+ +
+
+
GettingStarted +
Examples from the Intel TBB Getting Started Guide. +
concurrent_hash_map +
Examples using concurrent_hash_map container. +
concurrent_priority_queue +
Examples using concurrent_priority_queue container. +
graph +
Examples using Intel TBB Flow Graph feature. +
parallel_do +
Examples using parallel_do algorithm. +
parallel_for +
Examples using parallel_for algorithm. +
parallel_reduce +
Examples using parallel_reduce algorithm. +
pipeline +
Examples using pipeline algorithm. +
task +
Examples using raw task interface. +
task_group +
Examples using task_group interface. +
task_arena +
Examples using the task_arena feature. +
test_all +
Examples that test various components of Intel TBB. +
common +
Common files for building various examples. Should not be used directly. But if you copy an example to other place this folder should be copied also and should have the same relative path for copied example. +
+
+
+ +
+
Build Instructions
+ +
+
+
+ Note: Some of the following directions refer to a shell window. This refers + to the command prompt environment/window normally used on your system: +
    +
  • cmd.exe command prompt window for Windows* systems +
  • sh, bash, csh, ksh, etc. (or compatible) shell window for Windows*, Linux* or macOS* systems +
+
+

+ Set up the environment for using Intel TBB: +

+
To set up the environment for Windows* OS:
+ +
+ +

+ It is strongly recommended to set up the environment when installing Intel TBB. + Do this by selecting the appropriate check-box during the install. However, if the environment is not set up + during installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version, + it may be set up, for a given type of shell window, by using one of the following commands: +

+
+
For cmd.exe (command prompt): +
+
+<installdir>/bin/tbbvars.bat (arch) [vs]
+					
+
where: +
+
  • (arch) argument represents target architecture. Its possible values are 'ia32' or 'intel64'. +
  • [vs] argument represents target version of Microsoft* Visual Studio*. Its possible values are: +
      +
    • 'vs<msvs_version>' - to use TBB with Microsoft* Visual Studio* <msvs_version> runtime DLLs, e.g.: tbbvars intel64 vs2015 +
      Note: for the most up to date supported versions of Microsoft* Visual Studio*, see the release notes. +
    • 'all' - to use TBB statically linked with Microsoft Visual C++ runtime. +
      If [vs] is not set the 'all' value will be used by default. +
    +
  • +
    +
    +
    To set up the environment for Linux* OS and macOS*:
    + +
    +

    + The environment may be set up, for a given type of shell window, by using one of the following commands: +

    +
    +
    For sh, bash, ksh, dash (or compatibles): +
    +
    +. <installdir>/bin/tbbvars.sh (arch) [platform [TBBROOT_detection_mode]]
    +				
    +
    For csh (or compatibles): +
    +
    +source <installdir>/bin/tbbvars.csh (arch) [platform [TBBROOT_detection_mode]]
    +				
    +
    where: +
    +
  • (arch) argument represents target architecture. Its possible values are 'ia32' or 'intel64'. +
  • [platform] argument represents target platform. Its possible values are 'linux' or 'android'. +
  • [TBBROOT_detection_mode] argument represents TBBROOT path detection method. Its only possible value is 'auto_tbbroot'. In this case the environment variable TBBROOT is detected automatically by using the tbbvars script directory path. +
  • + Environment setup need only be performed once per shell window to be used. +
    Always source tbbvars.sh or tbbvars.csh rather than executing them directly. +
    If the arguments to the sourced script are ignored (consult documentation for your shell) the alternative way to specify target is environment variables COMPILERVARS_ARCHITECTURE to pass (arch) to the script and COMPILERVARS_PLATFORM to pass [platform]. + +
    +

    + Build each example by using one of the following methods: +

    +
    To build by using a Microsoft* Visual Studio* project (Windows* systems):
    + +
    +
      +
    1. Identify the solution (*.sln) file for the example you wish to build and run. The *.sln file for each example is in the example's msvs sub-directory. +
    2. Open the project by using one of the following methods: +
        +
      • Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser. Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.
      • +
      • Invoke Microsoft* Visual Studio* from the Start menu and use the "Open Project" dialog to navigate to and open the project.
      • +
      +
    3. +
    4. Press <ctrl-F5> to build and run the example.
    5. +
    6. If you copied an example to another place separately from libraries you need to + set %TBBROOT% variable pointing to <installdir> folder.
    7. +
    +
    +
    +
    To build by using a Xcode* IDE project (macOS* systems):
    + +
    +
    +
    + Note: Xcode* project instructions are not applicable for the Intel TBB Sample Bundle for Intel® System Studio + because Intel System Studio does not support macOS*. For additional information, see the + Release Notes. +
    +
      +
    1. Identify the project (*.xcodeproj) file for the example you wish to build and run. The *.xcodeproj file is in the example's xcode sub-directory.
    2. +
    3. Open the project by using one of the following methods: +
        +
      • Navigate to the *.xcodeproj file by using the Finder.Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.
      • +
      • Invoke the Xcode* IDE and use the "File -> Open" dialog to navigate to and open the project.
      • +
      +
    4. +
    5. Press <Apple-R>, or press the "Build and Go" button in the toolbox, to build and run the example. +
    6. +
    +
    +
    +
    To build by using a Makefile (Windows*, Linux* or macOS* systems):
    + +
    +
      +
    1. Open a shell window +
        +
      • For Windows* systems, make sure this shell window has the proper environment + defined for use with Microsoft* Visual Studio*. Such shell can be invoked from the Start menu, under Microsoft* Visual Studio*, Microsoft* Visual Studio Tools*, Microsoft* Visual Studio* Command Prompt.
      • +
      +
    2. Set up the environment in this shell window for use with Intel TBB. +
      See above for how to set up the environment for Windows*, Linux* or macOS* systems. +
    3. Unless you installed Intel TBB yourself, you may not have write permissions to the directory + containing the example. In this case, make a copy of the example, and use the copy for the following steps. +
    4. In the shell window, navigate to the directory for the example + (or to the directory for the copy of the example if you made one in the previous step). +
    5. Use one or more of the following commands to build and run the example. + Here, make refers to the make command normally used on your system: this could be + nmake, gmake, or make on Windows* systems, or make or gmake on Linux* or macOS* systems. +
      +
      make +
      Default build and run. Equivalent to 'make release test'. +
      make release +
      Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example. +
      make debug +
      Compile and link against the debug version of Intel TBB runtime library. The resulting executable is left in the directory for the example. +
      make test +
      Run an executable previously produced by one of the above commands. +
      make [(above options or targets)] CXX={icl, icc} +
      Build and run as above, but use Intel® C++ Compiler instead of default, native compilers (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or macOS* systems). +
      make [(above options or targets)] offload=mic +
      Build and run the offload version of an example for Intel® Many Integrated Core (Intel® MIC) Architecture. +
      +
      + Note: Only Intel® MIC Architecture with Linux* based host is currently supported. +
      +
      make clean +
      Remove any executables or intermediate files produced by the above commands. +
      +
    +
    +
    +
    +
    + +
    + Up to parent directory (available only in the Intel® Parallel Studio and Intel® System Studio Online Samples packages and the open-source version of Intel TBB) +
    +
    +
    Legal Information:
    + +
    +
    +
    + + + + + + + + + + + + +
    +

    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 +

    +
    +
    + +

    + Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
    * Other names and brands may be claimed as the property of others. +
    © 2017, Intel Corporation +

    +
    +
    + + + \ No newline at end of file diff --git a/examples/parallel_do/index.html b/examples/parallel_do/index.html new file mode 100644 index 0000000..cd8d079 --- /dev/null +++ b/examples/parallel_do/index.html @@ -0,0 +1,344 @@ + + + + + + Intel® Threading Building Blocks. Samples on parallel_do algorithm + + + + + +

    + This directory has examples of the parallel_do algorithm. +

    + +
    +
    Directories
    + +
    +
    +
    parallel_preorder +
    Parallel preorder traversal of a graph. +
    +
    +
    +
    + Up to parent directory +
    +
    +
    Legal Information:
    + +
    +

    + Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
    * Other names and brands may be claimed as the property of others. +
    © 2017, Intel Corporation +

    +
    +
    + + + diff --git a/examples/parallel_do/parallel_preorder/Graph.cpp b/examples/parallel_do/parallel_preorder/Graph.cpp new file mode 100644 index 0000000..12f17dc --- /dev/null +++ b/examples/parallel_do/parallel_preorder/Graph.cpp @@ -0,0 +1,101 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include +#include "Graph.h" +#include + +using namespace std; + +void Graph::create_random_dag( size_t number_of_nodes ) { + my_vertex_set.resize(number_of_nodes); + for( size_t k=0; k>8)%5u); + if( op>int(k) ) op = int(k); + switch( op ) { + default: + c.op = OP_VALUE; + c.value = Cell::value_type((float)k); + break; + case 1: + c.op = OP_NEGATE; + break; + case 2: + c.op = OP_SUB; + break; + case 3: + c.op = OP_ADD; + break; + case 4: + c.op = OP_MUL; + break; + } + for( int j=0; j& root_set ) { + for( size_t k=0; ksuccessor.push_back(&c); + } + if( ArityOfOp[c.op]==0 ) + root_set.push_back(&my_vertex_set[k]); + } +} + +void Cell::update() { + switch( op ) { + case OP_VALUE: + break; + case OP_NEGATE: + value = -(input[0]->value); + break; + case OP_ADD: + value = input[0]->value + input[1]->value; + break; + case OP_SUB: + value = input[0]->value - input[1]->value; + break; + case OP_MUL: + value = input[0]->value * input[1]->value; + break; + } +} + diff --git a/examples/parallel_do/parallel_preorder/Graph.h b/examples/parallel_do/parallel_preorder/Graph.h new file mode 100644 index 0000000..13b36d2 --- /dev/null +++ b/examples/parallel_do/parallel_preorder/Graph.h @@ -0,0 +1,80 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "Matrix.h" +#include "tbb/atomic.h" +#include + +enum OpKind { + // Use Cell's value + OP_VALUE, + // Unary negation + OP_NEGATE, + // Addition + OP_ADD, + // Subtraction + OP_SUB, + // Multiplication + OP_MUL +}; + +static const int ArityOfOp[] = {0,1,2,2,2}; + +class Cell { +public: + //! Operation for this cell + OpKind op; + + //! Inputs to this cell + Cell* input[2]; + + //! Type of value stored in a Cell + typedef Matrix value_type; + + //! Value associated with this Cell + value_type value; + + //! Set of cells that use this Cell as an input + std::vector successor; + + //! Reference count of number of inputs that are not yet updated. + tbb::atomic ref_count; + + //! Update the Cell's value. + void update(); + + //! Default constructor + Cell() {} +}; + +//! A directed graph where the vertices are Cells. +class Graph { + std::vector my_vertex_set; +public: + //! Create a random acyclic directed graph + void create_random_dag( size_t number_of_nodes ); + + //! Print the graph + void print(); + + //! Get set of cells that have no inputs. + void get_root_set( std::vector& root_set ); +}; + diff --git a/examples/parallel_do/parallel_preorder/Makefile b/examples/parallel_do/parallel_preorder/Makefile new file mode 100644 index 0000000..a2fc8c4 --- /dev/null +++ b/examples/parallel_do/parallel_preorder/Makefile @@ -0,0 +1,63 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=parallel_preorder +ARGS= +PERF_RUN_ARGS=auto silent 500000 100 +LIGHT_ARGS=1:auto:+4 n-of-traversals=50 + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: *.cpp + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) + +debug: *.cpp + $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) + +clean: + $(RM) $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) + +light_test: + $(run_cmd) ./$(PROG) $(LIGHT_ARGS) + +perf_build: release + +perf_run: + $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) + diff --git a/examples/parallel_do/parallel_preorder/Makefile.windows b/examples/parallel_do/parallel_preorder/Makefile.windows new file mode 100644 index 0000000..5c554e9 --- /dev/null +++ b/examples/parallel_do/parallel_preorder/Makefile.windows @@ -0,0 +1,54 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=Parallel_Preorder +ARGS= +PERF_RUN_ARGS=auto silent 500000 100 +LIGHT_ARGS=1:auto:+4 n-of-traversals=50 + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test +release: compiler_check + $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: compiler_check + $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +light_test: + $(PROG) $(LIGHT_ARGS) +compiler_check: + @echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + @cmd.exe /C del compiler_test + +perf_build: release + +perf_run: + $(PROG) $(PERF_RUN_ARGS) diff --git a/examples/parallel_do/parallel_preorder/Matrix.h b/examples/parallel_do/parallel_preorder/Matrix.h new file mode 100644 index 0000000..b9fb938 --- /dev/null +++ b/examples/parallel_do/parallel_preorder/Matrix.h @@ -0,0 +1,60 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +class Matrix { + static const int n = 20; + float array[n][n]; +public: + Matrix() {} + Matrix( float z ) { + for( int i=0; i +#include "tbb/task_scheduler_init.h" +#include "tbb/tick_count.h" +#include "../../common/utility/utility.h" +#include +#include +#include "Graph.h" + +// some forward declarations +class Cell; +void ParallelPreorderTraversal( const std::vector& root_set ); + +//------------------------------------------------------------------------ +// Test driver +//------------------------------------------------------------------------ +utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads); +static unsigned nodes = 1000; +static unsigned traversals = 500; +static bool SilentFlag = false; + +//! Parse the command line. +static void ParseCommandLine( int argc, const char* argv[] ) { + utility::parse_cli_arguments( + argc,argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + .positional_arg(threads,"n-of-threads",utility::thread_number_range_desc) + .positional_arg(nodes,"n-of-nodes","number of nodes in the graph.") + .positional_arg(traversals,"n-of-traversals","number of times to evaluate the graph. Reduce it (e.g. to 100) to shorten example run time\n") + .arg(SilentFlag,"silent","no output except elapsed time ") + ); +} + +int main( int argc, const char* argv[] ) { + try { + tbb::tick_count main_start = tbb::tick_count::now(); + ParseCommandLine(argc,argv); + + // Start scheduler with given number of threads. + for( int p=threads.first; p<=threads.last; p = threads.step(p) ) { + tbb::tick_count t0 = tbb::tick_count::now(); + tbb::task_scheduler_init init(p); + srand(2); + size_t root_set_size = 0; + { + Graph g; + g.create_random_dag(nodes); + std::vector root_set; + g.get_root_set(root_set); + root_set_size = root_set.size(); + for( unsigned int trial=0; trial + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + parallel_preorder + {3AA40693-F93D-4D4B-B32E-068F511A252B} + parallel_preorder + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_do/parallel_preorder/parallel_preorder.cpp b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp new file mode 100644 index 0000000..f8ce1c5 --- /dev/null +++ b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp @@ -0,0 +1,56 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "tbb/parallel_do.h" +#include +#include +#include "Graph.h" + + +class Body { +public: + Body() {}; + + //------------------------------------------------------------------------ + // Following signatures are required by parallel_do + //------------------------------------------------------------------------ + typedef Cell* argument_type; + + void operator()( Cell* c, tbb::parallel_do_feeder& feeder ) const { + c->update(); + // Restore ref_count in preparation for subsequent traversal. + c->ref_count = ArityOfOp[c->op]; + for( size_t k=0; ksuccessor.size(); ++k ) { + Cell* successor = c->successor[k]; + // ref_count is used for inter-task synchronization. + // Correctness checking tools might not take this into account, and report + // data races between different tasks, that are actually synchronized. + if( 0 == --(successor->ref_count) ) { + feeder.add( successor ); + } + } + } +}; + +void ParallelPreorderTraversal( const std::vector& root_set ) { + tbb::parallel_do(root_set.begin(), root_set.end(),Body()); +} + + diff --git a/examples/parallel_do/parallel_preorder/readme.html b/examples/parallel_do/parallel_preorder/readme.html new file mode 100644 index 0000000..727e56a --- /dev/null +++ b/examples/parallel_do/parallel_preorder/readme.html @@ -0,0 +1,444 @@ + + + + + + Intel® Threading Building Blocks. Parallel_preorder sample + + + + + +

    + Example that uses parallel_do to do parallel preorder traversal of a sparse graph. +

    + Each vertex in the graph is called a "cell". + Each cell has a value. + The value is a matrix. + Some of the cells have operators + that compute the cell's value, using other cell's values as input. + A cell that uses the value of cell x is called a successor of x. +

    + The algorithm works as follows. +

      +
    1. Compute the set of cells that have no inputs. This set is called root_set. +
    2. Each cell has an associated field ref_count that is an atomic integer. + Initialize ref_count to the number of inputs for the Cell. +
    3. Update each cell in root_set, by applying a parallel_do to a root_set +
    4. After updating a cell, for each of its successors +
        +
      1. Atomically decrement the successor's ref_count +
      2. If the count became zero, add the cell to the set of cells to be updated, + by calling parallel_do_feeder_impl::add. +
      +
    + The times printed are for the traversal and update, + and do not include time for computing the root_set. +

    + The example is using custom synchronization via ref_count atomic variable. + Correctness checking tools might not take this into account, and report data races + between different tasks that are actually synchronized. +

    + Note: It is important to understand that this example is unlikely to show speedup + if the cell values are changed to type "float". The reason is twofold. +
      +
    • The smaller value type causes each Cell to be significantly smaller than a cache line, + which leads to false sharing conflicts. +
    • The time to update the cells becomes very small, and consequently the overhead of + parallel_do swamps the useful work. +
    +

    + +
    +
    System Requirements
    + +
    +

    + For the most up to date system requirements, see the release notes. +

    +
    +
    + +
    +
    Files
    + +
    +
    +
    main.cpp +
    Main program which parses command line options and runs the algorithm with different numbers of threads. +
    parallel_preorder.cpp +
    Implementation of the parallel preorder traversal algorithm. +
    Graph.h +
    Interfaces of the Graph and Cell classes. +
    Graph.cpp +
    Implementations of the Graph and Cell classes. +
    Matrix.h +
    The Matrix class definition. +
    Makefile +
    Makefile for building the example. +
    +
    +
    + +
    +
    Directories
    + +
    +
    +
    msvs +
    Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
    xcode +
    Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
    +

    For information about the minimum supported version of IDE, see release notes.

    +
    +
    + +
    +
    Build instructions
    + +
    +

    General build directions can be found here.

    +
    +
    + +
    +
    Usage
    + +
    +
    +
    parallel_preorder -h +
    Prints the help for command line options +
    parallel_preorder [n-of-threads=value] [n-of-nodes=value] [n-of-traversals=value] [silent] +
    parallel_preorder [n-of-threads [n-of-nodes [n-of-traversals]]] [silent] +
    n-of-threads is the number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.
    + n-of-nodes is a number of nodes in the graph. Default value is 1000.
    + n-of-traversals is the number of times to evaluate the graph. Default value is 500.
    + silent - no output except elapsed time.
    +
    To run a short version of this example, e.g., for use with Intel® Parallel Inspector: +
    Build a debug version of the example + (see the build instructions). +
    Run it with the desired number of threads and smaller number of traversals, e.g., parallel_preorder 4 1000 5. +
    +
    +
    + +
    + Up to parent directory +
    +
    +
    Legal Information
    + +
    +

    + Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
    * Other names and brands may be claimed as the property of others. +
    © 2017, Intel Corporation +

    +
    +
    + + + diff --git a/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6773133 --- /dev/null +++ b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj @@ -0,0 +1,317 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; }; + 05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + EAD808FA13051AB300FE8C7C /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAD808F913051AB300FE8C7C /* main.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 05593AA40B8F55D500DE73AB /* Graph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Graph.cpp; path = ../Graph.cpp; sourceTree = SOURCE_ROOT; }; + 05593AA50B8F55D500DE73AB /* Graph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Graph.h; path = ../Graph.h; sourceTree = SOURCE_ROOT; }; + 05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; }; + 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; }; + 8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; + EAD808F913051AB300FE8C7C /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* parallel_preorder */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = parallel_preorder; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + EAD808F913051AB300FE8C7C /* main.cpp */, + 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */, + 05593AA40B8F55D500DE73AB /* Graph.cpp */, + 05593AA50B8F55D500DE73AB /* Graph.h */, + 05593AA60B8F55D500DE73AB /* Matrix.h */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* parallel_preorder */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* parallel_preorder */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = parallel_preorder; + productInstallPath = "$(HOME)/bin"; + productName = parallel_preorder; + productReference = 8DD76F6C0486A84900D96B5E /* parallel_preorder */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* parallel_preorder */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* parallel_preorder */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */, + 05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */, + EAD808FA13051AB300FE8C7C /* main.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = parallel_preorder; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = parallel_preorder; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = parallel_preorder; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = parallel_preorder; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/parallel_for/game_of_life/Makefile b/examples/parallel_for/game_of_life/Makefile new file mode 100644 index 0000000..12768b3 --- /dev/null +++ b/examples/parallel_for/game_of_life/Makefile @@ -0,0 +1,53 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +run_cmd= +PROG=game_of_life +ARGS=2:4 -t 5 +LIGHT_ARGS=1:2 -t 5 +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +ifeq ($(shell uname), Linux) +ifeq ($(target), android) +LIBS+= --sysroot=$(SYSROOT) +run_cmd=../../common/android.linux.launcher.sh +else +LIBS+= -lrt +endif +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +release: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp + $(CXX) -O2 -DNDEBUG -D_CONSOLE $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS) + +debug: src/Evolution.cpp src/Update_state.cpp src/Game_of_life.cpp + $(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) + +clean: + rm -f $(PROG) *.o *.d + +test: + $(run_cmd) ./$(PROG) $(ARGS) +light_test: + $(run_cmd) ./$(PROG) $(LIGHT_ARGS) diff --git a/examples/parallel_for/game_of_life/Makefile.windows b/examples/parallel_for/game_of_life/Makefile.windows new file mode 100644 index 0000000..f3a3083 --- /dev/null +++ b/examples/parallel_for/game_of_life/Makefile.windows @@ -0,0 +1,46 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=game_of_life +ARGS=2:4 -t 5 +LIGHT_ARGS=1:2 -t 5 + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options +MYCXXFLAGS = /TP /EHsc /W3 /nologo /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS) +MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS) + +all: release test +release: + $(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +debug: + $(CXX) ./src/Evolution.cpp ./src/Game_of_life.cpp ./src/Update_state.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest +test: + $(PROG) $(ARGS) +light_test: + $(PROG) $(LIGHT_ARGS) + diff --git a/examples/parallel_for/game_of_life/msvs/Game_of_life.sln b/examples/parallel_for/game_of_life/msvs/Game_of_life.sln new file mode 100644 index 0000000..97acd9e --- /dev/null +++ b/examples/parallel_for/game_of_life/msvs/Game_of_life.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game of Life", "Game_of_life.vcxproj", "{731C7E2E-2766-41D9-96FC-0A3548973803}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug(console)|Win32 = Debug(console)|Win32 + Debug(console)|x64 = Debug(console)|x64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release(console)|Win32 = Release(console)|Win32 + Release(console)|x64 = Release(console)|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.ActiveCfg = Debug(console)|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|Win32.Build.0 = Debug(console)|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.ActiveCfg = Debug(console)|x64 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug(console)|x64.Build.0 = Debug(console)|x64 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.ActiveCfg = Debug|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|Win32.Build.0 = Debug|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.ActiveCfg = Debug|x64 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Debug|x64.Build.0 = Debug|x64 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.ActiveCfg = Release(console)|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|Win32.Build.0 = Release(console)|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.ActiveCfg = Release(console)|x64 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release(console)|x64.Build.0 = Release(console)|x64 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.ActiveCfg = Release|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|Win32.Build.0 = Release|Win32 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.ActiveCfg = Release|x64 + {731C7E2E-2766-41D9-96FC-0A3548973803}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj b/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj new file mode 100644 index 0000000..1a6c3ad --- /dev/null +++ b/examples/parallel_for/game_of_life/msvs/Game_of_life.vcxproj @@ -0,0 +1,451 @@ + + + + + Debug(console) + Win32 + + + Debug(console) + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release(console) + Win32 + + + Release(console) + x64 + + + Release + Win32 + + + Release + x64 + + + + Game of Life + {731C7E2E-2766-41D9-96FC-0A3548973803} + Game_of_life + ManagedCProj + + + + Application + MultiByte + false + v120 + + + Application + MultiByte + false + v120 + + + Application + Unicode + true + true + v120 + + + Application + Unicode + true + false + v120 + + + Application + MultiByte + false + v120 + + + Application + MultiByte + false + v120 + + + Application + Unicode + true + true + v120 + + + Application + Unicode + true + false + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + true + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + true + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_DEBUG;USE_SSE;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + false + Level2 + ProgramDatabase + + + tbb_debug.lib;user32.lib + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + true + Windows + main + MachineX86 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + + false + Level2 + ProgramDatabase + + + tbb_debug.lib;user32.lib + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + true + Windows + main + MachineX64 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + -S -03 + %(AdditionalOptions) + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + ProgramDatabase + + + tbb.lib;user32.lib + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + main + MachineX86 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + -S -03 + %(AdditionalOptions) + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + ProgramDatabase + + + tbb.lib;user32.lib + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + main + MachineX64 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + + + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions) + Sync + MultiThreadedDebugDLL + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + $(TargetDir)$(TargetName).pdb + Console + MachineX86 + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + + + + + X64 + + + Disabled + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + Sync + MultiThreadedDebugDLL + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + $(TargetDir)$(TargetName).pdb + Console + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + + + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions) + MultiThreadedDLL + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + + + + + X64 + + + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;USE_SSE;%(PreprocessorDefinitions) + MultiThreadedDLL + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Console + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + true + true + + + true + true + + + true + true + + + true + true + + + true + true + + + + + true + true + true + true + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_for/game_of_life/msvs/app.ico b/examples/parallel_for/game_of_life/msvs/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/examples/parallel_for/game_of_life/msvs/app.rc b/examples/parallel_for/game_of_life/msvs/app.rc new file mode 100644 index 0000000..807aa89 --- /dev/null +++ b/examples/parallel_for/game_of_life/msvs/app.rc @@ -0,0 +1,63 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon placed first or with lowest ID value becomes application icon + +LANGUAGE 9, 1 +#pragma code_page(1252) +1 ICON "app.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/examples/parallel_for/game_of_life/msvs/resource.h b/examples/parallel_for/game_of_life/msvs/resource.h new file mode 100644 index 0000000..ed5152c --- /dev/null +++ b/examples/parallel_for/game_of_life/msvs/resource.h @@ -0,0 +1,23 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff --git a/examples/parallel_for/game_of_life/readme.html b/examples/parallel_for/game_of_life/readme.html new file mode 100644 index 0000000..394bfa7 --- /dev/null +++ b/examples/parallel_for/game_of_life/readme.html @@ -0,0 +1,392 @@ + + + + + + Intel® Threading Building Blocks. Game_of_life sample + + + + + +

    + The "Game of life" example demonstrates interoperability of Intel® Threading Building Blocks (Intel® TBB) + and Microsoft* .NET*. +

    + This program runs 2 simultaneous instances of the classic Conway's "Game of Life". + One of these instances uses serial calculations to update the board. The other one calculates in parallel with Intel TBB. + The visualization is written in managed C++ and uses .NET CLR. +

    + +
    +
    System Requirements
    + +
    +

    + For the most up to date system requirements, see the release notes. +

    +
    +
    + +
    +
    Files
    + +
    +
    +
    Form1.h, Board.h +
    Header files for GUI classes. +
    Evolution.h, Evolution.cpp +
    Contain class hierarchy to implement game evolution in serial and parallel. +
    Update_state.cpp +
    Implements 2 approaches for calculating steps in the program: with the use of SSE intrinsics, and ordinary C++ code. +
    Game_of_life.cpp +
    Contains program entry point and other source not related to logical structure of the example. +
    Makefile +
    Makefile for building the example. +
    +
    +
    + +
    +
    Directories
    + +
    +
    +
    src +
    Contains source files mentioned above. +
    msvs +
    Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
    xcode +
    Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
    +

    For information about the minimum supported version of IDE, see release notes.

    +
    +
    + +
    +
    Build instructions
    + +
    +

    General build directions can be found here.

    +
    +
    + +
    + Up to parent directory +
    +
    +
    Legal Information
    + +
    +

    + Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
    * Other names and brands may be claimed as the property of others. +
    © 2017, Intel Corporation +

    +
    +
    + + + diff --git a/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp new file mode 100644 index 0000000..d4028a2 --- /dev/null +++ b/examples/parallel_for/game_of_life/src/AssemblyInfo.cpp @@ -0,0 +1,58 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Automata")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("")]; +[assembly:AssemblyProductAttribute("Automata")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2007")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/examples/parallel_for/game_of_life/src/Board.h b/examples/parallel_for/game_of_life/src/Board.h new file mode 100644 index 0000000..3e624e9 --- /dev/null +++ b/examples/parallel_for/game_of_life/src/Board.h @@ -0,0 +1,107 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#define WIN32_LEAN_AND_MEAN + +#ifndef _CONSOLE +#include + +using namespace System; +using namespace System::ComponentModel; +using namespace System::Collections; +using namespace System::Windows::Forms; +using namespace System::Data; +using namespace System::Drawing; +#define LabelPtr Label^ +#define BoardPtr Board^ +#else +#define LabelPtr int* +#define BoardPtr Board* +#endif + +struct Matrix +{ + int width; + int height; + char* data; +}; + +#ifndef _CONSOLE +public ref class Board : public System::Windows::Forms::UserControl +#else +class Board +#endif + { + public: + Board(int width, int height, int squareSize, LabelPtr counter); + virtual ~Board(); + void seed(int s); + void seed(const BoardPtr s); +#ifndef _CONSOLE + protected: + virtual void OnPaint(PaintEventArgs^ e) override; + void Board::draw(Graphics^ g); + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + } +#pragma endregion + + private: delegate void drawDelegate(Int32); + public: + //! Called from the Evolution thread + void draw( Int32 nCurIteration ) + { + if (this->InvokeRequired) + { + drawDelegate^ d = gcnew drawDelegate(this, &Board::draw); + IAsyncResult^ result = BeginInvoke(d, nCurIteration); + EndInvoke(result); + return; + } + m_counter->Text = nCurIteration.ToString(); + Invalidate(); + } +#endif + public: + Matrix *m_matrix; + + private: +#ifndef _CONSOLE + SolidBrush^ m_occupiedBrush; + SolidBrush^ m_freeBrush; + Graphics^ m_graphics; + Graphics^ m_mem_dc; + Bitmap^ m_bmp; +#endif + int m_width; + int m_height; + int m_squareSize; + LabelPtr m_counter; + }; +#endif diff --git a/examples/parallel_for/game_of_life/src/Evolution.cpp b/examples/parallel_for/game_of_life/src/Evolution.cpp new file mode 100644 index 0000000..f699b7e --- /dev/null +++ b/examples/parallel_for/game_of_life/src/Evolution.cpp @@ -0,0 +1,243 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/* + Evolution.cpp: implementation file for evolution classes; evolution + classes do looped evolution of patterns in a defined + 2 dimensional space +*/ + +#include "Evolution.h" +#include "Board.h" + +#ifdef USE_SSE +#define GRAIN_SIZE 14 +#else +#define GRAIN_SIZE 4000 +#endif +#define TIME_SLICE 330 + +/* + Evolution +*/ + +/** + Evolution::UpdateMatrix() - moves the calculated destination data + to the source data block. No destination zeroing is required since it will + be completely overwritten during the next calculation cycle. +**/ +void Evolution::UpdateMatrix() +{ + memcpy(m_matrix->data, m_dest, m_size); +} + +/* + SequentialEvolution +*/ + +//! SequentialEvolution::Run - begins looped evolution +#ifndef _CONSOLE +void SequentialEvolution::Run() +{ +#else +void SequentialEvolution::Run(double execution_time, int nthread) +{ + printf("Starting game (Sequential evolution)\n"); +#endif + + m_nIteration = 0; + m_serial_time = 0; + tbb::tick_count t0 = tbb::tick_count::now(); + while (!m_done) + { + if( !is_paused ) + { + tbb::tick_count t = tbb::tick_count::now(); + Step(); + tbb::tick_count t1 = tbb::tick_count::now(); + ++m_nIteration; + double work_time = (t1-t0).seconds(); +#ifndef _CONSOLE + if ( work_time * 1000 < TIME_SLICE ) + continue; + m_serial_time += work_time; + m_board->draw(m_nIteration); +#else + m_serial_time += work_time; +#endif + } + //! Let the parallel algorithm work uncontended almost the same time + //! as the serial one. See ParallelEvolution::Run() as well. +#ifndef _CONSOLE + m_evt_start_parallel->Set(); + m_evt_start_serial->WaitOne(); + t0 = tbb::tick_count::now(); +#else + t0 = tbb::tick_count::now(); + if(m_serial_time > execution_time) + { + printf("iterations count = %d time = %g\n", m_nIteration, m_serial_time); + break; + } +#endif + } +} + +//! SequentialEvolution::Step() - override of step method +void SequentialEvolution::Step() +{ + if( !is_paused ) + { +#ifdef USE_SSE + UpdateState(m_matrix, m_matrix->data, 0, m_matrix->height); +#else + UpdateState(m_matrix, m_dest, 0, (m_matrix->width * m_matrix->height)-1); + UpdateMatrix(); +#endif + } +} + +/* + ParallelEvolution +*/ + +//! SequentialEvolution::Run - begins looped evolution +#ifndef _CONSOLE +void ParallelEvolution::Run() +{ +#else +void ParallelEvolution::Run(double execution_time, int nthread) +{ + if(nthread == tbb::task_scheduler_init::automatic) + printf("Starting game (Parallel evolution for automatic number of thread(s))\n"); + else + printf("Starting game (Parallel evolution for %d thread(s))\n", nthread); +#endif + + m_nIteration = 0; + m_parallel_time = 0; + +#ifndef _CONSOLE + //! start task scheduler as necessary + if (m_pInit == NULL) + { + m_pInit = new tbb::task_scheduler_init(); + } + m_evt_start_parallel->WaitOne(); +#else + tbb::task_scheduler_init init(nthread); +#endif + + double work_time = m_serial_time; + tbb::tick_count t0 = tbb::tick_count::now(); + + while (!m_done) + { + if( !is_paused ) + { + tbb::tick_count t = tbb::tick_count::now(); + Step(); + tbb::tick_count t1 = tbb::tick_count::now(); + ++m_nIteration; + double real_work_time = (t1-t0).seconds(); +#ifndef _CONSOLE + if ( real_work_time < work_time ) + continue; + m_parallel_time += real_work_time; + m_board->draw(m_nIteration); +#else + m_parallel_time += real_work_time; +#endif + } + //! Let the serial algorithm work the same time as the parallel one. +#ifndef _CONSOLE + m_evt_start_serial->Set(); + m_evt_start_parallel->WaitOne(); + + work_time = m_serial_time - m_parallel_time; + t0 = tbb::tick_count::now(); +#else + t0 = tbb::tick_count::now(); + if(m_parallel_time > execution_time) + { + printf("iterations count = %d time = %g\n", m_nIteration, m_parallel_time); + init.terminate(); + break; + } +#endif + } +} + +/** + class tbb_parallel_task + + TBB requires a class for parallel loop implementations. The actual + loop "chunks" are performed using the () operator of the class. + The blocked_range contains the range to calculate. Please see the + TBB documentation for more information. +**/ +#ifndef _CONSOLE +public class tbb_parallel_task +#else +class tbb_parallel_task +#endif +{ +public: + static void set_values (Matrix* source, char* dest) + { + m_source = source; + m_dest = dest; + return; + } + + void operator()( const tbb::blocked_range& r ) const + { + int begin = (int)r.begin(); //! capture lower range number for this chunk + int end = (int)r.end(); //! capture upper range number for this chunk + UpdateState(m_source, m_dest, begin, end); + } + + tbb_parallel_task () {} + +private: + static Matrix* m_source; + static char* m_dest; +}; + +Matrix* tbb_parallel_task::m_source; +char* tbb_parallel_task::m_dest; + +//! ParallelEvolution::Step() - override of Step method +void ParallelEvolution::Step() +{ + size_t begin = 0; //! beginning cell position +#ifdef USE_SSE + size_t end = m_matrix->height; //! ending cell position +#else + size_t end = m_size-1; //! ending cell position +#endif + + //! set matrix pointers + tbb_parallel_task::set_values(m_matrix, m_dest); + + //! do calculation loop + parallel_for (tbb::blocked_range (begin, end, GRAIN_SIZE), tbb_parallel_task()); + UpdateMatrix(); +} diff --git a/examples/parallel_for/game_of_life/src/Evolution.h b/examples/parallel_for/game_of_life/src/Evolution.h new file mode 100644 index 0000000..1c96928 --- /dev/null +++ b/examples/parallel_for/game_of_life/src/Evolution.h @@ -0,0 +1,195 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/** + Evolution.h: Header file for evolution classes; evolution classes do + looped evolution of patterns in a defined 2 dimensional space +**/ + +#ifndef __EVOLUTION_H__ +#define __EVOLUTION_H__ + +#include "Board.h" +#include +#include +#include + +#define WIN32_LEAN_AND_MEAN + +#include "tbb/task_scheduler_init.h" +#include "tbb/blocked_range.h" +#include "tbb/parallel_for.h" +#include "tbb/tick_count.h" + +#ifndef _CONSOLE +#include +using namespace System::Threading; +#else +typedef unsigned int Int32; +#endif + +void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end); + +/** + class Evolution - base class for SequentialEvolution and ParallelEvolution +**/ +#ifndef _CONSOLE +public ref class Evolution abstract +#else +class Evolution +#endif +{ +public: + Evolution( Matrix *m, //! beginning matrix including initial pattern + BoardPtr board //! the board to update + ) : m_matrix(m), m_board(board), + m_size(m_matrix->height * m_matrix->width), m_done(false) + { + //! allocate memory for second matrix data block + m_dest = new char[m_size]; + is_paused = false; +#ifdef _CONSOLE + m_serial_time = 0; +#endif + } + + virtual ~Evolution() + { + delete[] m_dest; + } + + //! Run() - begins looped evolution +#ifndef _CONSOLE + virtual void Run() = 0; +#else + virtual void Run(double execution_time, int nthread) = 0; +#endif + + //! Quit() - tell the thread to terminate + virtual void Quit() { m_done = true; } + + //! Step() - performs a single evolutionary generation computation on the game matrix + virtual void Step() = 0; + + //! SetPause() - change condition of variable is_paused + virtual void SetPause(bool condition) + { + if ( condition == true ) + is_paused = true; + else + is_paused = false; + } + +protected: + /** + UpdateMatrix() - moves the previous destination data to the source + data block and zeros out destination. + **/ + void UpdateMatrix(); + +protected: + Matrix* m_matrix; //! Pointer to initial matrix + char* m_dest; //! Pointer to calculation destination data + BoardPtr m_board; //! The game board to update + int m_size; //! size of the matrix data block + volatile bool m_done; //! a flag used to terminate the thread + Int32 m_nIteration; //! current calculation cycle index + volatile bool is_paused; //! is needed to perform next iteration + + //! Calculation time of the sequential version (since the start), seconds. + /** + This member is updated by the sequential version and read by parallel, + so no synchronization is necessary. + **/ +#ifndef _CONSOLE + static volatile double m_serial_time = 0; + + static System::Threading::AutoResetEvent ^m_evt_start_serial = gcnew AutoResetEvent(false), + ^m_evt_start_parallel = gcnew AutoResetEvent(false); +#else + double m_serial_time; +#endif +}; + +/** + class SequentialEvolution - derived from Evolution - calculate life generations serially +**/ +#ifndef _CONSOLE +public ref class SequentialEvolution: public Evolution +#else +class SequentialEvolution: public Evolution +#endif +{ +public: + SequentialEvolution(Matrix *m, BoardPtr board) + : Evolution(m, board) + {} +#ifndef _CONSOLE + virtual void Run() override; + virtual void Step() override; +#else + virtual void Run(double execution_time, int nthread); + virtual void Step(); +#endif + +}; + +/** + class ParallelEvolution - derived from Evolution - calculate life generations + in parallel using Intel(R) TBB +**/ +#ifndef _CONSOLE +public ref class ParallelEvolution: public Evolution +#else +class ParallelEvolution: public Evolution +#endif +{ +public: + + ParallelEvolution(Matrix *m, BoardPtr board) + : Evolution(m, board), + m_parallel_time(0) + { + // instantiate a task_scheduler_init object and save a pointer to it + m_pInit = NULL; + } + + ~ParallelEvolution() + { + //! delete task_scheduler_init object + if (m_pInit != NULL) + delete m_pInit; + } +#ifndef _CONSOLE + virtual void Run() override; + virtual void Step() override; +#else + virtual void Run(double execution_time, int nthread); + virtual void Step(); +#endif + + +private: + tbb::task_scheduler_init* m_pInit; + + double m_parallel_time; +}; + +#endif diff --git a/examples/parallel_for/game_of_life/src/Form1.h b/examples/parallel_for/game_of_life/src/Form1.h new file mode 100644 index 0000000..d487554 --- /dev/null +++ b/examples/parallel_for/game_of_life/src/Form1.h @@ -0,0 +1,306 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef _CONSOLE +#ifndef __FORM1_H__ +#define __FORM1_H__ + +#include +#include "Board.h" +#include "Evolution.h" + +#define BOARD_SQUARE_SIZE 2 + + using namespace System; + using namespace System::ComponentModel; + using namespace System::Collections; + using namespace System::Windows::Forms; + using namespace System::Data; + using namespace System::Drawing; + + public ref class Form1 : public System::Windows::Forms::Form + { + public: + Form1(void) + { + InitializeComponent(); + + FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; + ClientSize = System::Drawing::Size(1206, 600+m_ribbonHeight+menuStrip1->Height); + + int boardWidth = (ClientRectangle.Width/2-m_sepWidth/2)/BOARD_SQUARE_SIZE; + int boardHeight = (ClientRectangle.Height-menuStrip1->Height-m_ribbonHeight)/BOARD_SQUARE_SIZE; + + m_board1 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, seqGen); + m_board2 = gcnew Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, parGen); + + Controls->Add(m_board1); + Controls->Add(m_board2); + + m_board1->Location = System::Drawing::Point(2, m_ribbonHeight + menuStrip1->Height); + m_board2->Location = System::Drawing::Point(2 + boardWidth*BOARD_SQUARE_SIZE + m_sepWidth/2, m_ribbonHeight + menuStrip1->Height); + + m_seq = gcnew SequentialEvolution(m_board1->m_matrix, m_board1); + m_par = gcnew ParallelEvolution(m_board2->m_matrix, m_board2); + + m_seqThread = gcnew Thread(gcnew ThreadStart(m_seq, &SequentialEvolution::Run)); + m_parThread = gcnew Thread(gcnew ThreadStart(m_par, &ParallelEvolution::Run)); + + Thread::CurrentThread->Priority = ThreadPriority::AboveNormal; + + m_suspend = true; + } + protected: + ~Form1() + { + if (components) + { + delete components; + } + } + private: System::Windows::Forms::MenuStrip^ menuStrip1; + private: System::Windows::Forms::ToolStripMenuItem^ fileToolStripMenuItem; + private: System::Windows::Forms::ToolStripMenuItem^ exitToolStripMenuItem; + private: System::Windows::Forms::ToolStripMenuItem^ gameToolStripMenuItem; + private: System::Windows::Forms::ToolStripMenuItem^ seedToolStripMenuItem; + private: System::Windows::Forms::ToolStripMenuItem^ runToolStripMenuItem; + private: System::Windows::Forms::ToolStripMenuItem^ pauseToolStripMenuItem; + private: Board^ m_board1; + private: Board^ m_board2; + private: System::Windows::Forms::Label^ Sequential; + private: System::Windows::Forms::Label^ label1; + private: static const int m_sepWidth = 5; + private: static const int m_ribbonHeight = 26; + private: SequentialEvolution^ m_seq; + private: ParallelEvolution^ m_par; + private: Thread^ m_seqThread; + private: Thread^ m_parThread; + private: System::Windows::Forms::Label^ seqGen; + private: System::Windows::Forms::Label^ parGen; + private: bool m_suspend; + + private: + System::ComponentModel::Container ^components; + +#pragma region Windows Form Designer generated code + void InitializeComponent(void) + { + this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip()); + this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->gameToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->seedToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->runToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->pauseToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); + this->Sequential = (gcnew System::Windows::Forms::Label()); + this->label1 = (gcnew System::Windows::Forms::Label()); + this->seqGen = (gcnew System::Windows::Forms::Label()); + this->parGen = (gcnew System::Windows::Forms::Label()); + this->menuStrip1->SuspendLayout(); + this->SuspendLayout(); + // + // menuStrip1 + // + this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) + {this->fileToolStripMenuItem, this->gameToolStripMenuItem}); + this->menuStrip1->Location = System::Drawing::Point(0, 0); + this->menuStrip1->Name = L"menuStrip1"; + this->menuStrip1->Padding = System::Windows::Forms::Padding(8, 2, 0, 2); + this->menuStrip1->Size = System::Drawing::Size(1600, 26); + this->menuStrip1->TabIndex = 0; + this->menuStrip1->Text = L"menuStrip1"; + this->menuStrip1->ItemClicked += gcnew System::Windows::Forms::ToolStripItemClickedEventHandler(this, &Form1::menuStrip1_ItemClicked); + // + // fileToolStripMenuItem + // + this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(1) {this->exitToolStripMenuItem}); + this->fileToolStripMenuItem->Name = L"fileToolStripMenuItem"; + this->fileToolStripMenuItem->Size = System::Drawing::Size(40, 22); + this->fileToolStripMenuItem->Text = L"File"; + // + // exitToolStripMenuItem + // + this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem"; + this->exitToolStripMenuItem->Size = System::Drawing::Size(99, 22); + this->exitToolStripMenuItem->Text = L"Exit"; + this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnExit); + // + // gameToolStripMenuItem + // + this->gameToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(3) {this->seedToolStripMenuItem, + this->runToolStripMenuItem, this->pauseToolStripMenuItem}); + this->gameToolStripMenuItem->Name = L"gameToolStripMenuItem"; + this->gameToolStripMenuItem->Size = System::Drawing::Size(59, 22); + this->gameToolStripMenuItem->Text = L"Game"; + // + // seedToolStripMenuItem + // + this->seedToolStripMenuItem->Name = L"seedToolStripMenuItem"; + this->seedToolStripMenuItem->Size = System::Drawing::Size(115, 22); + this->seedToolStripMenuItem->Text = L"Seed"; + this->seedToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnSeed); + // + // runToolStripMenuItem + // + this->runToolStripMenuItem->Enabled = false; + this->runToolStripMenuItem->Name = L"runToolStripMenuItem"; + this->runToolStripMenuItem->Size = System::Drawing::Size(115, 22); + this->runToolStripMenuItem->Text = L"Run"; + this->runToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnRun); + // + // pauseToolStripMenuItem + // + this->pauseToolStripMenuItem->Enabled = false; + this->pauseToolStripMenuItem->Name = L"pauseToolStripMenuItem"; + this->pauseToolStripMenuItem->Size = System::Drawing::Size(115, 22); + this->pauseToolStripMenuItem->Text = L"Pause"; + this->pauseToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::OnPauseResume); + // + // Sequential + // + this->Sequential->AutoSize = true; + this->Sequential->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, + static_cast(0))); + this->Sequential->Location = System::Drawing::Point(12, 32); + this->Sequential->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); + this->Sequential->Name = L"Sequential"; + this->Sequential->Size = System::Drawing::Size(239, 18); + this->Sequential->TabIndex = 1; + this->Sequential->Text = L"Sequential Algorithm generation:"; + // + // label1 + // + this->label1->AutoSize = true; + this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, + static_cast(0))); + this->label1->Location = System::Drawing::Point(813, 32); + this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); + this->label1->Name = L"label1"; + this->label1->Size = System::Drawing::Size(219, 18); + this->label1->TabIndex = 2; + this->label1->Text = L"Parallel Algorithm generation: "; + // + // seqGen + // + this->seqGen->AutoSize = true; + this->seqGen->Location = System::Drawing::Point(289, 35); + this->seqGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); + this->seqGen->Name = L"seqGen"; + this->seqGen->Size = System::Drawing::Size(16, 17); + this->seqGen->TabIndex = 3; + this->seqGen->Text = L"0"; + // + // parGen + // + this->parGen->AutoSize = true; + this->parGen->Location = System::Drawing::Point(1068, 35); + this->parGen->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); + this->parGen->Name = L"parGen"; + this->parGen->Size = System::Drawing::Size(16, 17); + this->parGen->TabIndex = 4; + this->parGen->Text = L"0"; + // + // Form1 + // + this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); + this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; + this->ClientSize = System::Drawing::Size(1600, 738); + this->Controls->Add(this->parGen); + this->Controls->Add(this->seqGen); + this->Controls->Add(this->label1); + this->Controls->Add(this->Sequential); + this->Controls->Add(this->menuStrip1); + this->MainMenuStrip = this->menuStrip1; + this->Margin = System::Windows::Forms::Padding(4); + this->MaximizeBox = false; + this->Name = L"Form1"; + this->Text = L"Game of Life"; + this->menuStrip1->ResumeLayout(false); + this->menuStrip1->PerformLayout(); + this->ResumeLayout(false); + this->PerformLayout(); + + } +#pragma endregion + protected: + void CloseApp () + { + m_seq->Quit(); + m_par->Quit(); + //! Perform a very ungracious exit, should coordinate the threads + System::Environment::Exit(0); + } + + protected: + virtual void OnPaint(PaintEventArgs^ e) override + { + } + + virtual void OnFormClosing(FormClosingEventArgs^ e) override + { + CloseApp(); + } + + void OnExit(System::Object^ sender, System::EventArgs^ e) + { + CloseApp(); + } + + void OnSeed(System::Object^ sender, System::EventArgs^ e) + { + this->seedToolStripMenuItem->Enabled = false; + this->runToolStripMenuItem->Enabled = true; + time_t now = time(NULL); + this->m_board1->seed((int)now); + this->m_board2->seed(this->m_board1); + this->Invalidate(); + } + + void OnRun(System::Object^ sender, System::EventArgs^ e) + { + this->runToolStripMenuItem->Enabled = false; + this->pauseToolStripMenuItem->Enabled = true; + m_seqThread->Start(); + m_parThread->Start(); + } + + void OnPauseResume(System::Object^ sender, System::EventArgs^ e) + { + if (m_suspend) + { + m_seq->SetPause(true); + m_par->SetPause(true); + this->pauseToolStripMenuItem->Text = L"Resume"; + } + else + { + m_seq->SetPause(false); + m_par->SetPause(false); + this->pauseToolStripMenuItem->Text = L"Pause"; + } + m_suspend = !m_suspend; + } + + private: + System::Void menuStrip1_ItemClicked(System::Object^ sender, System::Windows::Forms::ToolStripItemClickedEventArgs^ e) + {} +}; +#endif +#endif diff --git a/examples/parallel_for/game_of_life/src/Game_of_life.cpp b/examples/parallel_for/game_of_life/src/Game_of_life.cpp new file mode 100644 index 0000000..4aaadd7 --- /dev/null +++ b/examples/parallel_for/game_of_life/src/Game_of_life.cpp @@ -0,0 +1,230 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/* + Game_of_life.cpp : + main project file. +*/ +#include "Board.h" +#include "Form1.h" + +#define WIN32_LEAN_AND_MEAN + +#ifndef _CONSOLE +#include +#else +#include +#include +#include +#include "Evolution.h" + +#define BOARD_SQUARE_SIZE 2 + +int low; //! lower range limit of threads +int high; //! high range limit of threads +double execution_time; //! time for game of life iterations +#endif + +Board::Board(int width, int height, int squareSize, LabelPtr counter) +: m_width(width), m_height(height), m_squareSize(squareSize), m_counter(counter) +{ +#ifndef _CONSOLE + InitializeComponent(); + DoubleBuffered = true; + + this->Width = m_squareSize*width; + this->Height = m_squareSize*height; +#endif + m_matrix = new Matrix(); + m_matrix->width = width; + m_matrix->height = height; + m_matrix->data = new char[width*height]; + memset(m_matrix->data, 0, width*height); +#ifndef _CONSOLE + m_occupiedBrush = gcnew SolidBrush(Color::Black); + m_freeBrush = gcnew SolidBrush(Color::LightGray); + + m_graphics = CreateGraphics(); + m_bmp = gcnew Bitmap(Width, Height); + m_mem_dc = Graphics::FromImage(m_bmp); +#endif +} + +Board::~Board() +{ +#ifndef _CONSOLE + if (components) + { + delete components; + } +#endif + delete[] m_matrix->data; + delete m_matrix; +} + +void Board::seed(int s) +{ + srand(s); + for (int j=0; jdata[i+j*m_width] = x>75? 1: 0; // 25% occupied + } + } +#ifndef _CONSOLE + Invalidate(); +#endif +} + +void Board::seed( const BoardPtr src ) +{ + memcpy(m_matrix->data, src->m_matrix->data, m_height*m_width); +#ifndef _CONSOLE + Invalidate(); +#endif +} + +#ifndef _CONSOLE +void Board::draw(Graphics^ g) +{ + m_mem_dc->FillRectangle(m_freeBrush, Drawing::Rectangle(0, 0, m_width*m_squareSize, m_height*m_squareSize)); + for (int j=0; jdata[i+j*m_width] ) + { + m_mem_dc->FillRectangle(m_occupiedBrush, Drawing::Rectangle(i*m_squareSize, j*m_squareSize, m_squareSize, m_squareSize)); + } + } + } + g->DrawImage(m_bmp, 0, 0); +} + +void Board::OnPaint(PaintEventArgs^ e) +{ + draw(e->Graphics); +} + +[STAThreadAttribute] +int main(array ^args) +{ + // Enabling Windows XP visual effects before any controls are created + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + + // Create the main window and run it + Application::Run(gcnew Form1()); + return 0; +} +#else + +//! Print usage of this program +void PrintUsage() +{ + printf("Usage: gol [M[:N] -t execution_time]\nM and N are a range of numbers of threads to be used.\nexecution_time is a time (in sec) for execution game_of_life iterations\n"); + printf("Default values:\nM:\t\tautomatic\nN:\t\tM\nexecution_time:\t10\n"); +} + +//! Parse command line +bool ParseCommandLine(int argc, char * argv []) +{ + char* s = argv[1]; + char* end; + //! command line without parameters + if(argc == 1) + { + low = tbb::task_scheduler_init::automatic; + high = low; + execution_time = 5; + return true; + } + //! command line with parameters + if(argc != 4) + { + PrintUsage(); + return false; + } + if(std::string("-t") != argv[argc-2]) + //! process M[:N] parameter + high = strtol(s,&end,0); + low = strtol(s,&end,0); + switch( *end ) + { + case ':': + high = strtol(end+1,0,0); + break; + case '\0': + break; + default: + PrintUsage(); + return false; + } + if (high < low) + { + std::cout << "Set correct range. Current range: " << low << ":" << high << std::endl; + PrintUsage(); + return false; + + } + //! process execution_time parameter + execution_time = strtol(argv[argc-1],&end,0); + return true; +} + +int main( int argc, char* argv[] ) +{ + if(!ParseCommandLine( argc, argv )) + return 1; + SequentialEvolution* m_seq; + ParallelEvolution* m_par; + Board* m_board1; + Board* m_board2; + int* count = NULL; + + int boardWidth = 300; + int boardHeight = 300; + + m_board1 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count); + m_board2 = new Board(boardWidth, boardHeight, BOARD_SQUARE_SIZE, count); + + time_t now = time(NULL); + printf("Generate Game of life board\n"); + m_board1->seed((int)now); + m_board2->seed(m_board1); + + m_seq = new SequentialEvolution(m_board1->m_matrix, m_board1); + m_seq->Run(execution_time, 1); + delete m_seq; + + m_par = new ParallelEvolution(m_board2->m_matrix, m_board2); + for( int p = low; p <= high; ++p ) + { + m_par->Run(execution_time, p); + } + delete m_par; + + delete m_board1; + delete m_board2; + return 0; +} +#endif diff --git a/examples/parallel_for/game_of_life/src/Update_state.cpp b/examples/parallel_for/game_of_life/src/Update_state.cpp new file mode 100644 index 0000000..3716cb8 --- /dev/null +++ b/examples/parallel_for/game_of_life/src/Update_state.cpp @@ -0,0 +1,402 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "Evolution.h" + +#ifdef USE_SSE +/* Update states with SSE */ + +#include +#include + +inline void create_record( char * src, unsigned * dst, unsigned width) +{ + dst[0] |= src[width - 1]; + for( unsigned a=0; a<31u; ++a ) + dst[0] |= src[a]<<(a+1); + unsigned a; + for( a=31u; a>=31; + X[ind] =_mm_or_si128( _mm_slli_epi16(X[ind],1), + _mm_srli_epi16( _mm_slli_si128( X[ind], 2), 15) ); + + unsigned x1 = X[ind + 1].m128i_u32[3]; x1>>=31; + X[ind + 1] =_mm_or_si128( _mm_slli_epi16(X[ind + 1],1), + _mm_srli_epi16( _mm_slli_si128( X[ind + 1], 2), 15) ); + X[ind + 1].m128i_u32[0] |= x0; + + unsigned* dst = (unsigned*)&X[ind]; + unsigned x2 = dst[301/32u] & (1<<(301%32u)); x2>>=(301%32u); + X[ind + 2] =_mm_or_si128( _mm_slli_epi16(X[ind + 2],1), + _mm_srli_epi16( _mm_slli_si128( X[ind + 2], 2), 15) ); + X[ind + 2].m128i_u32[0] |= x1; + X[ind].m128i_u32[0] |= x2; + } +} + +void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end) +{ + //300/128 + 1 =3, 3*300=900 + unsigned size_sse_row = m_matrix->width/128 + 1; //3 + unsigned size_sse_ar=size_sse_row * (end - begin); + __m128i X[906], A[900], B[900], C[900]; + char * mas = m_matrix->data; + + for( unsigned i=0; iwidth; + for( unsigned b = 0 ; b < height; ++b ) + { + char* src = &mas[(b + begin)*width]; + unsigned* dst = (unsigned*)&X[(b+1)*size_sse_row]; + create_record(src, dst, width); + } + // create high row in X[] + char * src; + if(begin == 0) + { + src = &mas[(m_matrix->height-1)*width]; + } + else + { + src = &mas[(begin-1)*width]; + } + unsigned* dst = (unsigned*)X; + create_record(src, dst, width); + + //create lower row in X[] + if(end == m_matrix->height ) + { + src = mas; + } + else + { + src = &mas[end*width]; + } + dst = (unsigned*)&X[(height+1)*size_sse_row]; + create_record(src, dst, width); + + //sum( C, B, A, X+offset_for_upwards ); high-left friend + sum_offset(X,A,B,C,size_sse_ar, 0); + + //sum( C, B, A, X+offset_for_no_vertical_shift ); + sum_offset(X,A,B,C,size_sse_ar, size_sse_row); + + //sum( C, B, A, X+offset_for_downwards ); + sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row); + + //shift_left( X ); (when view 2D) in our logic it is in right + height = end - begin + 2; + shift_left2D( X, height, size_sse_row); + + //sum( C, B, A, X+offset_for_upwards ); high-left friend + sum_offset(X,A,B,C,size_sse_ar, 0); + + //sum( C, B, A, X+offset_for_downwards ); + sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row); + + //shift_left( X ); (view in 2D) in our logic it is right shift + height = end - begin + 2; + shift_left2D( X, height, size_sse_row); + + //sum( C, B, A, X+offset_for_upwards ); high-right friend + sum_offset(X,A,B,C,size_sse_ar, 0); + + //sum( C, B, A, X+offset_for_no_vertical_shift ); right friend + sum_offset(X,A,B,C,size_sse_ar, size_sse_row); + + //sum( C, B, A, X+offset_for_downwards ); right down friend + sum_offset(X,A,B,C,size_sse_ar, 2*size_sse_row); + + //shift_right( X ); (when view in 2D) in our case it left shift. + height = end - begin + 2; + shift_right2D( X, height, size_sse_row); + + //X = (X|A)&B&~C (done bitwise over the arrays) + unsigned shift = size_sse_row; + for(unsigned i=0; iwidth; + for( unsigned b=0; b>(a%32u); + } + } +} +#else +/* end SSE block */ + +// ---------------------------------------------------------------------- +// GetAdjacentCellState() - returns the state (value) of the specified +// adjacent cell of the current cell "cellNumber" +char GetAdjacentCellState( + char* source, // pointer to source data block + int x, // logical width of field + int y, // logical height of field + int cellNumber, // number of cell position to examine + int cp // which adjacent position + ) +{ +/* +cp +*-- cp=1 ... --- cp=8 (summary: -1-2-3- +-x- -x- -4-x-5- +--- --* -6-7-8- ) +*/ + char cellState = 0; // return value + + // set up boundary flags to trigger field-wrap logic + bool onTopRow = false; + bool onBottomRow = false; + bool onLeftColumn = false; + bool onRightColumn = false; + + // check to see if cell is on top row + if (cellNumber < x) + { + onTopRow = true; + } + // check to see if cell is on bottom row + if ((x*y)-cellNumber <= x) + { + onBottomRow = true; + } + // check to see if cell is on left column + if (cellNumber%x == 0) + { + onLeftColumn = true; + } + // check to see if cell is on right column + if ((cellNumber+1)%x == 0) + { + onRightColumn = true; + } + + switch (cp) + { + case 1: + if (onTopRow && onLeftColumn) + { + return *(source+((x*y)-1)); + } + if (onTopRow && !onLeftColumn) + { + return *(source+(((x*y)-x)+(cellNumber-1))); + } + if (onLeftColumn && !onTopRow) + { + return *(source+(cellNumber-1)); + } + return *((source+cellNumber)-(x+1)); + + case 2: + if (onTopRow) + { + return *(source+(((x*y)-x)+cellNumber)); + } + return *((source+cellNumber)-x); + + case 3: + if (onTopRow && onRightColumn) + { + return *(source+((x*y)-x)); + } + if (onTopRow && !onRightColumn) + { + return *(source+(((x*y)-x)+(cellNumber+1))); + } + if (onRightColumn && !onTopRow) + { + return *(source+((cellNumber-(x*2))+1)); + } + return *(source+(cellNumber-(x-1))); + + case 4: + if (onRightColumn) + { + return *(source+(cellNumber-(x-1))); + } + return *(source+(cellNumber+1)); + + case 5: + if (onBottomRow && onRightColumn) + { + return *source; + } + if (onBottomRow && !onRightColumn) + { + return *(source+((cellNumber-((x*y)-x))+1)); + } + if (onRightColumn && !onBottomRow) + { + return *(source+(cellNumber+1)); + } + return *(source+(((cellNumber+x))+1)); + + case 6: + if (onBottomRow) + { + return *(source+(cellNumber-((x*y)-x))); + } + return *(source+(cellNumber+x)); + + case 7: + if (onBottomRow && onLeftColumn) + { + return *(source+(x-1)); + } + if (onBottomRow && !onLeftColumn) + { + return *(source+(cellNumber-((x*y)-x)-1)); + } + if (onLeftColumn && !onBottomRow) + { + return *(source+(cellNumber+((x*2)-1))); + } + return *(source+(cellNumber+(x-1))); + + case 8: + if (onLeftColumn) + { + return *(source+(cellNumber+(x-1))); + } + return *(source+(cellNumber-1)); + } + return cellState; +} + +char CheckCell(Matrix * m_matrix, int cellNumber) +{ + char total = 0; + char* source = m_matrix->data; + //look around to find cell's with status "alive" + for(int i=1; i<9; i++) + { + total += GetAdjacentCellState(source, m_matrix->width, m_matrix->height, cellNumber, i); + } + // if the number of adjacent live cells is < 2 or > 3, the result is a dead + // cell regardless of its current state. (A live cell dies of loneliness if it + // has less than 2 neighbors, and of overcrowding if it has more than 3; a new + // cell is born in an empty spot only if it has exactly 3 neighbors. + if (total < 2 || total > 3) + { + return 0; + } + + // if we get here and the cell position holds a living cell, it stays alive + if (*(source+cellNumber)) + { + return 1; + } + + // we have an empty position. If there are only 2 neighbors, the position stays + // empty. + if (total == 2) + { + return 0; + } + + // we have an empty position and exactly 3 neighbors. A cell is born. + return 1; +} + +void UpdateState(Matrix * m_matrix, char * dest ,int begin, int end) +{ + for (int i=begin; i<=end; i++) + { + *(dest+i) = CheckCell(m_matrix, i); + } +} + +#endif +/* end non-SSE block */ diff --git a/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj b/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1c1cd6a --- /dev/null +++ b/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj @@ -0,0 +1,317 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 612CD8DD11F573FC00A587B2 /* Game_of_life.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */; }; + 612CD8DE11F573FC00A587B2 /* Update_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DC11F573FC00A587B2 /* Update_state.cpp */; }; + 612CD8E111F5742000A587B2 /* Evolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8E011F5742000A587B2 /* Evolution.cpp */; }; + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game_of_life.cpp; path = ../src/Game_of_life.cpp; sourceTree = SOURCE_ROOT; }; + 612CD8DC11F573FC00A587B2 /* Update_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Update_state.cpp; path = ../src/Update_state.cpp; sourceTree = SOURCE_ROOT; }; + 612CD8E011F5742000A587B2 /* Evolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Evolution.cpp; path = ../src/Evolution.cpp; sourceTree = SOURCE_ROOT; }; + 8DD76F6C0486A84900D96B5E /* game_of_life */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = game_of_life; sourceTree = BUILT_PRODUCTS_DIR; }; + A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* game_of_life */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = game_of_life; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 612CD8E011F5742000A587B2 /* Evolution.cpp */, + 612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */, + 612CD8DC11F573FC00A587B2 /* Update_state.cpp */, + ); + name = Source; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76F6C0486A84900D96B5E /* game_of_life */, + ); + name = Products; + sourceTree = ""; + }; + A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + A1F593B30B8F06F900073279 /* libtbb.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* game_of_life */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "game_of_life" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = game_of_life; + productInstallPath = "$(HOME)/bin"; + productName = game_of_life; + productReference = 8DD76F6C0486A84900D96B5E /* game_of_life */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0410; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "game_of_life" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* game_of_life */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* game_of_life */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 612CD8DD11F573FC00A587B2 /* Game_of_life.cpp in Sources */, + 612CD8DE11F573FC00A587B2 /* Update_state.cpp in Sources */, + 612CD8E111F5742000A587B2 /* Evolution.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = game_of_life; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = game_of_life; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release; + }; + A1F593C60B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = game_of_life; + ZERO_LINK = NO; + }; + name = Debug64; + }; + A1F593C70B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + HEADER_SEARCH_PATHS = ../../../../include; + INSTALL_PATH = "$(HOME)/bin"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + ../../../../lib, + ); + PRODUCT_NAME = game_of_life; + ZERO_LINK = NO; + }; + name = Release64; + }; + A1F593C80B8F0E6E00073279 /* Debug64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Debug64; + }; + A1F593C90B8F0E6E00073279 /* Release64 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = i386; + GCC_ENABLE_CPP_RTTI = YES; + GCC_MODEL_TUNING = ""; + GCC_VERSION = 4.0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-m64", + ); + OTHER_LDFLAGS = "-m64"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + SYMROOT = "/tmp/tbb-$(USER)"; + }; + name = Release64; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "game_of_life" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + A1F593C60B8F0E6E00073279 /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release */, + A1F593C70B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "game_of_life" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + A1F593C80B8F0E6E00073279 /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release */, + A1F593C90B8F0E6E00073279 /* Release64 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/examples/parallel_for/index.html b/examples/parallel_for/index.html new file mode 100644 index 0000000..bd6e08f --- /dev/null +++ b/examples/parallel_for/index.html @@ -0,0 +1,350 @@ + + + + + + Intel® Threading Building Blocks. Samples on parallel_for algorithm + + + + + +

    + This directory has examples of the parallel_for algorithm. +

    + +
    +
    Directories
    + +
    +
    +
    seismic +
    Parallel seismic wave simulation. +
    tachyon +
    Parallel 2-D raytracer/renderer. +
    polygon_overlay +
    Simple polygon overlay. +
    game_of_life +
    Simple Game of life overlay. +
    +
    +
    +
    + Up to parent directory +
    +
    +
    Legal Information:
    + +
    +

    + Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
    * Other names and brands may be claimed as the property of others. +
    © 2017, Intel Corporation +

    +
    +
    + + + diff --git a/examples/parallel_for/polygon_overlay/Makefile b/examples/parallel_for/polygon_overlay/Makefile new file mode 100644 index 0000000..fc7c124 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/Makefile @@ -0,0 +1,90 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +NAME=pover +ARGS= +LIGHT_ARGS= --polys 10 --size 5x5 + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +include ../../common/gui/Makefile.gmake + +ifeq ($(UI),x) +UI_CXXFLAGS += -DX_FULLSYNC +endif # X + +override CXXFLAGS += $(UI_CXXFLAGS) + +SRCFILES = ../../common/gui/$(UI)video.cpp pover_video.cpp polymain.cpp polyover.cpp + +ifeq ($(shell uname), Linux) +LIBS+= -lrt +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +resources: +ifeq ($(UI),mac) + mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS + cp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist + cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents + cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj +endif # macOS* + +release: $(SRCFILES) resources +ifeq ($(compiler),xl) + # Avoiding "1586-346 (U) An error occurred during code generation. The code generation return code was 40." with -O3. + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb -ltbbmalloc $(LIBS) +else +ifeq ($(UI),mac) + $(CXX_UI) -O3 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES) +endif # macOS + $(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb -ltbbmalloc $(LIBS) +endif + +debug: $(SRCFILES) resources +ifeq ($(UI),mac) + $(CXX_UI) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -c $(MACUISOURCES) +endif # macOS + $(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) $(MACUIOBJS) -ltbb_debug -ltbbmalloc_debug $(LIBS) + +clean: + $(RM) $(EXE) *.o *.d +ifeq ($(UI),mac) + rm -rf $(NAME).app +endif + +test: +ifeq ($(UI),mac) + export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(ARGS) +else + $(run_cmd) ./$(EXE) $(ARGS) +endif + +light_test: +ifeq ($(UI),mac) + export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(LIGHT_ARGS) +else + $(run_cmd) ./$(EXE) $(LIGHT_ARGS) +endif diff --git a/examples/parallel_for/polygon_overlay/Makefile.windows b/examples/parallel_for/polygon_overlay/Makefile.windows new file mode 100644 index 0000000..95b2b9c --- /dev/null +++ b/examples/parallel_for/polygon_overlay/Makefile.windows @@ -0,0 +1,60 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=Pover +ARGS= +LIGHT_ARGS= --polys 10 --size 5x5 + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# The C++ compiler options + +# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw) +#UI = con +UI = gdi +#UI = dd + +# Machine architecture, auto-detected from TBB_TARGET_ARCH by default +# Use XARCH variable to change it. See index.html for more information +ARCH0 = $(TBB_TARGET_ARCH)- +ARCH1 = $(ARCH0:ia32-=x86) +ARCH2 = $(ARCH1:intel64-=AMD64) +XARCH = $(ARCH2:-=x86) + +MAKEINC = ../../common/gui/Makefile.win + +all: release test +release: compiler_check + @$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib tbbmalloc.lib $(LIBS)" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one +debug: compiler_check + @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib tbbmalloc_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\pover.res +test: + $(PROG) $(ARGS) +light_test: + $(PROG) $(LIGHT_ARGS) +compiler_check: + @echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + @cmd.exe /C del compiler_test diff --git a/examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln b/examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln new file mode 100644 index 0000000..77074dd --- /dev/null +++ b/examples/parallel_for/polygon_overlay/msvs/polygon_overlay.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pover", "pover.vcxproj", "{4BB7B455-1E09-41D3-BC89-6E67C9032F8C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + _GDIRelease|Win32 = _GDIRelease|Win32 + _GDIRelease|x64 = _GDIRelease|x64 + DD Debug|Win32 = DD Debug|Win32 + DD Debug|x64 = DD Debug|x64 + DD Release|Win32 = DD Release|Win32 + DD Release|x64 = DD Release|x64 + GDIDebug|Win32 = GDIDebug|Win32 + GDIDebug|x64 = GDIDebug|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.ActiveCfg = Release|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|Win32.Build.0 = Release|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.ActiveCfg = Release|x64 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}._GDIRelease|x64.Build.0 = Release|x64 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.ActiveCfg = DD Debug|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|Win32.Build.0 = DD Debug|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.ActiveCfg = DD Debug|x64 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Debug|x64.Build.0 = DD Debug|x64 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.ActiveCfg = DD Release|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|Win32.Build.0 = DD Release|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.ActiveCfg = DD Release|x64 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.DD Release|x64.Build.0 = DD Release|x64 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.ActiveCfg = Debug|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|Win32.Build.0 = Debug|Win32 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.ActiveCfg = Debug|x64 + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C}.GDIDebug|x64.Build.0 = Debug|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/parallel_for/polygon_overlay/msvs/pover.rc b/examples/parallel_for/polygon_overlay/msvs/pover.rc new file mode 100644 index 0000000..3eee795 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/msvs/pover.rc @@ -0,0 +1,61 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE 9, 1 +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj b/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj new file mode 100644 index 0000000..dc5e8f9 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/msvs/pover.vcxproj @@ -0,0 +1,448 @@ + + + + + DD Debug + Win32 + + + DD Debug + x64 + + + DD Release + Win32 + + + DD Release + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + pover + {4BB7B455-1E09-41D3-BC89-6E67C9032F8C} + pover + Win32Proj + + + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + X64 + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;tbbmalloc.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + X64 + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;tbbmalloc_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + + + + true + true + true + true + + + true + true + true + true + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_for/polygon_overlay/msvs/resource.h b/examples/parallel_for/polygon_overlay/msvs/resource.h new file mode 100644 index 0000000..af12e9e --- /dev/null +++ b/examples/parallel_for/polygon_overlay/msvs/resource.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by pover.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/examples/parallel_for/polygon_overlay/polymain.cpp b/examples/parallel_for/polygon_overlay/polymain.cpp new file mode 100644 index 0000000..c7c2125 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/polymain.cpp @@ -0,0 +1,620 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// Polygon overlay +// +// Don't want warnings about deprecated sscanf, getenv +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE +#endif +#define _MAIN_C_ 1 +#include +#include +#include +#include + +#include "tbb/tick_count.h" +#include "tbb/task_scheduler_init.h" +#include "pover_global.h" +#include "polyover.h" +#include "pover_video.h" +#include "polymain.h" + +using namespace std; + +#if _DEBUG +const char *faceNames[] = { "North", "East", "South", "West" }; +#endif + +/** +**/ +int main( int argc, char **argv) { + pover_video poly; + poly.threaded = true; + gVideo = &poly; + + if(!initializeVideo(argc, argv)) { + return 1; + } + + gIsGraphicalVersion = poly.graphic_display(); + if(argc > 1) { + if(!ParseCmdLine(argc, argv)) { + if(gIsGraphicalVersion) rt_sleep(10000); + // if graphical, we haven't opened the console window so all the error messages we + // so carefully wrote out disappeared into the ether. :( + exit(1); + } + } + + if(gCsvFilename != NULL) { +#define BUFLEN 1000 + std::string fname_buf = gCsvFilename; + fname_buf += ".csv"; + gCsvFile.open(fname_buf.c_str()); + } + + // we have gMapXSize and gMapYSize determining the number of "squares" + // we have g_xwinsize and g_ywinsize the total size of the window + // we also have BORDER_SIZE the size of the border between maps + // we need to determine + // g_polyBoxSize -- the number of pixels on each size of each square + + if(gIsGraphicalVersion) { + int xpixelsPerMap = (g_xwinsize - 4*BORDER_SIZE) / 3; // three maps, with borders between and outside + gMapXSize = xpixelsPerMap; // make the boxes one per pixel + gPolyXBoxSize = xpixelsPerMap / gMapXSize; + int ypixelsPerMap = (g_ywinsize - 2*BORDER_SIZE); // one map vertically + gMapYSize = ypixelsPerMap; // one pixel per box, rather. + + gPolyYBoxSize = ypixelsPerMap / gMapYSize; + if((gPolyXBoxSize == 0) || (gPolyYBoxSize == 0)) { + cout << "The display window is not large enough to show the maps" << std::endl; + int minxSize = 4*BORDER_SIZE + 3*gMapXSize; + int minySize = 2*BORDER_SIZE + gMapYSize; + cout << " Should be at least " << minxSize << " x " << minySize << "." << std::endl; + return 1; + } + map2XLoc = 2*BORDER_SIZE + gMapXSize * gPolyXBoxSize; + maprXLoc = 3*BORDER_SIZE + 2 * gMapXSize * gPolyXBoxSize; + + } + else { // not gIsGraphicalVersion + // gMapXSize, gMapYSize, gNPolygons defined in pover_global.h + } + + // create two polygon maps + SetRandomSeed(gMyRandomSeed); // for repeatability + + gVideo->main_loop(); +} + +void Usage(int argc, char **argv) { + char *cmdTail = strrchr(*argv, '\\'); + if(cmdTail == NULL) { + cmdTail = *argv; + } + else { + cmdTail++; + } + cout << cmdTail << " [threads[:threads2]] [--polys npolys] [--size nnnxnnn] [--seed nnn]" << std::endl; + cout << "Create polygon maps and overlay them." << std::endl << std::endl; + cout << "Parameters:" << std::endl; + cout << " threads[:threads2] - number of threads to run" << std::endl; + cout << " --polys npolys - number of polygons in each map" << std::endl; + cout << " --size nnnxnnn - size of each map (X x Y)" << std::endl; + cout << " --seed nnn - initial value of random number generator" << std::endl; + cout << " --csv filename - write timing data to CSV-format file" << std::endl; + cout << " --grainsize n - set grainsize to n" << std::endl; + cout << " --use_malloc - allocate polygons with malloc instead of scalable allocator" << std::endl; + cout << std::endl; + cout << "npolys must be smaller than the size of the map" << std::endl; + cout << std::endl; + exit(1); +} + +bool ParseCmdLine(int argc, char **argv ) { + bool error_found = false; + bool nPolysSpecified = false; + bool nMapSizeSpecified = false; + bool nSeedSpecified = false; + bool csvSpecified = false; + bool grainsizeSpecified = false; + bool mallocSpecified = false; + int origArgc = argc; + char** origArgv = argv; + unsigned int newnPolygons = gNPolygons; + unsigned int newSeed = gMyRandomSeed; + unsigned int newX = gMapXSize; + unsigned int newY = gMapYSize; + unsigned int newGrainSize = gGrainSize; + argc--; argv++; + if(argc > 0 && isdigit((*argv)[0])) { + // first argument is one or two numbers, specifying how mny threads to run + char* end; gThreadsHigh = gThreadsLow = (int)strtol(argv[0],&end,0); + switch( *end) { + case ':': gThreadsHigh = (int)strtol(end+1,0,0); break; + case '\0': break; + default: cout << "Unexpected character in thread specifier: " << *end << std::endl; break; + } + if(gThreadsLow > gThreadsHigh) { + int t = gThreadsLow; + gThreadsLow = gThreadsHigh; + gThreadsHigh = t; + } + argv++; argc--; + } + while(argc > 0) { + // format 1: --size nnnxnnn, where nnn in {0 .. 9}+ -- size of map in "squares" + if(!strncmp("--size", *argv, (size_t)6)) { + if(nMapSizeSpecified) { + cout << " Error: map size multiply specified" << std::endl; + error_found = true; + } + else { + argv++; argc--; + if(argc == 0) { + error_found = true; + cout << " Error: --size must have a value" << std::endl; + } + if(strchr(*argv, 'x') != strrchr(*argv,'x')) { + // more than one 'x' + cout << "Error: map size should be nnnxnnn (" << *argv << ")" << std::endl; + error_found = true; + } + else { + int rval; + rval = sscanf(*argv, "%ux%u", &newX, &newY); + if(rval != 2) { + cout << "Error parsing map size (format should be nnnxnnn (" << *argv << ")" << std::endl; + error_found = true; + } + if(newX == 0 || newY == 0) { + cout << "Error: size of map should be greater than 0 (" << *argv << ")" << std::endl; + error_found = true; + } + } + } + argc--; argv++; + } + // format 2: --seed nnn -- initial random number seed + else if(!strncmp("--seed", *argv, (size_t)6)) { + argv++; argc--; + if(nSeedSpecified) { + cout << "Error: new seed multiply specified" << std::endl; + error_found = true; + } + else { + nSeedSpecified = true; + int rtval = sscanf(*argv, "%u", &newSeed); + if(rtval == 0) { + cout << "Error: --seed should be an unsigned number (instead of " << *argv << ")" << std::endl; + error_found = true; + } + } + argv++; argc--; + } + // format 3: --polys n[n] -- number of polygons in each map + else if(!strncmp("--polys", *argv, (size_t)7)) { + //unsigned int newnPolygons; + argv++; argc--; + if(nPolysSpecified) { + cout << "Error: number of polygons multiply-specified" << std::endl; + error_found = true; + }else { + int rtval = sscanf(*argv, "%u", &newnPolygons); + if(newnPolygons == 0) { + cout << "Error: number of polygons must be greater than 0 (" << *argv << ")" << std::endl; + } + } + argv++; argc--; + } + // format 4: --csv -- name of CSV output file ("xxx" for "xxx.csv") + else if(!strncmp("--csv", *argv, (size_t)5)) { + argv++; argc--; + if(csvSpecified) { + cout << "Error: Multiple specification of CSV file" << std::endl; + error_found = true; + } + else { + gCsvFilename = *argv; + argv++; argc--; + csvSpecified = true; + } + } + else if(!strncmp("--grainsize", *argv, (size_t)11)) { + argv++; argc--; + if(grainsizeSpecified) { + cout << "Error: Multiple specification of grainsize" << std::endl; + error_found = true; + } + else { + int grval = sscanf(*argv, "%u", &newGrainSize); + grainsizeSpecified = true; + if(newGrainSize == 0) { + cout << "Error: grainsize must be greater than 0" << std::endl; + error_found = true; + } + } + argv++; argc--; + } + else if(!strncmp("--use_malloc", *argv, (size_t)12)) { + argv++; argc--; + if(mallocSpecified) { + cout << "Error: --use_malloc multiply-specified" << std::endl; + error_found = true; + } + else { + mallocSpecified = true; + gMBehavior = UseMalloc; + } + } + else { + cout << "Error: unrecognized argument: " << *argv << std::endl; + error_found = true; + argv++; argc--; + } + } + if(!error_found) { + if(newX * newY < newnPolygons) { + error_found = true; + cout << "Error: map size should not be smaller than the number of polygons (gNPolygons = " << newnPolygons << ", map size " << newX << "x" << newY << ")" << std::endl; + } + } + if(!error_found) { + gMapXSize = newX; + gMapYSize = newY; + gNPolygons = newnPolygons; + gMyRandomSeed = newSeed; + gGrainSize = (int)newGrainSize; + } + else { + Usage(origArgc, origArgv); + } + return !error_found; +} + +// create a polygon map with at least gNPolygons polygons. +// Usually more than gNPolygons polygons will be generated, because the +// process of growing the polygons results in holes. +bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB) { + bool error_found = false; + int *validPolys; + int *validSide; + int maxSides; + RPolygon *newPoly; + + if(xSize <= 0) { + cout << "xSize (" << xSize << ") should be > 0." << std::endl; + error_found = true; + } + if(ySize <= 0) { + cout << "ySize (" << ySize << ") should be > 0." << std::endl; + error_found = true; + } + if(gNPolygons > (xSize * ySize)) { + cout << "gNPolygons (" << gNPolygons << ") should be less than " << (xSize * ySize) << std::endl; + error_found = true; + } + if(error_found) return false; + // the whole map is [xSize x ySize] squares + // the way we create the map is to + // 1) pick nPolygon discrete squares on an [xSize x ySize] grid + // 2) while there are unused squares on the grid + // 3) pick a polygon with a side that has unused squares on a side + // 4) expand the polygon by 1 to occupy the unused squares + // + // Continue until every square on the grid is occupied by a polygon + int *tempMap; + tempMap = (int *)malloc(xSize * ySize * sizeof(int)); + for(int i=0;i < xSize; i++) { + for(int j=0;j < ySize; j++) { + tempMap[i*ySize + j] = 0; + } + } + + // *newMap = new vector; + *newMap = new Polygon_map_t; + (*newMap)->reserve(gNPolygons + 1); // how much bigger does this need to be on average? + (*newMap)->push_back(RPolygon(0,0,xSize-1, ySize-1)); + for(int i=0; i < gNPolygons; i++) { + int nX; + int nY; + do { // look for an empty square. + nX = NextRan(xSize); + nY = NextRan(ySize); + } while(tempMap[nX * ySize + nY] != 0); + int nR = (maxR * NextRan(1000)) / 999; + int nG = (maxG * NextRan(1000)) / 999; + int nB = (maxB * NextRan(1000)) / 999; + (*newMap)->push_back(RPolygon(nX,nY,nX,nY,nR,nG,nB)); + tempMap[nX * ySize + nY] = i+1; // index of this polygon + 1 + } + // now have to grow polygons to fill the space. + validPolys = (int *)malloc(4*gNPolygons * sizeof(int)); + validSide = (int *)malloc(4*gNPolygons * sizeof(int)); + for(int i=0;i 0) { + int indx = NextRan(maxSides); + int polyIndx = validPolys[indx]; + int checkSide = validSide[indx]; + int xlow, xhigh, ylow, yhigh; + int xlnew, xhnew, ylnew, yhnew; + (**newMap)[polyIndx].get(&xlow,&ylow,&xhigh,&yhigh); + xlnew = xlow; + xhnew = xhigh; + ylnew = ylow; + yhnew = yhigh; + // can this polygon be expanded along the chosen side? + switch(checkSide) { + case NORTH_SIDE: + // y-1 from xlow to xhigh + ylow = yhigh = (ylow - 1); + ylnew--; + break; + case EAST_SIDE: + // x+1 from ylow to yhigh + xlow = xhigh = (xhigh + 1); + xhnew++; + break; + case SOUTH_SIDE: + // y+1 from xlow to xhigh + ylow = yhigh = (yhigh+1); + yhnew++; + break; + case WEST_SIDE: + // x-1 from ylow to yhigh + xlow = xhigh = (xlow - 1); + xlnew--; + break; + } + bool okay_to_extend = !(((xlow < 0) || (xlow >= xSize)) || ((ylow < 0) || (ylow >= ySize))); + for(int ii = xlow; (ii <= xhigh) && okay_to_extend; ii++) { + for(int jj=ylow; (jj <= yhigh) && okay_to_extend; jj++) { + okay_to_extend = tempMap[ii*ySize + jj] == 0; + } + } + if(okay_to_extend) { + (**newMap)[polyIndx].set(xlnew,ylnew,xhnew,yhnew); + for(int ii = xlow; ii <= xhigh; ii++) { + for(int jj=ylow; jj <= yhigh && okay_to_extend; jj++) { + tempMap[ii*ySize + jj] = polyIndx; + } + } + } + else { + // once we cannot expand along a side, we will never be able to; remove from the list. + for(int i=indx + 1; i < maxSides; i++) { + validPolys[i-1] = validPolys[i]; + validSide[i-1] = validSide[i]; + } + maxSides--; + } + } + + // Once no polygons can be grown, look for unused squares, and fill them with polygons. + for(int j=0;jpush_back(RPolygon(i,j,ilen,jlen,nR,nG,nB)); + gNPolygons++; + for(int ii=i; ii<=ilen;ii++) { + for(int jj=j;jj<=jlen;jj++) { + tempMap[ii*ySize + jj] = gNPolygons; + } + } + } + } + } + +#if _DEBUG + if(!gIsGraphicalVersion) { + cout << std::endl << "Final Map:" << std::endl; + for(int j=0; j < ySize; j++ ) { + cout << "Row " << setw(2) << j << ":"; + for(int i=0;i=limit)) {cout << "checkMap error: " << str << " out of range (" << n << ")" << std::endl;anError=true;} +#define xRangeCheck(str,n) rangeCheck(str,n,gMapXSize) +#define yRangeCheck(str,n) rangeCheck(str,n,gMapYSize) + // The first polygon is the whole map. + bool anError = false; + int *cArray; + if(checkMap->size() <= 0) { + cout << "checkMap error: no polygons in map" << std::endl; + return; + } + // mapXhigh and mapYhigh are inclusive, that is, if the map is 5x5, those values would be 4. + int mapXhigh, mapYhigh, mapLowX, mapLowY; + int gMapXSize, gMapYSize; + (*checkMap)[0].get(&mapLowX, &mapLowY, &mapXhigh, &mapYhigh); + if((mapLowX !=0) || (mapLowY != 0)) { + cout << "checkMap error: map origin not (0,0) (X=" << mapLowX << ", Y=" << mapLowY << ")" << std::endl; + anError = true; + } + if((mapXhigh < 0) || (mapYhigh < 0)) { + cout << "checkMap error: no area in map (X=" << mapXhigh << ", Y=" << mapYhigh << ")" << std::endl; + anError = true; + } + if(anError) return; + // bounds for array. + gMapXSize = mapXhigh + 1; + gMapYSize = mapYhigh + 1; + cArray = (int *)malloc(sizeof(int)*(gMapXSize*gMapYSize)); + + for(int i=0; isize()) && !anError; p++) { + (*checkMap)[p].get(&xlow, &ylow, &xhigh, &yhigh); + xRangeCheck("xlow", xlow); + yRangeCheck("ylow", ylow); + xRangeCheck("xhigh", xhigh); + yRangeCheck("yhigh", yhigh); + if(xlow>xhigh) { + cout << "checkMap error: xlow > xhigh (" << xlow << "," << xhigh << ")" << std::endl; + anError = true; + } + if(ylow>yhigh) { + cout << "checkMap error: ylow > yhigh (" << ylow << "," << yhigh << ")" << std::endl; + anError = true; + } + for(int ii = xlow; ii <= xhigh; ii++) { + for(int jj = ylow; jj <= yhigh; jj++) { + if(cArray[indx(ii,jj)] != 0) { + cout << "checkMap error: polygons " << cArray[indx(ii,jj)] << " and " << p << " intersect" << std::endl; + anError = true; + } + cArray[indx(ii,jj)] = p; + } + } + } + for(int ii=0; ii < gMapXSize; ii++) { + for(int jj=0; jj < gMapYSize; jj++) { + if(cArray[indx(ii,jj)] == 0) { + cout << "checkMap error: block(" << ii << ", " << jj << ") not in any polygon" << std::endl; + anError = true; + } + } + } + free(cArray); +} + +bool CompOnePolygon(RPolygon &p1, RPolygon &p2) { + int xl1, xh1, yl1, yh1; + int xl2, xh2, yl2, yh2; + p1.get(&xl1, &yl1, &xh1, &yh1); + p2.get(&xl2, &yl2, &xh2, &yh2); + if(yl1>yl2) return true; + if(yl1 xl2); +} + +bool PolygonsEqual(RPolygon *p1, RPolygon *p2) { + int xl1, xh1, yl1, yh1; + int xl2, xh2, yl2, yh2; + p1->get(&xl1, &yl1, &xh1, &yh1); + p2->get(&xl2, &yl2, &xh2, &yh2); + return ((xl1 == xl2) && (yl1==yl2) && (xh1 == xh2) && (yh1 == yh2)); +} + +bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2) { + // create two new polygon maps, copy the pointers from the original to these. + // we have to skip the first polygon, which is the size of the whole map + Polygon_map_t *t1, *t2; + bool is_ok = true; + t1 = new Polygon_map_t; + t1->reserve(map1->size()); + for(unsigned int i=1;isize(); i++) { + t1->push_back(map1->at(i)); + } + t2 = new Polygon_map_t; + t2->reserve(map2->size()); + for(unsigned int i=1;isize();i++) { + t2->push_back(map2->at(i)); + } + // sort the two created maps by (xlow, ylow) + sort(t1->begin(), t1->end()); + sort(t2->begin(), t2->end()); + // compare each element of both maps. + if(t1->size() != t2->size()) { + cout << "Error: maps not the same size ( " << int(t1->size()) << " vs " << int(t2->size()) << ")." << std::endl; + } + int maxSize = (int)((t1->size() < t2->size()) ? t1->size() : t2->size()); + for(int i=0; i < maxSize; i++) { + if(!PolygonsEqual(&((*t1)[i]), &((*t2)[i]))) { + cout << "Error: polygons unequal (" << (*t1)[i] << " vs " << (*t2)[i] << std::endl; + is_ok = false; + } + } + delete t1; + delete t2; + return is_ok; +} + +void SetRandomSeed(int newSeed) { + srand((unsigned)newSeed); +} + +int NextRan(int n) { + // assert(n > 1); + // if we are given 1, we will just return 0 + //assert(n < RAND_MAX); + int rrand = rand() << 15 | rand(); + if(rrand < 0) rrand = -rrand; + return rrand % n; +} + +std::ostream& operator<<(std::ostream& s, const RPolygon &p) { + int xl, yl, xh, yh; + p.get(&xl, &yl, &xh, &yh); + return s << "[(" << xl << "," << yl << ")-(" << xh << "," << yh << ")] "; +} diff --git a/examples/parallel_for/polygon_overlay/polymain.h b/examples/parallel_for/polygon_overlay/polymain.h new file mode 100644 index 0000000..d351bff --- /dev/null +++ b/examples/parallel_for/polygon_overlay/polymain.h @@ -0,0 +1,45 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "pover_global.h" // for declaration of DEFINE and INIT + +DEFINE Polygon_map_t *gPolymap1 INIT(0); +DEFINE Polygon_map_t *gPolymap2 INIT(0); +DEFINE Polygon_map_t *gResultMap INIT(0); + +extern void Usage(int argc, char **argv); + +extern bool ParseCmdLine(int argc, char **argv ); + +extern bool GenerateMap(Polygon_map_t **newMap, int xSize, int ySize, int gNPolygons, colorcomp_t maxR, colorcomp_t maxG, colorcomp_t maxB); + +extern bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh); + +extern void CheckPolygonMap(Polygon_map_t *checkMap); + +extern bool CompOnePolygon(RPolygon *p1, RPolygon *p2); + +extern bool PolygonsEqual(RPolygon *p1, RPolygon *p2); + +extern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2); + +extern void SetRandomSeed(int newSeed); + +extern int NextRan(int n); diff --git a/examples/parallel_for/polygon_overlay/polyover.cpp b/examples/parallel_for/polygon_overlay/polyover.cpp new file mode 100644 index 0000000..2ea34a1 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/polyover.cpp @@ -0,0 +1,668 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// Polygon overlay +// +#include +#include +#include +#include +#include +#include "tbb/tick_count.h" +#include "tbb/blocked_range.h" +#include "tbb/task_scheduler_init.h" +#include "tbb/parallel_for.h" +#include "tbb/mutex.h" +#include "tbb/spin_mutex.h" +#include "polyover.h" +#include "polymain.h" +#include "pover_video.h" + +using namespace std; + +/*! +* @brief intersects a polygon with a map, adding any results to output map +* +* @param[out] resultMap output map (must be allocated) +* @param[in] polygon to be intersected +* @param[in] map intersected against +* @param[in] lock to use when adding output polygons to result map +* +*/ +void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t *map2, tbb::spin_mutex *rMutex) { + int r1, g1, b1, r2, g2, b2; + int myr=0; + int myg=0; + int myb=0; + int p1Area = myPoly->area(); + for(unsigned int j=1; (j < map2->size()) && (p1Area > 0); j++) { + RPolygon *p2 = &((*map2)[j]); + RPolygon *pnew; + int newxMin, newxMax, newyMin, newyMax; + myPoly->getColor(&r1, &g1, &b1); + if(PolygonsOverlap(myPoly, p2, newxMin, newyMin, newxMax, newyMax)) { + p2->getColor(&r2, &g2, &b2); + myr = r1 + r2; + myg = g1 + g2; + myb = b1 + b2; + p1Area -= (newxMax-newxMin+1)*(newyMax - newyMin + 1); + if(rMutex) { + tbb::spin_mutex::scoped_lock lock(*rMutex); + resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb)); + } + else { + resultMap->push_back(RPolygon(newxMin, newyMin, newxMax, newyMax, myr, myg, myb)); + } + } + } +} + +/*! +* @brief Serial version of polygon overlay +* @param[out] output map +* @param[in] first map (map that individual polygons are taken from) +* @param[in] second map (map passed to OverlayOnePolygonWithMap) +*/ +void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2) { + cout << "SerialOverlayMaps called" << std::endl; + *resultMap = new Polygon_map_t; + + RPolygon *p0 = &((*map1)[0]); + int mapxSize, mapySize, ignore1, ignore2; + p0->get(&ignore1, &ignore2, &mapxSize, &mapySize); + (*resultMap)->reserve(mapxSize*mapySize); // can't be any bigger than this + // push the map size as the first polygon, + (*resultMap)->push_back(RPolygon(0,0,mapxSize, mapySize)); + for(unsigned int i=1; i < map1->size(); i++) { + RPolygon *p1 = &((*map1)[i]); + OverlayOnePolygonWithMap(*resultMap, p1, map2, NULL); + } +} + +/*! +* @class ApplyOverlay +* @brief Simple version of parallel overlay (make parallel on polygons in map1) +*/ +class ApplyOverlay { + Polygon_map_t *m_map1, *m_map2, *m_resultMap; + tbb::spin_mutex *m_rMutex; +public: + /*! + * @brief functor to apply + * @param[in] r range of polygons to intersect from map1 + */ + void operator()( const tbb::blocked_range & r) const { + PRINT_DEBUG("From " << r.begin() << " to " << r.end()); + for(int i=r.begin(); i != r.end(); i++) { + RPolygon *myPoly = &((*m_map1)[i]); + OverlayOnePolygonWithMap(m_resultMap, myPoly, m_map2, m_rMutex); + } + } + ApplyOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) : + m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {} +}; + +/*! +* @brief apply the parallel algorithm +* @param[out] result_map generated map +* @param[in] polymap1 first map to be applied (algorithm is parallel on this map) +* @param[in] polymap2 second map. +*/ +void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2) { +// ----------------------------------- + bool automatic_threadcount = false; + + if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) { + gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic; + automatic_threadcount = true; + } + result_map = new Polygon_map_t; + + RPolygon *p0 = &(polymap1[0]); + int mapxSize, mapySize, ignore1, ignore2; + p0->get(&ignore1, &ignore2, &mapxSize, &mapySize); + result_map->reserve(mapxSize*mapySize); // can't be any bigger than this + // push the map size as the first polygon, + tbb::spin_mutex *resultMutex = new tbb::spin_mutex(); + int grain_size = gGrainSize; + + for(int nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) { + tbb::task_scheduler_init init(nthreads); + if(gIsGraphicalVersion) { + RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0); // Clear the output space + delete xp; + } + // put size polygon in result map + result_map->push_back(RPolygon(0,0,mapxSize, mapySize)); + + tbb::tick_count t0 = tbb::tick_count::now(); + tbb::parallel_for (tbb::blocked_range(1,(int)(polymap1.size()),grain_size), ApplyOverlay(result_map, &polymap1, &polymap2, resultMutex)); + tbb::tick_count t1 = tbb::tick_count::now(); + + double naiveParallelTime = (t1-t0).seconds() * 1000; + cout << "Naive parallel with spin lock and "; + if(automatic_threadcount) cout << "automatic"; + else cout << nthreads; + cout << ((nthreads == 1) ? " thread" : " threads"); + cout << " took " << naiveParallelTime << " msec : speedup over serial " << (gSerialTime / naiveParallelTime) << std::endl; + if(gCsvFile.is_open()) { + gCsvFile << "," << naiveParallelTime; + } +#if _DEBUG + CheckPolygonMap(result_map); + ComparePolygonMaps(result_map, gResultMap); +#endif + result_map->clear(); + } + delete resultMutex; + if(gCsvFile.is_open()) { + gCsvFile << std::endl; + } +// ----------------------------------- +} + +template +void split_at( Flagged_map_t& in_map, Flagged_map_t &left_out, Flagged_map_t &right_out, const T median) { + left_out.reserve(in_map.size()); + right_out.reserve(in_map.size()); + for(Flagged_map_t::iterator i = in_map.begin(); i != in_map.end(); ++i ) { + RPolygon *p = i->p(); + if(p->xmax() < median) { + // in left map + left_out.push_back(*i); + } + else if(p->xmin() >= median) { + right_out.push_back(*i); + // in right map + } + else { + // in both maps. + left_out.push_back(*i); + right_out.push_back(RPolygon_flagged(p, true)); + } + } +} + +// range that splits the maps as well as the range. the flagged_map_t are +// vectors of pointers, and each range owns its maps (has to free them on destruction.) +template +class blocked_range_with_maps { + + typedef blocked_range my_range_type; + +private: + + my_range_type my_range; + Flagged_map_t my_map1; + Flagged_map_t my_map2; + +public: + + blocked_range_with_maps( + T begin, T end, typename my_range_type::size_type my_grainsize, + Polygon_map_t *p1, Polygon_map_t *p2 + ) + : my_range(begin, end, my_grainsize) + { + my_map1.reserve(p1->size()); + my_map2.reserve(p2->size()); + for(int i=1; i < p1->size(); ++i) { + my_map1.push_back(RPolygon_flagged(&((*p1)[i]), false)); + } + for(int i=1; i < p2->size(); ++i) { + my_map2.push_back(RPolygon_flagged(&(p2->at(i)), false)); + } + } + + // copy-constructor required for deep copy of flagged maps. One copy is done at the start of the + // parallel for. + blocked_range_with_maps(const blocked_range_with_maps& other): my_range(other.my_range), my_map1(other.my_map1), my_map2(other.my_map2) { } + bool empty() const { return my_range.empty(); } + bool is_divisible() const { return my_range.is_divisible(); } + +#if _DEBUG + void check_my_map() { + assert(my_range.begin() <= my_range.end()); + for(Flagged_map_t::iterator ci = my_map1.begin(); ci != my_map1.end(); ++ci) { + RPolygon *rp = ci->p(); + assert(rp->xmax() >= my_range.begin()); + assert(rp->xmin() < my_range.end()); + } + for(Flagged_map_t::iterator ci = my_map2.begin(); ci != my_map2.end(); ++ci) { + RPolygon *rp = ci->p(); + assert(rp->xmax() >= my_range.begin()); + assert(rp->xmin() < my_range.end()); + } + } + + void dump_map( Flagged_map_t& mapx) { + cout << " ** MAP **\n"; + for( Flagged_map_t::iterator ci = mapx.begin(); ci != mapx.end(); ++ci) { + cout << *(ci->p()); + if(ci->isDuplicate()) { + cout << " -- is_duplicate"; + } + cout << "\n"; + } + cout << "\n"; + } +#endif + + blocked_range_with_maps(blocked_range_with_maps& lhs_r, split ) : my_range(my_range_type(lhs_r.my_range, split())) { + // lhs_r.my_range makes my_range from [median, high) and rhs_r.my_range from [low, median) + Flagged_map_t original_map1 = lhs_r.my_map1; + Flagged_map_t original_map2 = lhs_r.my_map2; + lhs_r.my_map1.clear(); + lhs_r.my_map2.clear(); + split_at(original_map1, lhs_r.my_map1, my_map1, my_range.begin()); + split_at(original_map2, lhs_r.my_map2, my_map2, my_range.begin()); +#if _DEBUG + this->check_my_map(); + lhs_r.check_my_map(); +#endif + } + + const my_range_type& range() const { return my_range; } + Flagged_map_t& map1() { return my_map1; } + Flagged_map_t& map2() { return my_map2; } +}; + +/*! +* @class ApplySplitOverlay +* @brief parallel by columnar strip +*/ +class ApplySplitOverlay { + Polygon_map_t *m_map1, *m_map2, *m_resultMap; + tbb::spin_mutex *m_rMutex; +public: + /*! + * @brief functor for columnar parallel version + * @param[in] r range of map to be operated on + */ + void operator()(/*const*/ blocked_range_with_maps & r) const { +#ifdef _DEBUG + // if we are debugging, serialize the method. That way we can + // see what is happening in each strip without the interleaving + // confusing things. + tbb::spin_mutex::scoped_lock lock(*m_rMutex); + cout << unitbuf << "From " << r.range().begin() << " to " << r.range().end()-1 << std::endl; +#endif + // get yMapSize + int r1, g1, b1, r2, g2, b2; + int myr=-1; + int myg=-1; + int myb=-1; + int i1, i2, i3, yMapSize; + (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize); + + Flagged_map_t &fmap1 = r.map1(); + Flagged_map_t &fmap2 = r.map2(); + + // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged + // as duplicate, don't add the result to the output map. We can still + // intersect them, because we are keeping track of how much of the polygon + // is left over from intersecting, and quitting when the polygon is + // used up. + + for(unsigned int ii=0; ii < fmap1.size(); ii++) { + RPolygon *p1 = fmap1[ii].p(); + bool is_dup = fmap1[ii].isDuplicate(); + int parea = p1->area(); + p1->getColor(&r1, &g1, &b1); + for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) { + int xl, yl, xh, yh; + RPolygon *p2 = fmap2[jj].p(); + if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) { + if(!(is_dup && fmap2[jj].isDuplicate())) { + p2->getColor(&r2, &g2, &b2); + myr = r1 + r2; + myg = g1 + g2; + myb = b1 + b2; +#ifdef _DEBUG +#else + tbb::spin_mutex::scoped_lock lock(*m_rMutex); +#endif + (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb)); + } + parea -= (xh-xl+1)*(yh-yl+1); + } + } + } + } + + ApplySplitOverlay(Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2, tbb::spin_mutex *rmutex) : + m_resultMap(resultMap), m_map1(map1), m_map2(map2), m_rMutex(rmutex) {} +}; + + +/*! +* @brief intersects two maps strip-wise +* +* @param[out] resultMap output map (must be allocated) +* @param[in] polymap1 map to be intersected +* @param[in] polymap2 map to be intersected +*/ +void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) { + int nthreads; + bool automatic_threadcount = false; + double domainSplitParallelTime; + tbb::tick_count t0, t1; + tbb::spin_mutex *resultMutex; + if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) { + gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic; + automatic_threadcount = true; + } + *result_map = new Polygon_map_t; + + RPolygon *p0 = &((*polymap1)[0]); + int mapxSize, mapySize, ignore1, ignore2; + p0->get(&ignore1, &ignore2, &mapxSize, &mapySize); + (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this + resultMutex = new tbb::spin_mutex(); + + int grain_size; +#ifdef _DEBUG + grain_size = gMapXSize / 4; +#else + grain_size = gGrainSize; +#endif + for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) { + tbb::task_scheduler_init init(nthreads); + if(gIsGraphicalVersion) { + RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0); // Clear the output space + delete xp; + } + // push the map size as the first polygon, + (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize)); + t0 = tbb::tick_count::now(); + tbb::parallel_for (blocked_range_with_maps(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlay((*result_map), polymap1, polymap2, resultMutex)); + t1 = tbb::tick_count::now(); + domainSplitParallelTime = (t1-t0).seconds()*1000; + cout << "Splitting parallel with spin lock and "; + if(automatic_threadcount) cout << "automatic"; + else cout << nthreads; + cout << ((nthreads == 1) ? " thread" : " threads"); + cout << " took " << domainSplitParallelTime << " msec : speedup over serial " << (gSerialTime / domainSplitParallelTime) << std::endl; + if(gCsvFile.is_open()) { + gCsvFile << "," << domainSplitParallelTime; + } +#if _DEBUG + CheckPolygonMap(*result_map); + ComparePolygonMaps(*result_map, gResultMap); +#endif + (*result_map)->clear(); + + } + delete resultMutex; + if(gCsvFile.is_open()) { + gCsvFile << std::endl; + } +} + +class ApplySplitOverlayCV { + Polygon_map_t *m_map1, *m_map2; + concurrent_Polygon_map_t *m_resultMap; +public: + /*! + * @brief functor for columnar parallel version + * @param[in] r range of map to be operated on + */ + void operator()(blocked_range_with_maps & r) const { + // get yMapSize + int r1, g1, b1, r2, g2, b2; + int myr=-1; + int myg=-1; + int myb=-1; + int i1, i2, i3, yMapSize; + (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize); + + Flagged_map_t &fmap1 = r.map1(); + Flagged_map_t &fmap2 = r.map2(); + + // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged + // as duplicate, don't add the result to the output map. We can still + // intersect them, because we are keeping track of how much of the polygon + // is left over from intersecting, and quitting when the polygon is + // used up. + + for(unsigned int ii=0; ii < fmap1.size(); ii++) { + RPolygon *p1 = fmap1[ii].p(); + bool is_dup = fmap1[ii].isDuplicate(); + int parea = p1->area(); + p1->getColor(&r1, &g1, &b1); + for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) { + int xl, yl, xh, yh; + RPolygon *p2 = fmap2[jj].p(); + if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) { + if(!(is_dup && fmap2[jj].isDuplicate())) { + p2->getColor(&r2, &g2, &b2); + myr = r1 + r2; + myg = g1 + g2; + myb = b1 + b2; + (*m_resultMap).push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb)); + } + parea -= (xh-xl+1)*(yh-yl+1); + } + } + } + } + + ApplySplitOverlayCV(concurrent_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) : + m_resultMap(resultMap), m_map1(map1), m_map2(map2) {} +}; + + +/*! +* @brief intersects two maps strip-wise, accumulating into a concurrent_vector +* +* @param[out] resultMap output map (must be allocated) +* @param[in] polymap1 map to be intersected +* @param[in] polymap2 map to be intersected +*/ +void SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) { + int nthreads; + bool automatic_threadcount = false; + double domainSplitParallelTime; + tbb::tick_count t0, t1; + if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) { + gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic; + automatic_threadcount = true; + } + *result_map = new concurrent_Polygon_map_t; + + RPolygon *p0 = &((*polymap1)[0]); + int mapxSize, mapySize, ignore1, ignore2; + p0->get(&ignore1, &ignore2, &mapxSize, &mapySize); + // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this + + int grain_size; +#ifdef _DEBUG + grain_size = gMapXSize / 4; +#else + grain_size = gGrainSize; +#endif + for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) { + tbb::task_scheduler_init init(nthreads); + if(gIsGraphicalVersion) { + RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0); // Clear the output space + delete xp; + } + // push the map size as the first polygon, + (*result_map)->push_back(RPolygon(0,0,mapxSize, mapySize)); + t0 = tbb::tick_count::now(); + tbb::parallel_for (blocked_range_with_maps(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayCV((*result_map), polymap1, polymap2)); + t1 = tbb::tick_count::now(); + domainSplitParallelTime = (t1-t0).seconds()*1000; + cout << "Splitting parallel with concurrent_vector and "; + if(automatic_threadcount) cout << "automatic"; + else cout << nthreads; + cout << ((nthreads == 1) ? " thread" : " threads"); + cout << " took " << domainSplitParallelTime << " msec : speedup over serial " << (gSerialTime / domainSplitParallelTime) << std::endl; + if(gCsvFile.is_open()) { + gCsvFile << "," << domainSplitParallelTime; + } +#if _DEBUG + { + + Polygon_map_t s_result_map; + for(concurrent_Polygon_map_t::const_iterator ci = (*result_map)->begin(); ci != (*result_map)->end(); ++ci) { + s_result_map.push_back(*ci); + } + CheckPolygonMap(&s_result_map); + ComparePolygonMaps(&s_result_map, gResultMap); + } +#endif + (*result_map)->clear(); + + } + + if(gCsvFile.is_open()) { + gCsvFile << std::endl; + } + +} + +// ------------------------------------------------------ + +class ApplySplitOverlayETS { + Polygon_map_t *m_map1, *m_map2; + ETS_Polygon_map_t *m_resultMap; +public: + /*! + * @brief functor for columnar parallel version + * @param[in] r range of map to be operated on + */ + void operator()(blocked_range_with_maps & r) const { + // get yMapSize + int r1, g1, b1, r2, g2, b2; + int myr=-1; + int myg=-1; + int myb=-1; + int i1, i2, i3, yMapSize; + (*m_map1)[0].get(&i1, &i2, &i3, &yMapSize); + + Flagged_map_t &fmap1 = r.map1(); + Flagged_map_t &fmap2 = r.map2(); + + // When intersecting polygons from fmap1 and fmap2, if BOTH are flagged + // as duplicate, don't add the result to the output map. We can still + // intersect them, because we are keeping track of how much of the polygon + // is left over from intersecting, and quitting when the polygon is + // used up. + + for(unsigned int ii=0; ii < fmap1.size(); ii++) { + RPolygon *p1 = fmap1[ii].p(); + bool is_dup = fmap1[ii].isDuplicate(); + int parea = p1->area(); + p1->getColor(&r1, &g1, &b1); + for(unsigned int jj=0;(jj < fmap2.size()) && (parea > 0); jj++) { + int xl, yl, xh, yh; + RPolygon *p2 = fmap2[jj].p(); + if(PolygonsOverlap(p1, p2, xl, yl, xh, yh)) { + if(!(is_dup && fmap2[jj].isDuplicate())) { + p2->getColor(&r2, &g2, &b2); + myr = r1 + r2; + myg = g1 + g2; + myb = b1 + b2; + (*m_resultMap).local().push_back(RPolygon(xl, yl, xh, yh, myr, myg, myb)); + } + parea -= (xh-xl+1)*(yh-yl+1); + } + } + } + } + + ApplySplitOverlayETS(ETS_Polygon_map_t *resultMap, Polygon_map_t *map1, Polygon_map_t *map2 ) : + m_resultMap(resultMap), m_map1(map1), m_map2(map2) {} +}; + + +/*! +* @brief intersects two maps strip-wise, accumulating into an ets variable +* +* @param[out] resultMap output map (must be allocated) +* @param[in] polymap1 map to be intersected +* @param[in] polymap2 map to be intersected +*/ +void SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2) { + int nthreads; + bool automatic_threadcount = false; + double domainSplitParallelTime; + tbb::tick_count t0, t1; + if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic ) { + gThreadsLow = gThreadsHigh = tbb::task_scheduler_init::automatic; + automatic_threadcount = true; + } + *result_map = new ETS_Polygon_map_t; + + RPolygon *p0 = &((*polymap1)[0]); + int mapxSize, mapySize, ignore1, ignore2; + p0->get(&ignore1, &ignore2, &mapxSize, &mapySize); + // (*result_map)->reserve(mapxSize*mapySize); // can't be any bigger than this + + int grain_size; +#ifdef _DEBUG + grain_size = gMapXSize / 4; +#else + grain_size = gGrainSize; +#endif + for(nthreads = gThreadsLow; nthreads <= gThreadsHigh; nthreads++) { + tbb::task_scheduler_init init(nthreads); + if(gIsGraphicalVersion) { + RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0); // Clear the output space + delete xp; + } + // push the map size as the first polygon, + // This polygon needs to be first, so we can push it at the start of a combine. + // (*result_map)->local.push_back(RPolygon(0,0,mapxSize, mapySize)); + t0 = tbb::tick_count::now(); + tbb::parallel_for (blocked_range_with_maps(0,(int)(mapxSize+1),grain_size, polymap1, polymap2), ApplySplitOverlayETS((*result_map), polymap1, polymap2)); + t1 = tbb::tick_count::now(); + domainSplitParallelTime = (t1-t0).seconds()*1000; + cout << "Splitting parallel with ETS and "; + if(automatic_threadcount) cout << "automatic"; + else cout << nthreads; + cout << ((nthreads == 1) ? " thread" : " threads"); + cout << " took " << domainSplitParallelTime << " msec : speedup over serial " << (gSerialTime / domainSplitParallelTime) << std::endl; + if(gCsvFile.is_open()) { + gCsvFile << "," << domainSplitParallelTime; + } +#if _DEBUG + { + + Polygon_map_t s_result_map; + flattened2d psv = flatten2d(**result_map); + s_result_map.push_back(RPolygon(0,0,mapxSize, mapySize)); + for(flattened2d::const_iterator ci = psv.begin(); ci != psv.end(); ++ci) { + s_result_map.push_back(*ci); + } + CheckPolygonMap(&s_result_map); + ComparePolygonMaps(&s_result_map, gResultMap); + } +#endif + (*result_map)->clear(); + + } + + if(gCsvFile.is_open()) { + gCsvFile << std::endl; + } + +} diff --git a/examples/parallel_for/polygon_overlay/polyover.h b/examples/parallel_for/polygon_overlay/polyover.h new file mode 100644 index 0000000..d249f12 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/polyover.h @@ -0,0 +1,41 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/*! + * polyover.h : extern declarations for polyover.cpp +*/ +#include "rpolygon.h" +#include "tbb/mutex.h" +#include "tbb/spin_mutex.h" + +extern void OverlayOnePolygonWithMap(Polygon_map_t *resultMap, RPolygon *myPoly, Polygon_map_t *map2, tbb::spin_mutex *rMutex); + +extern void SerialOverlayMaps(Polygon_map_t **resultMap, Polygon_map_t *map1, Polygon_map_t *map2); + +// extern void NaiveParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2); +extern void NaiveParallelOverlay(Polygon_map_t *&result_map, Polygon_map_t &polymap1, Polygon_map_t &polymap2); + +extern void SplitParallelOverlay(Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2); +extern void SplitParallelOverlayCV(concurrent_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2); +extern void SplitParallelOverlayETS(ETS_Polygon_map_t **result_map, Polygon_map_t *polymap1, Polygon_map_t *polymap2); + +extern void CheckPolygonMap(Polygon_map_t *checkMap); +extern bool ComparePolygonMaps(Polygon_map_t *map1, Polygon_map_t *map2); + diff --git a/examples/parallel_for/polygon_overlay/pover_global.h b/examples/parallel_for/polygon_overlay/pover_global.h new file mode 100644 index 0000000..43f90cc --- /dev/null +++ b/examples/parallel_for/polygon_overlay/pover_global.h @@ -0,0 +1,93 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// +// pover_global.h +// +#ifndef _POVER_GLOBAL_H_ +#define _POVER_GLOBAL_H_ + +#ifdef _MAIN_C_ +#define DEFINE // nothing +#define STATIC static +#define INIT(n) = n +#else // not in main file +#define DEFINE extern +#define STATIC // nothing +#define INIT(n) // nothing +#endif // _MAIN_C_ + +#include +#include + +#ifdef _WINDOWS +#include +#endif + +// this Polygon class only supports rectangles +DEFINE int gDrawXOffset INIT(0); // used for drawing polygons +DEFINE int gDrawYOffset INIT(0); +DEFINE int gPolyXBoxSize INIT(0); // number of pixels orresponding to one "square" (x) +DEFINE int gPolyYBoxSize INIT(0); // number of pixels orresponding to one "square" (y) +DEFINE bool gDoDraw INIT(false); // render the boxes + +#define THREADS_UNSET 0 +DEFINE int gThreadsLow INIT(THREADS_UNSET); +DEFINE int gThreadsHigh INIT(THREADS_UNSET); + +DEFINE std::ofstream gCsvFile; +DEFINE double gSerialTime; +DEFINE char *gCsvFilename INIT(NULL); + +#define BORDER_SIZE 10 // number of pixels between maps + +// The map size and the number of polygons depends on the version we are compiling. +// If DEBUG then it is small; else it is large. + +#ifdef _DEBUG +DEFINE int gNPolygons INIT(30); // default number of polygons in map +DEFINE int gMapXSize INIT(30); +DEFINE int gMapYSize INIT(30); +DEFINE int gGrainSize INIT(5); +#else +DEFINE int gNPolygons INIT(50000); // default number of polygons in map +DEFINE int gMapXSize INIT(1000); +DEFINE int gMapYSize INIT(1000); +DEFINE int gGrainSize INIT(20); +#endif +DEFINE int gMyRandomSeed INIT(2453185); + +DEFINE bool gIsGraphicalVersion INIT(false); + +typedef enum { + NORTH_SIDE, + EAST_SIDE, + SOUTH_SIDE, + WEST_SIDE +} allSides; + +#if _DEBUG +#define PRINT_DEBUG(x) (cout << x << std::endl) +#else +#define PRINT_DEBUG(x) +#endif + + +#endif // _POVER_GLOBAL_H_ diff --git a/examples/parallel_for/polygon_overlay/pover_video.cpp b/examples/parallel_for/polygon_overlay/pover_video.cpp new file mode 100644 index 0000000..bf24cc8 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/pover_video.cpp @@ -0,0 +1,175 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// Support for GUI display for Polygon overlay demo + +#define VIDEO_WINMAIN_ARGS +#include +#include "polyover.h" +#include "polymain.h" +#include "pover_video.h" +#include "tbb/tick_count.h" +#include "tbb/task_scheduler_init.h" +#ifndef _WIN32 +#include +#include + +void rt_sleep(int msec) { + usleep(msec*1000); +} + +#else //_WIN32 + +#undef OLDUNIXTIME +#undef STDTIME + +#include + +void rt_sleep(int msec) { + Sleep(msec); +} + +#endif /* _WIN32 */ + +using namespace std; + +bool g_next_frame() { + if(++n_next_frame_calls >= frame_skips) { // the data race here is benign + n_next_frame_calls = 0; + return gVideo->next_frame(); + } + return gVideo->running; +} + +bool g_last_frame() { + if(n_next_frame_calls) return gVideo->next_frame(); + return gVideo->running; +} + +bool initializeVideo(int argc, char **argv) { + //pover_video *l_video = new pover_video(); + //gVideo = l_video; + gVideo->init_console(); // don't check return code. + gVideo->title = g_windowTitle; + g_useGraphics = gVideo->init_window(g_xwinsize, g_ywinsize); + return true; +} + +void pover_video::on_process() { + tbb::tick_count t0, t1; + double naiveParallelTime, domainSplitParallelTime; + // create map1 These could be done in parallel, if the pseudorandom number generator were re-seeded. + GenerateMap(&gPolymap1, gMapXSize, gMapYSize, gNPolygons, /*red*/255, /*green*/0, /*blue*/127); + // create map2 + GenerateMap(&gPolymap2, gMapXSize, gMapYSize, gNPolygons, /*red*/0, /*green*/255, /*blue*/127); + // + // Draw source maps + gDrawXOffset = map1XLoc; + gDrawYOffset = map1YLoc; + for(int i=0; i < int(gPolymap1->size()); i++) { + (*gPolymap1)[i].drawPoly(); + } + gDrawXOffset = map2XLoc; + gDrawYOffset = map2YLoc; + for(int i=0; i < int(gPolymap2->size()) ;i++) { + (*gPolymap2)[i].drawPoly(); + } + gDoDraw = true; + + // run serial map generation + gDrawXOffset = maprXLoc; + gDrawYOffset = maprYLoc; + { + RPolygon *xp = new RPolygon(0, 0, gMapXSize-1, gMapYSize-1, 0, 0, 0); // Clear the output space + delete xp; + t0 = tbb::tick_count::now(); + SerialOverlayMaps(&gResultMap, gPolymap1, gPolymap2); + t1 = tbb::tick_count::now(); + cout << "Serial overlay took " << (t1-t0).seconds()*1000 << " msec" << std::endl; + gSerialTime = (t1-t0).seconds()*1000; +#if _DEBUG + CheckPolygonMap(gResultMap); + // keep the map for comparison purposes. +#else + delete gResultMap; +#endif + if(gCsvFile.is_open()) { + gCsvFile << "Serial Time," << gSerialTime << std::endl; + gCsvFile << "Threads,"; + if(gThreadsLow == THREADS_UNSET || gThreadsLow == tbb::task_scheduler_init::automatic) { + gCsvFile << "Threads,Automatic"; + } + else { + for(int i=gThreadsLow; i <= gThreadsHigh; i++) { + gCsvFile << i; + if(i < gThreadsHigh) gCsvFile << ","; + } + } + gCsvFile << std::endl; + } + if(gIsGraphicalVersion) rt_sleep(2000); + } + // run naive parallel map generation + { + Polygon_map_t *resultMap; + if(gCsvFile.is_open()) { + gCsvFile << "Naive Time"; + } + NaiveParallelOverlay(resultMap, *gPolymap1, *gPolymap2); + delete resultMap; + if(gIsGraphicalVersion) rt_sleep(2000); + } + // run split map generation + { + Polygon_map_t *resultMap; + if(gCsvFile.is_open()) { + gCsvFile << "Split Time"; + } + SplitParallelOverlay(&resultMap, gPolymap1, gPolymap2); + delete resultMap; + if(gIsGraphicalVersion) rt_sleep(2000); + } + // split, accumulating into concurrent vector + { + concurrent_Polygon_map_t *cresultMap; + if(gCsvFile.is_open()) { + gCsvFile << "Split CV time"; + } + SplitParallelOverlayCV(&cresultMap, gPolymap1, gPolymap2); + delete cresultMap; + if(gIsGraphicalVersion) rt_sleep(2000); + } + // split, accumulating into ETS + { + ETS_Polygon_map_t *cresultMap; + if(gCsvFile.is_open()) { + gCsvFile << "Split ETS time"; + } + SplitParallelOverlayETS(&cresultMap, gPolymap1, gPolymap2); + delete cresultMap; + if(gIsGraphicalVersion) rt_sleep(2000); + } + if(gIsGraphicalVersion) rt_sleep(8000); + delete gPolymap1; + delete gPolymap2; +#if _DEBUG + delete gResultMap; +#endif +} diff --git a/examples/parallel_for/polygon_overlay/pover_video.h b/examples/parallel_for/polygon_overlay/pover_video.h new file mode 100644 index 0000000..5152bf4 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/pover_video.h @@ -0,0 +1,64 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// support for GUI for polygon overlay demo +// +#ifndef _POVER_VIDEO_H_ +#define _POVER_VIDEO_H_ +#include "../../common/gui/video.h" + +#include "pover_global.h" // for declaration of DEFINE and INIT + +DEFINE class video *gVideo INIT(0); + +DEFINE int n_next_frame_calls INIT(0); +DEFINE int frame_skips INIT(10); +extern bool g_next_frame(); +extern bool g_last_frame(); + +class pover_video: public video { + void on_process(); +public: +#ifdef _WINDOWS + bool graphic_display(){return video::win_hInstance != (HINSTANCE)NULL;} +#else + bool graphic_display() { return true;} // fix this for Linux +#endif + //void on_key(int key); +}; + +DEFINE int g_xwinsize INIT(1024); +DEFINE int g_ywinsize INIT(768); + +DEFINE int map1XLoc INIT(10); +DEFINE int map1YLoc INIT(10); +DEFINE int map2XLoc INIT(270); +DEFINE int map2YLoc INIT(10); +DEFINE int maprXLoc INIT(530); +DEFINE int maprYLoc INIT(10); + +DEFINE const char *g_windowTitle INIT("Polygon Overlay"); +DEFINE bool g_useGraphics INIT(true); + +extern bool initializeVideo(int argc, char **argv); + +extern void rt_sleep(int msec); + +#endif // _POVER_VIDEO_H_ diff --git a/examples/parallel_for/polygon_overlay/readme.html b/examples/parallel_for/polygon_overlay/readme.html new file mode 100644 index 0000000..3ae5303 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/readme.html @@ -0,0 +1,476 @@ + + + + + + Intel® Threading Building Blocks. Polygon_overlay sample + + + + + +

    + Polygon Overlay example that demonstrates the use of parallel_for. +

    + This example is a simple implementation of polygon overlay, as described in + + Parallelizing the Polygon Overlay Problem Using Orca, by H.F. Langendoen. +

    + The solution was implemented in three forms: +

      +
    • The naive serial solution. +
    • The naive parallel solution, by splitting list of polygons from one map and intersecting + each sub-list against the entire list of polygons from the second map. +
    • A parallel solution where each map is split into submaps, with each resulting submap being + intersected against the corresponding submap from the other map. This solution requires some + redundancy (some polygons are members of more than one submap). To prevent multiple copies + of a polygon from being placed in the solution map, if both polygons are duplicated (that is, + if they both appear in more than one map), they are intersected but the result is not placed + in the solution map. +
    + The only optimization in each solution is that the area of the generated sub-polygons are subtracted from + the original area of one of the source polygons. When the remaining area is zero, the intersection process + is halted. +

    + A word about the speedup of the submap case. One may get superlinear speedup in this case (for instance a + laptop with Intel® Core(TM) Duo processor got a speedup of about 20 percent over serial.) This results from two effects: +
      +
    • the number of threads used, and +
    • the fact that for each submap, the number of polygons is smaller than that for the other two cases. +
    + If there are, say, 400 polygons in each map, then on average the number of intersections calculated is + approximately 80,000 (400 * 200, where 200 is the average number of polygons examined before stopping.) + If the maps are split into 2 submaps, the time for each submap is about 200*100, or 20,000. So even + comparing the two sets of submaps serially should result in a speedup somewhere around 2. This number + is affected by the number of redundant polygons being compared; this effect would eventually swamp the gain + from comparing smaller numbers of polygons per submap. And remember the submaps are created by intersecting each + map with a rectangular polygon covering the submap being generated, which is additional work taking about N * O(400) + in the case above, where N is the number of submaps generated, that can be done in parallel. +

    + Running the default release pover while varying the number of submaps from 1 to 1000, the speedup on the submap + case for a 2-processor system looks like +

    + Table of speedup for the algorithm +

    + One further optimization would be to sort one map, say map1, by maxY, and sort the other map (map2) + by minY. For p1 in map1, start testing for intersection at the first p2 in map2 + that intersected the last polygon tested in map1. This would speed up the intersection process greatly, + but the optimization would apply to all the methods, and the sort would have to be accounted for in the timing. +

    + The source maps are generated pseudo-randomly in the manner described in the paper above. That is, if + we need N polygons, then N "boxes" are chosen at random, then one-at-a-time the areas are expanded in + one of fours directions until the area hits an adjacent polygon. When this process is finished, the + resulting map is inspected and any remaining unoccupied "boxes" are made into additional polygons, as + large as possible in each case. So the actual number of polygons in each map will in general be larger + than the number of polygons requested (sometimes by 10% or more.) +

    + One limitation of the program is that if the number of polygons in the source map is greater than the number of + "boxes" (pixels in the GUI case), the maps cannot be generated. +

    + +
    +
    System Requirements
    + +
    +

    + For the most up to date system requirements, see the release notes. +

    +
    +
    + +
    +
    Files
    + +
    +
    +
    polyover.cpp +
    Source code for main program. +
    polyover.h +
    Global variables, classes and enums. +
    pover_video.cpp +
    Source code for the GUI interface. +
    pover_video.h +
    Defines for the GUI version. +
    Makefile +
    Makefile for building the example. +
    +
    +
    + +
    +
    Directories
    + +
    +
    +
    msvs +
    Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
    xcode +
    Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
    +

    For information about the minimum supported version of IDE, see release notes.

    +
    +
    + +
    +
    Build instructions
    + +
    +

    + General build directions can be found here. +

    + For the various UI options, see the common GUI code build instructions. +

    +
    +
    + +
    +
    Usage
    + +
    +

    + Building via the above make commands, or via Microsoft* Visual Studio* projects on Windows* systems, produces executable files + named pover.exe. To run these executables directly, use one or more of the following commands: +

    +
    +
    pover.exe +
    Run this version (release or debug). +
    pover.exe n:m +
    Run this version (release or debug) (m-n+1) times, with n threads to m threads inclusive. +
    To run a short version of this example, e.g., for use with Intel® Threading Tools: +
    Build a debug version with the GUI turned off + (e.g., make UI=con debug; see also the build directions above). +
    Run it with a small dataset, e.g., pover.exe --polys 10 --size 5x5. +
    +
    +
    + +
    +
    Notes
    + +
    +
      +
    • While running with the GUI display should yield reasonable performance in most cases, running with no GUI + display is strongly recommended in order to demonstrate the full performance and scalability of the example. +
    +
    +
    + +
    + Up to parent directory +
    +
    +
    Legal Information
    + +
    +

    + Intel, Intel Core and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
    * Other names and brands may be claimed as the property of others. +
    © 2017, Intel Corporation +

    +
    +
    + + + diff --git a/examples/parallel_for/polygon_overlay/rpolygon.h b/examples/parallel_for/polygon_overlay/rpolygon.h new file mode 100644 index 0000000..228701c --- /dev/null +++ b/examples/parallel_for/polygon_overlay/rpolygon.h @@ -0,0 +1,155 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +// rpolygon.h +// +#ifndef _RPOLYGON_H_ +#define _RPOLYGON_H_ +#include +#include +#include "pover_video.h" + +#include "tbb/scalable_allocator.h" +#include "tbb/concurrent_vector.h" +#include "tbb/enumerable_thread_specific.h" + +using namespace std; + +using namespace tbb; + +class RPolygon; +typedef scalable_allocator RPolygon_allocator; +DEFINE RPolygon_allocator rAlloc; + +enum MallocBehavior { + UseMalloc, + UseScalableAllocator +}; + +DEFINE MallocBehavior gMBehavior INIT(UseScalableAllocator); + +class RPolygon { +public: + RPolygon() {m_XMin = m_YMin = m_XMax = m_YMax = 0; + m_r = m_g = m_b = 0; + } + RPolygon(int xMin, int yMin, int xMax, int yMax, int r=-1, int g=-1, int b=-1) : m_XMin(xMin), m_YMin(yMin), m_XMax(xMax), m_YMax(yMax) { + if( r >= 0) { + m_r=(colorcomp_t)r; m_g=(colorcomp_t)g; m_b=(colorcomp_t)b; + if(gDoDraw) drawPoly(); + } + } + + void set_nodraw(int xMin, int yMin, int xMax, int yMax) {m_XMin=xMin; m_YMin=yMin; m_XMax=xMax; m_YMax=yMax;} + + RPolygon &intersect(RPolygon &otherPoly); + void set(int xMin, int yMin, int xMax, int yMax) { + set_nodraw(xMin,yMin,xMax,yMax); + if(gDoDraw) { + drawPoly(); + } + } + void get(int *xMin, int *yMin, int *xMax, int *yMax) const {*xMin=m_XMin;*yMin=m_YMin;*xMax=m_XMax;*yMax=m_YMax;} + int xmax() const { return m_XMax; } + int xmin() const { return m_XMin; } + int ymax() const { return m_YMax; } + int ymin() const { return m_YMin; } + void setColor(colorcomp_t newr, colorcomp_t newg, colorcomp_t newb) {m_r = newr; m_g=newg; m_b=newb;} + void getColor(int *myr, int *myg, int *myb) {*myr=m_r; *myg=m_g; *myb=m_b;} + color_t myColor() {return gVideo->get_color(m_r, m_g, m_b);} + void drawPoly() { + if(gVideo->running) { + if(g_next_frame()) { // Shouldn't call next_frame each time + drawing_area ldrawing( + gDrawXOffset+m_XMin*gPolyXBoxSize, //x + gDrawYOffset+m_YMin*gPolyYBoxSize, //y + (m_XMax-m_XMin+1)*gPolyXBoxSize, //sizex + (m_YMax-m_YMin+1)*gPolyYBoxSize); //sizey + for(int y=0; y b.ymin()) return false; + if(a.ymin() < b.ymin()) return true; + return a.xmin() < b.xmin(); +} +#else +extern bool operator<(const RPolygon& a, const RPolygon& b); +#endif + +extern ostream& operator<<(ostream& s, const RPolygon &p); + +class RPolygon_flagged { + RPolygon *myPoly; + bool is_duplicate; +public: + RPolygon_flagged() {myPoly = NULL; is_duplicate = false;} + RPolygon_flagged(RPolygon* _p, bool _is_duplicate) : myPoly(_p), is_duplicate(_is_duplicate) { } + bool isDuplicate() {return is_duplicate;} + void setDuplicate(bool newValue) {is_duplicate = newValue;} + RPolygon *p() {return myPoly;} + void setp(RPolygon *newp) {myPoly = newp;} +}; + +typedef class vector Polygon_map_t; +typedef class concurrent_vector concurrent_Polygon_map_t; +typedef class enumerable_thread_specific ETS_Polygon_map_t; +typedef class vector > Flagged_map_t; // we'll make shallow copies + +inline bool PolygonsOverlap(RPolygon *p1, RPolygon *p2, int &xl, int &yl, int &xh, int &yh) { + int xl1, yl1, xh1, yh1, xl2, yl2, xh2, yh2; +#if _DEBUG + rt_sleep(1); // slow down the process so we can see it. +#endif + p1->get(&xl1, &yl1, &xh1, &yh1); + p2->get(&xl2, &yl2, &xh2, &yh2); + if(xl1 > xh2) return false; + if(xh1 < xl2) return false; + if(yl1 > yh2) return false; + if(yh1 < yl2) return false; + xl = (xl1 < xl2) ? xl2 : xl1; + xh = (xh1 < xh2) ? xh1 : xh2; + yl = (yl1 < yl2) ? yl2 : yl1; + yh = (yh1 < yh2) ? yh1 : yh2; + return true; +} + +#endif // _RPOLYGON_H_ diff --git a/examples/parallel_for/polygon_overlay/speedup.gif b/examples/parallel_for/polygon_overlay/speedup.gif new file mode 100644 index 0000000000000000000000000000000000000000..04d6d876896e1e73a8452dc3bc4c6fa3771c98b5 GIT binary patch literal 7162 zcmVfPjsSjg^&^o12@Nng6G! zr?a!Oy}iA_z`)1H$I#Hw+1c6Q;o<4&>GARL_4W1o`uhL>{{R30000000000000000 z000000000000000A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW*g04x9i003J9 zM*;u^{-7m}WNDsgs;+G7zHlthbZy^wuJ1ez{J@@YNGuwU$fR<~WC5DcsB}uLTCdow zcFXO0zu>TVOfH+x=(KvxZoA*`xO`5p+wb_ie$Vgw|A2vlgM@{Khlq)ai;RtqkC2g) zla!T~mzbHFo1C4VpP-?lqok##r>Lo_tE{cAuduPQv$VCgx45~wyS%-=zrex5!^FkL z$H>Xb%goKr&(P7*)6~`0*CY@GKLiX%KUmt_-YekP=jiD=4?sW*M&?!Q?Evp8@oo_Y z>iqqk0stb2Z~#C6yeC!w3ba7b;5~$I@cEla5fVUhC4M{*Am9Os2Lk{MfbcQoND>bI zIL;Fh&zwe;CLjPnFaiMpk`lH7Fd#w2#S<+Nz7*hK#LEE^HX;=v!2q|O7KVB}u@QiR zY$i#vgy`~SNCG|SRUAt;(SjcW7EB;P@1_Wu?H0lXvT$Cztwx2?(@G+wQHLRc5KwWp zpjx(E^|qTzPp3!`jvq(e8?zm`xj(c9-P&%j*s`EQ17gtb>ej0Y01URUO<;tXkONwH zO_Oy!3x)CO{()MxiL*rs+WWD#1!*9rC+FSz?(FIx4kkdCAd$M>-m6KpramAxcHPP+ zUxf=^wE6RS7yz`ob**&8KpeJ}55Rrb<&*7093g%1w&I0#cE?K5DB7=DPM zIqWQ8ore?ln3#bhnz-SRM4kaqQL`1a6-~~?wvcwRm9R~3dXbcxUQGICf?ZQ(lwt`- zitrkJR(9o0lR}y(0eO>U*EUXgtEsl{=NaR!7|nCqZ@!laoj*O~z}NCZvYz1UBsi)r2m_%Ga+01WPNY;r>YwBXw6zyCp!l zLXg!6&`SHG1y#xD>bdAj!7LK%%F%AR@WxBWyG76&(UTttntPickJ=UAcrjS$Rw9+^2sQttn$h%x9sxE zFvl$O%rw_*^UXNttn^?y zthes^>#)aeIVpb|eoq6q=dSziy!Y<=@4yEy{P4sVZ~XDdC$IeS%s21+^Uy~x{q)pV zZ~gVyXRrPCzZXEe;@|_t{rKdUZ~pn{r?39{?6>d!`|xk?y(f0teS7@)=db_%{P*ww z{{Rf20J{f@w}A*>85y7g7s$W{I`DxIjGzRMH@{i{V1gLTpawU{!47)xgAJ%4EiMSc z5}NRYC`_RWR~S4I&Vqz2jG+u?NW&W1FnunR1q^Sm!qhqF_+2AP$E+l%50`Ir}@Zdh9a8O%%(Q;Xw3p{^PAv= zWH&2XCYoLU?w{m{wIcDhlWohYX}=Sj~S!jlv7tfxNrnZkQ+BA@&Ws6aR9PfY-H zpa@N90}GmogDUi)5M8A$92(JzTC{x(#RUFEFUrx5jxVE^*r-QGO48|p)Dj{ssY+Lx zypvWUr7Vr9ObIyAncDQG)pIE&V2ab8s#K?w;HgiC+EJiNLa0PdYDA4138X6ZsR(5% zB%BJ>s_s*&kD#hmx9U!;Izp>l4XZi5+6b_U^{mh-U&L0P>x0efJw%QXJrb>@^C12VBPVngPGI^AZpU%;4Md zu^bJKa1{-#h5$!J!WfPsg~>nxz>zn@AWq_j$zZ?_hxo)m9Pu2=i{ciSPsQ$Xv5con z+!@<=g)oi-i*L+h>E##>JMOWNoA=|04Ee|%EHb~4%;XFz8DLG0as;2uh9FD%%DkiU z8mx@vE{CwjUJf(=v|M2^n|Xg^P6L|t{CqU2)6cIQHT?Rwjn9q*Rw5B(`X-KaR(LY$UrPB%K zJev;yoKCf>SIucpLl4xbX7#8iTxwH~FV?KiwXSy!XjkhQ)Vy}|tfxq665INGxDK|m zmn~~dGh5ZemSVBT5N!}A``Osewzjoh?cvt+*tg!cxW`TITz7ktwFbBKu3heSyZhbe zM&h)?tM2Ww``!4?H@4$_#CeB--vhq4z6VZlT?0JD>8^M51YYolJ3P|||DnIttMGL{ z{Nfnbbi{i&@h@!rybRB{$RGZ3dnUZ%%nSL*S5EMf)A-vce>KZzo^hAcu;X5^xpY-d z^Pam~=bJov%#FwXbDtZ1+(6H+(1$*}q96U~+-4@uyO8waIvwg*XLi+5ICU;;owrxd zy4ZRBbrW`d3uUiu*vHOxa~t#QT1fkA*WUKJr&{jlT{_c!M|ZpX9pc4=dlv9c+P?q& z@S+a9-uJFM!z2FjeB7KJ%I%CgrcN`N)1A^p7w7lsnJ# z)1yB1z#P35R9{%vzaH_lccAR6kbAw_{`R>4?HgKnQh0C_h9fWkz^}PnU$+!-L;|a!u%jPv}ZgSPq19Ku$n~R``XF zhK1y`H}+#<^;U&oXmn7hN8eM1D6obPg@$S9b8whbZRlZdc!qPBhIMFCcbH&#Sblpr zhkY15S=a(XfrojqV1hV^U|5L3bWMP0VUV~_a_ER^cuI$O4|qt4$99RBNQatOKpCNk z68=(up}2>Y$UK|KIB!#8fp}f8MpdAgiaocA%hQTNfQyM#bh8L*!c&X3c#F=ogqQbo zz&4D8Sd1{oT*9b~%lJvU*aN(HNY4n3kJwnoXnNS#jrdlL#WRgO0FHokjoxU5@_~MizOI7&%!B>3bkqlFLSs8)*X_Nk$)Ok|Kzb zBWZjtIg`5vkttaNE9pfoNs|z0lQH>xJQQX znPJ#?l1Xk`7nm+t@o%m>T+^JvO2%hFyZsKX3Ab6ha36N-{o-y^E?dgp!H=br#p7WXhpU+lu_8E(e zC7=3N*w=#wJd7uzllOUvjjAAbSB3T9+p~JXw`bQKazz*>6 zpc*=&(Dp(4_W;SE0K~G3B1)nzs&RQ&R(p1#iOrBu45e#UPz$N*2mqa?|tWSW^y zHVM`erDIyAWEyWz+71pu1h5%HOUkC%c&0K61ks|VGHIt}dTvO1ifihpTMDQ`8c}sh zsCOzs>Qn(hHltaZSBa{q@i;-ux1*6dSCdMqmAZP3fTAP704x4VjeW|gZEC5GFaSux z5OFG|O=+rZ8g2UL6zyQ4EDDsc`lpQg2n$*exWb8xNH24GLYtbaPB?5Ei4PXW7PxAx zrwTy>$N+w^6rAXW-TA7{s;dvAe}z#uw)%#EsGL)ot+5KNU*!=`Kplt}tjjvAAXKd6 znvdK1RYmax1hKA*6Rv{dt{w!h@d|{arhmzT9QZ0B*BX}pTCNMls|@<9j>Q%72i6J2z#;$yL{)WH|miBaunt;PL94VOIY5D$KsPJ3 z&&sriN>5RXwJFGDP3x;qo0?vmv)ktg70Rc#S+*RjwTVSUxxBv5|f_tlUTex;Re|Q<4jBB_O#h85?xsvO+iIApo%PnJj zftKs1EXI5`Att54w>H(apZm3UdskZF6y32ArYlpZo4PN#x_w2uQR1^WNw~BNx|53t z0w54yaVW7{puJ0|+{JuX@&gM28*?kW$BVpU#t5mgry@YDa_YI!>${j+nWwwGiV9s- z%dFoEzTBHX<11k6X};2nzFSL8v&+7!>%Nam{!;NPzw;YE>B|z(i@)uwzwg^j_v^p4 z3&8c;Q3FiC8K_(Pdto-Hz?@234NS88lfV$%lLkz=BW1xCjKS|S!6n7P9gKjk1;X|_ z!V&zz0X$41jKWYkfh+t=E$qTC%swW}Q8P@#_a|C6d{H^9!(M5_F`P?348-ThSv`!X zMhvT#mBewl#7r#22aHff48=#xfkPZiRcysHnyidS$v$b?+Tvc$)rL$dg>j*=kmpj82sPtjU(VgN&R>pA5>k2UeYIPNi(hr_4R63{I=e z%B1PaqZ~=GEX%VTg|!Sxw~Wi6M^&$^O}*^PzpTrWyiLPQ%*Bj7!8}dLtjwXu%)5+2 zKY%~a49$=yR4GX}TX>)D7-)?6Y1o{wJe90mVTxAkNB7na=yT2EoXu=FhUcuW>HN*Y z7S8te&g5)8+l;XhTaeI(&(-73`V4z^D2e%+(Ee#hj>pc^L(m0n(0+)};DaxAc}KSA z&~g^h8!J-%tk9l_(c7lc$OF+F9efi_iXfe_ZghYo9gHX4(J4KKEB()Ggn}>4J0=~| zC~b%r8?55`Mpc;8JI&KQtxNvXtU-C@yhZOAYECWFk*L9E)YMg7k_Xky zQ>4{f4Uz!m)lmf2VXd3aL)J@V)@O~@teDgg#MW)?kolz6u{qbcEKhcQL~@PSbp6&* zO_+Y2*MN=HT-4Wt{nyH~*FS{ViG7^82-gba*pCg_EhX6kMA?;X*%XA?0i@ZRO`XWY z*f#{)p)K0RL)tZD+NX`$#G~3X#M-T`ot+)njXm4gY)Y_Ar??Hxy6xE&+}pVwj=-Hi zvMt=MeN4q2KgW&Sw5^WI{XWg@+|S)Y(d|CdP2KS5NV`p}+WpRk)ZHbN-QOLa)@|Fd zUEccKN8;VD>Rr%u)c)QaMBeXR-3p1`EJWY+z1{ohy+)+p`_12jbls;G;1MlG@{K_N zZr}pGI|(j93(nvTo;wd7K@l$D^m*TgZ9^B1;Tay01fI_x&e26w;SJQ`BmUtU8RFQ3 z;wi4;CcZ!}{^9~k;Vf=(G#=9=6yuql<3@c!JPtrJ?&IAEi)G$PDMZz6 z&eLyRO4K~(RbA(_9|Abo^I)z9^9j@>4y&Jr;h5h1B-%c;j6yYksef^3E{CW z>z!2VaeeE!PD_Hh>%7kD(B$f`F5{ve?3g&~O@+=EJ=w?}*2?};EG^{E4($(S(@kFO z*6!={Oujv??Y&M*-MrA84({8Y>c(yE=kDL-uI}N^?iGCO?w;(PE${PA@1@Q?_I~e1 zD%tza?}Hfa-lRYO4)Cg&)CF(wggDI!ukd`h%MI`Fk66nQFY#X}@Z==j6>stA$j2Mc z@g1M<3kULTjq&Rw&Ln@^g*OH$T@ak52`@^Cf?% zG7t3rG%xbUGxS8CkML>pNsseHB;rjU^hQtUQ7`rAe&tn<*FFDFEuQsSkD5&H^-k|Z z11r_z1~@c(3?+A4Y5L_=%174fXbtKiHJ7QAdCIlV5#_&-sfV)r}AOkFQ2eNBWPQ z`5{I1sPFez|M{&S`sfb(v5&F|H~O_-`g8PsxnJ3;k5ZW4`>9`Qv@iU&-;Bj?{1{1G zxUc-W&qsIf{G0vzFO~e#zx)$*{nO7%+VA_^-~FAR{os%J-#`9eFaGAw^W~rZD!=~z z?EmgB^!`>qLh|4Kr8Mq9QU5Pb(fP#|`VapgV2LAHnkSm7E8Dv72#~T0BsZSxJKy_1 zFen@ni^d}|sa!If&L=b~ol>jTD>ke3(O}*$I4pj3E#;GKt6sC)?l(LxpVRC1d-gou z^ZWkT%t{&_VWHt6Vxr}oZLRGsZm#YwZ)rg#a4_(tpm0m1abR-Iatd;@88n*oG_|rdAhyVJGk3E0xAwO9 zIJvnnF*7+hx;cCBJN&x)e7$!3u>HM0HvaiPnQNBliStLvpd^F|`B_uw$Nu3%hSVVP zp;%F(G>ZT?&d|g{;~0=(M2^G=jpP@UDNS}`xlAPtm@!?3<7o3H&YU`T^6csJC(xim zhY~Gn^eED#N|!Qi>hvkps8Xj=t!niu)~s5$a_#E%E7-7N$C52;_AJ`8YS*%D>-H_& zxN_&xt!wu#-n@GE^6l&QFW|s}2NN!A_%LEIGLLyIcyCj~#u+EvZw zY>CEl=E0*4I}RxNL+j;W66=mUck>e1!B3Ylex&wj-lqdL|Ic|1{`k%uvu~GP{`K$e zsGo$cf6^J}(Z=6;#YKdSf5y0%UwwZhSl($63h2dx{Hdqhe}3WjQ9l-*q|b)IO_ zBu+$Ki5H2N;eZBK=wU?D;P)bp^5~IbKr1q6AbAB|*x+9ws&k@{sQqT#k)7dqAd4j8 zR>^`(Di&IkJz@wXc`MeIkB^I)MjfE9i&51C+R3(6LMp$M@XSRf< zg4@Zd*p)oSc_y7MU}EQ=U5;jGjAZudW=Vi9x+YhU?pf$LMFwhRm<~etCYy&6`sSrM z;u&f&I+~!;eRw7(8YZcqNWKQ#hncRb>VBX8N_Q$~kdX>Tnxn<4E3u{m z8{x6FW~pVX0llhXvp+hkA$8QFCB6se)vNBt( zNQS~&oW14FC21$wPIRk+0RQ@ALR%7CaA*SmsoIRO!FP$n#`eoF!m>qNv1YuXq_L6A za%>x|iHSTi$t9b7GRi5dyfVuzyZkcDG0QwN%{AM6GtN2dyfe=|`}{M|K?^-J(M215 zG}1{cy)@HJJN-1&QA<5F)m2-4HP%^cy*1Zed;PW60*D}X3l9hY00Clxy*ArzyAXi^ z7QpSo+32}_H{N$Muz&@73#w3(c?&)`)f1Pnz}fzMQ#^tM1Y}}>1fFfSnF9jEy_wkp zFu;HS0z4ps1O{X>00fu|khTSlKOQ;Zt-HSR03yV00s{az-~a#&Oisc8GDv{7M8DfuLe)jd-ADH2!nSX}anRqTd{LZ&O5j+3@2>4w9WzatW{O^7aeBfO+*Eijn z;ClcFUnC%)00sikeCZot2ZcvA3uuso5Ii9Y-C}?USYU-GsNL;yx4RKIP6Eh_UGF4N zJM}4`fW`}erxnt6q6BQycx1faO!jbH)@$OHi*XSM-E;Cv7` zo&G|YxdoiBfS0o(7Fox{HL@{hfomfi<5;sd%CU}iTp1njsK-6>v5$WIBOn7Q$Uzda wkcK=YA`_{|MKZFHj(j8}BPq#AQnHekyd)+wsmV=pvXh?tBq&39zYqWbJLRl{3;+NC literal 0 HcmV?d00001 diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1b4eca9 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj @@ -0,0 +1,527 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; }; + 84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; }; + 84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; }; + 84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; }; + 84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; }; + 84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; }; + 84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; }; + 84B8DAAC152CB05200D59B95 /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA4152CB05200D59B95 /* polymain.cpp */; }; + 84B8DAAD152CB05200D59B95 /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA6152CB05200D59B95 /* polyover.cpp */; }; + 84B8DAAE152CB05200D59B95 /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA9152CB05200D59B95 /* pover_video.cpp */; }; + 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; }; + 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; }; + D31F32621C11DEE000A77D54 /* polymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA4152CB05200D59B95 /* polymain.cpp */; }; + D31F32631C11DEE300A77D54 /* polyover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA6152CB05200D59B95 /* polyover.cpp */; }; + D31F32641C11DEE700A77D54 /* pover_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DAA9152CB05200D59B95 /* pover_video.cpp */; }; + D31F32651C11DEEC00A77D54 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; }; + D31F32661C11DEF000A77D54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; }; + D31F32671C11DEF300A77D54 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; }; + D31F32681C11DEF600A77D54 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; }; + D31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D31F32691C11DF1600A77D54 /* iOS.storyboard */; }; + D31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326C1C11DF7C00A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; + D31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; + D31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; }; + D31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; }; + D31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; }; + D31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = ""; }; + 84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = ""; }; + 84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = ""; }; + 84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = ""; }; + 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = ""; }; + 84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = ""; }; + 84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = ""; }; + 84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = ""; }; + 84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = ""; }; + 84B8DAA4152CB05200D59B95 /* polymain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = polymain.cpp; path = ../polymain.cpp; sourceTree = ""; }; + 84B8DAA5152CB05200D59B95 /* polymain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = polymain.h; path = ../polymain.h; sourceTree = ""; }; + 84B8DAA6152CB05200D59B95 /* polyover.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = polyover.cpp; path = ../polyover.cpp; sourceTree = ""; }; + 84B8DAA7152CB05200D59B95 /* polyover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = polyover.h; path = ../polyover.h; sourceTree = ""; }; + 84B8DAA8152CB05200D59B95 /* pover_global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pover_global.h; path = ../pover_global.h; sourceTree = ""; }; + 84B8DAA9152CB05200D59B95 /* pover_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pover_video.cpp; path = ../pover_video.cpp; sourceTree = ""; }; + 84B8DAAA152CB05200D59B95 /* pover_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pover_video.h; path = ../pover_video.h; sourceTree = ""; }; + 84B8DAAB152CB05200D59B95 /* rpolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rpolygon.h; path = ../rpolygon.h; sourceTree = ""; }; + 84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.ios.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D31F32691C11DF1600A77D54 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = ""; }; + D31F326C1C11DF7C00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; + D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = ""; }; + D31F32821C12DFDD00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = ""; }; + D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 84D0174E1527431F0008A4E0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */, + D31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */, + 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */, + D31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D31F32481C11DEC100A77D54 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */, + D31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 84B8DA6C152CA8D900D59B95 /* tbbExample */ = { + isa = PBXGroup; + children = ( + 84B8DAA4152CB05200D59B95 /* polymain.cpp */, + 84B8DAA5152CB05200D59B95 /* polymain.h */, + 84B8DAA6152CB05200D59B95 /* polyover.cpp */, + 84B8DAA7152CB05200D59B95 /* polyover.h */, + 84B8DAA8152CB05200D59B95 /* pover_global.h */, + 84B8DAA9152CB05200D59B95 /* pover_video.cpp */, + 84B8DAAA152CB05200D59B95 /* pover_video.h */, + 84B8DAAB152CB05200D59B95 /* rpolygon.h */, + 84B8DA98152CAD8600D59B95 /* Gui layer */, + 84B8DA7B152CA97B00D59B95 /* Resources */, + ); + name = tbbExample; + sourceTree = ""; + }; + 84B8DA7B152CA97B00D59B95 /* Resources */ = { + isa = PBXGroup; + children = ( + D31F32691C11DF1600A77D54 /* iOS.storyboard */, + 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */, + 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */, + ); + name = Resources; + path = ../../../common/gui/xcode/tbbExample/en.lproj; + sourceTree = ""; + }; + 84B8DA98152CAD8600D59B95 /* Gui layer */ = { + isa = PBXGroup; + children = ( + 84B8DA99152CADF400D59B95 /* macvideo.cpp */, + 84B8DA6F152CA90100D59B95 /* main.m */, + 84B8DA70152CA90100D59B95 /* OpenGLView.h */, + 84B8DA71152CA90100D59B95 /* OpenGLView.m */, + 84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */, + 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */, + 84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */, + ); + name = "Gui layer"; + sourceTree = ""; + }; + 84D017461527431F0008A4E0 = { + isa = PBXGroup; + children = ( + 84B8DA6C152CA8D900D59B95 /* tbbExample */, + 84D017541527431F0008A4E0 /* Frameworks */, + 84D017521527431F0008A4E0 /* Products */, + ); + sourceTree = ""; + }; + 84D017521527431F0008A4E0 /* Products */ = { + isa = PBXGroup; + children = ( + 84D017511527431F0008A4E0 /* tbbExample.app */, + D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */, + ); + name = Products; + sourceTree = ""; + }; + 84D017541527431F0008A4E0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D31F326C1C11DF7C00A77D54 /* libtbb.dylib */, + D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */, + D31F32821C12DFDD00A77D54 /* libtbb.dylib */, + D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */, + 84D01775152744BD0008A4E0 /* OpenGL.framework */, + 84D017551527431F0008A4E0 /* Cocoa.framework */, + 84D017571527431F0008A4E0 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 84D017571527431F0008A4E0 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 84D017581527431F0008A4E0 /* AppKit.framework */, + 84D017591527431F0008A4E0 /* CoreData.framework */, + 84D0175A1527431F0008A4E0 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 84D017501527431F0008A4E0 /* tbbExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */; + buildPhases = ( + 84D0174D1527431F0008A4E0 /* Sources */, + 84D0174E1527431F0008A4E0 /* Frameworks */, + 84D0174F1527431F0008A4E0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tbbExample; + productName = tbbExample; + productReference = 84D017511527431F0008A4E0 /* tbbExample.app */; + productType = "com.apple.product-type.application"; + }; + D31F324A1C11DEC100A77D54 /* tbbExample.ios */ = { + isa = PBXNativeTarget; + buildConfigurationList = D31F325F1C11DEC100A77D54 /* Build configuration list for PBXNativeTarget "tbbExample.ios" */; + buildPhases = ( + D31F32471C11DEC100A77D54 /* Sources */, + D31F32481C11DEC100A77D54 /* Frameworks */, + D31F32491C11DEC100A77D54 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tbbExample.ios; + productName = tbbExample.ios; + productReference = D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 84D017481527431F0008A4E0 /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = tbb; + LastUpgradeCheck = 0710; + TargetAttributes = { + D31F324A1C11DEC100A77D54 = { + CreatedOnToolsVersion = 7.1.1; + DevelopmentTeam = 7J8M3RM94C; + }; + }; + }; + buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "polygon_overlay" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 84D017461527431F0008A4E0; + productRefGroup = 84D017521527431F0008A4E0 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 84D017501527431F0008A4E0 /* tbbExample */, + D31F324A1C11DEC100A77D54 /* tbbExample.ios */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 84D0174F1527431F0008A4E0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84B8DA7A152CA90100D59B95 /* (null) in Resources */, + 84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */, + 84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D31F32491C11DEC100A77D54 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */, + D31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */, + D31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 84D0174D1527431F0008A4E0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84B8DA77152CA90100D59B95 /* main.m in Sources */, + 84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */, + 84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */, + 84B8DA9A152CADF400D59B95 /* macvideo.cpp in Sources */, + 84B8DAAC152CB05200D59B95 /* polymain.cpp in Sources */, + 84B8DAAD152CB05200D59B95 /* polyover.cpp in Sources */, + 84B8DAAE152CB05200D59B95 /* pover_video.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D31F32471C11DEC100A77D54 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D31F32641C11DEE700A77D54 /* pover_video.cpp in Sources */, + D31F32631C11DEE300A77D54 /* polyover.cpp in Sources */, + D31F32651C11DEEC00A77D54 /* macvideo.cpp in Sources */, + D31F32681C11DEF600A77D54 /* tbbAppDelegate.m in Sources */, + D31F32621C11DEE000A77D54 /* polymain.cpp in Sources */, + D31F32661C11DEF000A77D54 /* main.m in Sources */, + D31F32671C11DEF300A77D54 /* OpenGLView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 84B8DA7D152CA97B00D59B95 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 84B8DA7F152CA97B00D59B95 /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 84D01770152743200008A4E0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 84D01771152743200008A4E0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + SDKROOT = macosx; + }; + name = Release; + }; + 84D01773152743200008A4E0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = NO; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + RUN_CLANG_STATIC_ANALYZER = YES; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + VERSION_INFO_BUILDER = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 84D01774152743200008A4E0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = NO; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../../../lib\"", + "\"$(SRCROOT)\"", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + RUN_CLANG_STATIC_ANALYZER = YES; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + VERSION_INFO_BUILDER = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + D31F32601C11DEC100A77D54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + "__TBB_IOS=1", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + D31F32611C11DEC100A77D54 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + GCC_PREPROCESSOR_DEFINITIONS = "__TBB_IOS=1"; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 1; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "polygon_overlay" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 84D01770152743200008A4E0 /* Debug */, + 84D01771152743200008A4E0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 84D01773152743200008A4E0 /* Debug */, + 84D01774152743200008A4E0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D31F325F1C11DEC100A77D54 /* Build configuration list for PBXNativeTarget "tbbExample.ios" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D31F32601C11DEC100A77D54 /* Debug */, + D31F32611C11DEC100A77D54 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 84D017481527431F0008A4E0 /* Project object */; +} diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme new file mode 100644 index 0000000..5516b61 --- /dev/null +++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme new file mode 100644 index 0000000..5c1312f --- /dev/null +++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/parallel_for/seismic/Makefile b/examples/parallel_for/seismic/Makefile new file mode 100644 index 0000000..53ec0ca --- /dev/null +++ b/examples/parallel_for/seismic/Makefile @@ -0,0 +1,97 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# GNU Makefile that builds and runs example. +NAME=seismic +ARGS=auto 0 +PERF_RUN_ARGS=auto 10000 silent +LIGHT_ARGS=1:2 100 + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +TBBLIB = -ltbb +TBBLIB_DEBUG = -ltbb_debug + +ifeq ($(offload), mic) +override CXXFLAGS += -D__TBB_MIC_OFFLOAD=1 -offload-attribute-target=mic +# Replace -ltbb with -tbb in the offload mode +TBBLIB = -tbb +TBBLIB_DEBUG += -offload-option,mic,ld,"-ltbb_debug" +# Currently only console mode is supported in offload version +override UI=con +else +PERFFLAGS=-msse2 +endif + +SOURCES = ../../common/gui/$(UI)video.cpp universe.cpp seismic_video.cpp main.cpp + +include ../../common/gui/Makefile.gmake +override CXXFLAGS += $(UI_CXXFLAGS) + +ifeq ($(shell uname), Linux) +LIBS+= -lrt +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +all: release test + +resources: +ifeq ($(UI),mac) + mkdir -p $(APPRES)/en.lproj $(NAME).app/Contents/MacOS + cp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME).app/Contents/Info.plist + cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME).app/Contents + cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj +endif # macOS* + +release: resources +ifeq ($(UI),mac) + $(CXX_UI) -O2 -DNDEBUG $(CXXFLAGS) -c $(MACUISOURCES) +endif # macOS + $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB) $(LIBS) + +debug: resources +ifeq ($(UI),mac) + $(CXX_UI) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -c $(MACUISOURCES) +endif # macOS + $(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $(SOURCES) $(MACUIOBJS) $(TBBLIB_DEBUG) $(LIBS) + +clean: + $(RM) $(EXE) *.o *.d +ifeq ($(UI),mac) + rm -rf $(NAME).app +endif + +test: +ifeq ($(UI),mac) + export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(ARGS) +else + $(run_cmd) ./$(EXE) $(ARGS) +endif + +perf_build: override CXXFLAGS+=$(PERFFLAGS) +perf_build: release + +perf_run: + $(run_cmd) ./$(EXE) $(PERF_RUN_ARGS) + +light_test: + $(run_cmd) ./$(EXE) $(LIGHT_ARGS) diff --git a/examples/parallel_for/seismic/Makefile.windows b/examples/parallel_for/seismic/Makefile.windows new file mode 100644 index 0000000..9e4559d --- /dev/null +++ b/examples/parallel_for/seismic/Makefile.windows @@ -0,0 +1,67 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# Common Makefile that builds and runs example. + +# Just specify your program basename +PROG=Seismic +ARGS=auto 0 +PERF_RUN_ARGS=auto 10000 silent +LIGHT_ARGS=1:2 100 + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw) +#UI = con +UI = gdi +#UI = dd + +# Machine architecture, auto-detected from TBB_TARGET_ARCH by default +# Use XARCH variable to change it. See index.html for more information +ARCH0 = $(TBB_TARGET_ARCH)- +ARCH1 = $(ARCH0:ia32-=x86) +ARCH2 = $(ARCH1:intel64-=AMD64) +XARCH = $(ARCH2:-=x86) + +MAKEINC = ../../common/gui/Makefile.win +SOURCES = seismic_video.cpp universe.cpp main.cpp + +all: release test +release: compiler_check + @$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one +debug: compiler_check + @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE="$(SOURCES)" EXE=$(PROG).exe build_one +clean: + @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest msvs\SeismicSimulation.res >nul 2>&1 +test: + $(PROG) $(ARGS) + +perf_build: compiler_check + @$(MAKE) -f $(MAKEINC) UI=con CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE="$(SOURCES) " EXE=$(PROG).exe build_one +perf_run: + $(PROG) $(PERF_RUN_ARGS) + +light_test: + $(PROG) $(LIGHT_ARGS) + +compiler_check: + @echo compiler_test>compiler_test && @$(CXX) /E compiler_test >nul 2>&1 || echo "$(CXX) command not found. Check if CXX=$(CXX) is set properly" + @cmd.exe /C del compiler_test diff --git a/examples/parallel_for/seismic/main.cpp b/examples/parallel_for/seismic/main.cpp new file mode 100644 index 0000000..5d88af6 --- /dev/null +++ b/examples/parallel_for/seismic/main.cpp @@ -0,0 +1,151 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#define VIDEO_WINMAIN_ARGS + +#include +#include "tbb/tick_count.h" +#include "../../common/utility/utility.h" + +#include "seismic_video.h" +#include "universe.h" +#include "tbb/task_scheduler_init.h" + +Universe u; + +struct RunOptions { + //! It is used for console mode for test with different number of threads and also has + //! meaning for GUI: threads.first - use separate event/updating loop thread (>0) or not (0). + //! threads.second - initialization value for scheduler + utility::thread_number_range threads; + int numberOfFrames; + bool silent; + bool parallel; + RunOptions(utility::thread_number_range threads_ , int number_of_frames_ , bool silent_ , bool parallel_ ) + : threads(threads_),numberOfFrames(number_of_frames_), silent(silent_), parallel(parallel_) + { + } +}; + +int do_get_default_num_threads() { + int threads; +#if __TBB_MIC_OFFLOAD + #pragma offload target(mic) out(threads) +#endif // __TBB_MIC_OFFLOAD + threads = tbb::task_scheduler_init::default_num_threads(); + return threads; +} + +int get_default_num_threads() { + static int threads = do_get_default_num_threads(); + return threads; +} + +RunOptions ParseCommandLine(int argc, char *argv[]){ + // zero number of threads means to run serial version + utility::thread_number_range threads(get_default_num_threads,0,get_default_num_threads()); + + int numberOfFrames = 0; + bool silent = false; + bool serial = false; + + utility::parse_cli_arguments(argc,argv, + utility::cli_argument_pack() + //"-h" option for displaying help is present implicitly + .positional_arg(threads,"n-of-threads",utility::thread_number_range_desc) + .positional_arg(numberOfFrames,"n-of-frames","number of frames the example processes internally (0 means unlimited)") + .arg(silent,"silent","no output except elapsed time") + .arg(serial,"serial","in GUI mode start with serial version of algorithm") + ); + return RunOptions(threads,numberOfFrames,silent,!serial); +} + +int main(int argc, char *argv[]) +{ + try{ + tbb::tick_count mainStartTime = tbb::tick_count::now(); + RunOptions options = ParseCommandLine(argc,argv); + SeismicVideo video(u,options.numberOfFrames,options.threads.last,options.parallel); + + // video layer init + if(video.init_window(u.UniverseWidth, u.UniverseHeight)) { + video.calc_fps = true; + video.threaded = options.threads.first > 0; + // video is ok, init Universe + u.InitializeUniverse(video); + // main loop + video.main_loop(); + } + else if(video.init_console()) { + // do console mode + if (options.numberOfFrames == 0) { + options.numberOfFrames = 1000; + std::cout << "Substituting 1000 for unlimited frames because not running interactively\n"; + } + for(int p = options.threads.first; p <= options.threads.last; p = options.threads.step(p)) { + tbb::tick_count xwayParallelismStartTime = tbb::tick_count::now(); + u.InitializeUniverse(video); + int numberOfFrames = options.numberOfFrames; +#if __TBB_MIC_OFFLOAD + drawing_memory dmem = video.get_drawing_memory(); + char *pMem = dmem.get_address(); + size_t memSize = dmem.get_size(); + + #pragma offload target(mic) in(u, numberOfFrames, p, dmem), out(pMem:length(memSize)) + { + // It is necessary to update the pointer on mic + // since the address spaces on host and on target are different + dmem.set_address(pMem); + u.SetDrawingMemory(dmem); +#endif // __TBB_MIC_OFFLOAD + if (p==0) { + //run a serial version + for( int i=0; i_N=+wHsYe$U#6ePmShD&p^B>2uySylbs@uYIPy&-w#c zpc-6UYC)x+ErDgUwQ8BlZ7hIURRB*7exZ#T}AXG2* z=^weGTI5~Inq#r?3QZRh5>Vvy7AqDy*^i;1p6BY7;LQSXZ{;g>M z?fm5AM!1uJ~14CP5-;mbWJGeF0 z_iurN!(6GBI54yo4h(CB{j~e(6Em$hj*V=Fqpvo{5$e#07L+U2`wvFkn8s8S#Efo= z^|!}o{tozLT1|Z7UlaSMxZ(5FgK^Rilm(Khv|vko7i5X}36?lI))Ggklas69 zVxSe$=33+10BfA^v%)uXY;b;dHGCaV4e6oPadwt1PEE7L#SjO4G`kKy33kG#^P1yK zcx(J^Ra<Ti+?95-JJvGIWK0JnTs;vs^DcXy)=jK$w z=lme~e0CM~SM61i7E+Zy6!Vv8(?YCpX|5H%3$bS21{dbq;8I96Tne>C8jm-9o*mM| z?2r~#1K&~U^BwT@ygK+I#1UDG8sIO%&iE*}A+E1$jbGNa!S(fRas9ovxba>)TBY{5 zxxo`Rq9|oIDtY0?rjE#1t!!u9+}s5>w|2#i&D55z%y+}h?JrQ>af9~O4zA^n9=Nr$ z7jEt9gPXg&@$23JxV49(y|Q~4emOiI-)H_6dH=qKoBYhlq5e+&PW_AegZf|U-_)N} z9@RJC3MS7vp?yXL1qC4>AOQaU{+Kjr5++WZhzS!Wz}MFoW5Wxo&I+1!G$zZHn#$;`!98-<yjHIyy#~ zd!^|5sm6LSF)_!K%8;V#rWzZU(N_%@(#Q5Ewg{KRHI95 zY?=LIo2D9@#Ky*zb^O>SmHu~IE44l?Dgh-;K81z)WLJ`;4wqn z_ZrZ%LmzL?wy3kD_lL%jZ@l`n*YIJJ=8o?=KVm^dc=tK8XTNSrUK1xwofb5!|4WPJ z4;&O=5uecStt8`&$o&U)@7lX>*XEsj-g|fBj_upFZrx%^n^vq{{r0M5OP8-%`Odni z4ek1_pUw~WS3(xf3w~KkBmDdVRSL~dfr0)bOf7sI@n%@?lm1=c0pd4Z&T02Hm@RH2 z)we;5{I7(S*0d0%twR;wLsA|##n-X4buN70s`TsBg@MbpxknH6!QPjfV-K~P+VA6v z_lLE?{$Xwi?eB?&gE}IlpC>|?5A<%2&;edpIl33d4IhkA?7Qcs#@NdnYWsbf({dao zjuAS*69M!eGt37G)4CyX#*2ub-V>ij1>vuo!mzs+z)KgL@b7{zHqOE48v-$!zJ3#Y zv6uJbc6$T6dQ*KU=65px!K_Y5n$a2Cr*_9zn`Ys&O+gqt+y{pT0q+l>1_JwOKM87w zj|1D|zXCjwI@=4Ewok|DRTFSw+Z#B)bq3CDnTav%mol33yacQq;D9qB?)YqOTV(8< zhO{02IO`82u>Hs|UYpK$#ksIn_%f8&v3sW=YtK}ip9y^Z1~r3H`B~I#;2iDQ=@jeE zsP;Kl_%^%|E=9QF`(^IPTIr6TH*`S`ui5^ww+}9?dJfr}dg8{OA;>xEhiiu?LYUzwb+T)8Ci=PAZtkjWKvm68X{|HBivlm3|Y&X;^sP6+GhB5eJk92w>5I2 z+$j(Ix}hC1827D>9dK(?2jp()h@8zG@!QT$$l2N%x3+e|?QJ|JOre?J8PhnJ%Ni~CLrzWB&44|iS%zyB8@if zn`DaR3m@|O^QyPhwX#dzrgIKY+OQIBHLeiIw|EP z&VT0+jvL~&)rdRJe}-vnAIJ6*Q-ZDH1N-*w-gRv2&ZLw99b3D3xO=#{xw*T!wQ+Oz@bGBcd0?|n&$#sN_2S8-lrFX#RqEa{~iIg60Iwp0)kazxeJo zgX#N&>G3k(9Zpk`k46?8yGp_NR9<~gx%0b2>EBc6h6N*s;*a0{2Wy6O#7ZA8q(u55 zXmAg#9`ZC+QBk9x#nSQpa4CKpR!sCp#>stnXRBl-)qQFW^fsryy=(Z?FI2AS<5;lV$HB*W zpm$$$hhFu3THa~z+qYL;AE$u>2QZl)2G;Ru)3f^vUAny3rOUHDp6~jct50i}CXE|6 zZPK7&qvp+?vT*b1+^M5y`wmZgdAPT0`%H^xiXL6DvWOu*60xx;u6V#Q2{0r8adCy( zEn;IuV&g28p4jI>W#CW53OF&!CsAr~RottogHM>&s@S>DKq|7h|3SD9 zqF9XiYwfgmNUJRFhY%(1o6xLY)@?;QKJMM%9Zv1};>0~2!r#}0zp0zW`xNH9UeDj( zg}=XRQtjm}{_d~Eq+;bB6m$ICmr^L!lH$^jp`^CQQOEr>=J>f^rrg)^KRssd^D)QI zeLuo|80KTp^Sb>{=X%)v)pLRSmCW&T|B@EJinpT1Tyzb%m&zPJ_g4w`z?hFg`Rd1_ z>Wj7&9jm;{DmLy1Gsn+8Vp@!PtSTNouWWh8cdz+W{M_4Sj-PwjDs;R>k4LR3_uiS~ z=YBll{weJklr8FC(aI`*?jJPA&pn00ytW2@1pNNmFr)z)}MRaMZIsT^P*Jr zd{v~ficiI=V%Fb3xlf-prc}}2|5bcSDrP-?@&@_Qn~c8Rs-)*Df-M*%`H0H+%lZ72 zvi{EGQOr#h;dxS84CWx2AwMJBn{b$~fyU%&3N}@!=X}9qDHtRuG5tUm68j-~fkG1sqOUyGmYlwPgb z2OYaS`ssnHnDzL{f$7y1HvU2ZvOsRl96y=1qRkb)O#V)fzZuy)A>;K#iJYK%{YIx)`7mahDM1B1t%cm9kaZNYkD4X_DC9qd+$8->B5TQhB} zPLpFP(T5^y$$V8IA1dTRh5V#84>?gGBg(O=3b|S#mnh^Cg)FI%vsB;THmdl^aSGW> zA@3;U9fcgEkcSj)tKX)y|CMyJ9 zWMGAisgNZVGNwZIRLI7bES?uKuA0cIN->306SAtME58p}SdPK5N}H!(y?QQ$SPR)# zEw=cH;9p8myVEOE~ZJrY}3iIg?0rP&%LTBp=}8h@I%TXv<9-xUO`%}-uWt5a*E=2Z6^)Nip$4?6}mrb=W3r9pMm{N(?%I<=0f{ZX!iK0oKQ1d^EdG#^%`N>O4Lp#&)lc_BC`N?cbBh&ou z$Ha>#mE4>Z3XbJ2L!+Nt++W%XmzCnEDKwe#1XEVN#&9kX7z*Ba>aDt~p(O7d58 ztNMbLMIj4qo}V1Gs?t)?V|bWl{j*<9L>}8bKN)V*HyMT)&Xn7jpKpqbGz6zmVk@{(S%;moMb= zg`B=PIy$QPUCF}>xq2agFXZoq+`W*w*DN`FAuBIr%G&-D!IW`F9}` zFJ#_@jJ%MQmz-@~sV+i3UdYL7B1xFE+kg*rC_sn}}eaYVo*?J*YFZ>$;!oOJ{ z{QCgB-)1FF4i?imzkPZz{4Rvr{h7I>sgUu{%LsSK%b0JUml0-1RnN;GSP!(-+jpO%JopO`B((dnpK-(&yRaUJ6F; zchnE_k$Wv1f4{oG;*T$8Vx5|ss!Wf01@yO_$nuNBLZ4Gvb)Vu6x9f7RD3t3{RPFna z@~=**zWfUs8kYPPZCSL4e)B1xT|TXnSM+U>y|{O?8%m4vtzIr_BVKg5vCP}`*3dR} z&a!{N#n>%>kU18z!$Q_q$meQ#RW3=oZ=knFmg=8&V&`qOUg~p1N&lWwnpHmPb9YW3 zw+z)kIP(xwOMAJX5{|A*v__uZdtvV;w2rOkgeCCc1i z#a5Q%Amc3IgIa3+fBIm(x&OWTs_~Un|HxNN{coH$#m{POUDev^Dy>e{FMhe1Y5iiu zZ + + + + DDDebug + Win32 + + + DDDebug + x64 + + + DDRelease + Win32 + + + DDRelease + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + SeismicSimulation + {3AA40693-F93D-4D4B-B32E-068F511A2527} + SeismicSimulation + Win32Proj + + + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + X64 + + + MaxSpeed + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + ..\..\..\common\gui\dxcheck.bat + + + X64 + + + Disabled + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;$(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + true + + + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + + + + true + true + true + true + + + true + true + true + true + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_for/seismic/msvs/resource.h b/examples/parallel_for/seismic/msvs/resource.h new file mode 100644 index 0000000..ddc31c3 --- /dev/null +++ b/examples/parallel_for/seismic/msvs/resource.h @@ -0,0 +1,52 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by SeismicSimulation.rc +// +#define IDC_MYICON 2 +#define IDD_SEISMICSIMULATION_DIALOG 102 +#define IDS_APP_TITLE 103 +#define IDD_ABOUTBOX 103 +#define IDM_ABOUT 104 +#define IDM_EXIT 105 +#define IDI_SEISMICSIMULATION 107 +#define IDI_SMALL 108 +#define IDC_SEISMICSIMULATION 109 +#define IDR_MAINFRAME 128 +#define ID_FILE_PARALLEL 32771 +#define ID_FILE_SERIAL 32772 +#define IDM_PARALLEL 32773 +#define ID_FILE_ENABLEGUI 32774 +#define ID_FILE_DISABLEGUI 32775 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32782 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif diff --git a/examples/parallel_for/seismic/msvs/seismic.sln b/examples/parallel_for/seismic/msvs/seismic.sln new file mode 100644 index 0000000..d131e35 --- /dev/null +++ b/examples/parallel_for/seismic/msvs/seismic.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcxproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + _GDIRelease|Win32 = _GDIRelease|Win32 + _GDIRelease|x64 = _GDIRelease|x64 + DDDebug|Win32 = DDDebug|Win32 + DDDebug|x64 = DDDebug|x64 + DDRelease|Win32 = DDRelease|Win32 + DDRelease|x64 = DDRelease|x64 + GDIDebug|Win32 = GDIDebug|Win32 + GDIDebug|x64 = GDIDebug|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.ActiveCfg = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|Win32.Build.0 = Release|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.ActiveCfg = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2527}._GDIRelease|x64.Build.0 = Release|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.ActiveCfg = DDDebug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|Win32.Build.0 = DDDebug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.ActiveCfg = DDDebug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDDebug|x64.Build.0 = DDDebug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.ActiveCfg = DDRelease|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|Win32.Build.0 = DDRelease|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.ActiveCfg = DDRelease|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.DDRelease|x64.Build.0 = DDRelease|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.ActiveCfg = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|Win32.Build.0 = Debug|Win32 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.ActiveCfg = Debug|x64 + {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDIDebug|x64.Build.0 = Debug|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/parallel_for/seismic/msvs/small.ico b/examples/parallel_for/seismic/msvs/small.ico new file mode 100644 index 0000000000000000000000000000000000000000..d551aa3aaf80adf9b7760e2eb8de95a5c3e53df6 GIT binary patch literal 23558 zcmeI430zgx+QuJHKtxbe5gbu*030B5$VyGcDGSFOalkY&2LuvC5pp(7&2XNl96=@z zNXGH2`|DO#nx)3nwUq43A>_N=+wHsYe$U#6ePmShD&p^B>2uySylbs@uYIPy&-w#c zpc-6UYC)x+ErDgUwQ8BlZ7hIURRB*7exZ#T}AXG2* z=^weGTI5~Inq#r?3QZRh5>Vvy7AqDy*^i;1p6BY7;LQSXZ{;g>M z?fm5AM!1uJ~14CP5-;mbWJGeF0 z_iurN!(6GBI54yo4h(CB{j~e(6Em$hj*V=Fqpvo{5$e#07L+U2`wvFkn8s8S#Efo= z^|!}o{tozLT1|Z7UlaSMxZ(5FgK^Rilm(Khv|vko7i5X}36?lI))Ggklas69 zVxSe$=33+10BfA^v%)uXY;b;dHGCaV4e6oPadwt1PEE7L#SjO4G`kKy33kG#^P1yK zcx(J^Ra<Ti+?95-JJvGIWK0JnTs;vs^DcXy)=jK$w z=lme~e0CM~SM61i7E+Zy6!Vv8(?YCpX|5H%3$bS21{dbq;8I96Tne>C8jm-9o*mM| z?2r~#1K&~U^BwT@ygK+I#1UDG8sIO%&iE*}A+E1$jbGNa!S(fRas9ovxba>)TBY{5 zxxo`Rq9|oIDtY0?rjE#1t!!u9+}s5>w|2#i&D55z%y+}h?JrQ>af9~O4zA^n9=Nr$ z7jEt9gPXg&@$23JxV49(y|Q~4emOiI-)H_6dH=qKoBYhlq5e+&PW_AegZf|U-_)N} z9@RJC3MS7vp?yXL1qC4>AOQaU{+Kjr5++WZhzS!Wz}MFoW5Wxo&I+1!G$zZHn#$;`!98-<yjHIyy#~ zd!^|5sm6LSF)_!K%8;V#rWzZU(N_%@(#Q5Ewg{KRHI95 zY?=LIo2D9@#Ky*zb^O>SmHu~IE44l?Dgh-;K81z)WLJ`;4wqn z_ZrZ%LmzL?wy3kD_lL%jZ@l`n*YIJJ=8o?=KVm^dc=tK8XTNSrUK1xwofb5!|4WPJ z4;&O=5uecStt8`&$o&U)@7lX>*XEsj-g|fBj_upFZrx%^n^vq{{r0M5OP8-%`Odni z4ek1_pUw~WS3(xf3w~KkBmDdVRSL~dfr0)bOf7sI@n%@?lm1=c0pd4Z&T02Hm@RH2 z)we;5{I7(S*0d0%twR;wLsA|##n-X4buN70s`TsBg@MbpxknH6!QPjfV-K~P+VA6v z_lLE?{$Xwi?eB?&gE}IlpC>|?5A<%2&;edpIl33d4IhkA?7Qcs#@NdnYWsbf({dao zjuAS*69M!eGt37G)4CyX#*2ub-V>ij1>vuo!mzs+z)KgL@b7{zHqOE48v-$!zJ3#Y zv6uJbc6$T6dQ*KU=65px!K_Y5n$a2Cr*_9zn`Ys&O+gqt+y{pT0q+l>1_JwOKM87w zj|1D|zXCjwI@=4Ewok|DRTFSw+Z#B)bq3CDnTav%mol33yacQq;D9qB?)YqOTV(8< zhO{02IO`82u>Hs|UYpK$#ksIn_%f8&v3sW=YtK}ip9y^Z1~r3H`B~I#;2iDQ=@jeE zsP;Kl_%^%|E=9QF`(^IPTIr6TH*`S`ui5^ww+}9?dJfr}dg8{OA;>xEhiiu?LYUzwb+T)8Ci=PAZtkjWKvm68X{|HBivlm3|Y&X;^sP6+GhB5eJk92w>5I2 z+$j(Ix}hC1827D>9dK(?2jp()h@8zG@!QT$$l2N%x3+e|?QJ|JOre?J8PhnJ%Ni~CLrzWB&44|iS%zyB8@if zn`DaR3m@|O^QyPhwX#dzrgIKY+OQIBHLeiIw|EP z&VT0+jvL~&)rdRJe}-vnAIJ6*Q-ZDH1N-*w-gRv2&ZLw99b3D3xO=#{xw*T!wQ+Oz@bGBcd0?|n&$#sN_2S8-lrFX#RqEa{~iIg60Iwp0)kazxeJo zgX#N&>G3k(9Zpk`k46?8yGp_NR9<~gx%0b2>EBc6h6N*s;*a0{2Wy6O#7ZA8q(u55 zXmAg#9`ZC+QBk9x#nSQpa4CKpR!sCp#>stnXRBl-)qQFW^fsryy=(Z?FI2AS<5;lV$HB*W zpm$$$hhFu3THa~z+qYL;AE$u>2QZl)2G;Ru)3f^vUAny3rOUHDp6~jct50i}CXE|6 zZPK7&qvp+?vT*b1+^M5y`wmZgdAPT0`%H^xiXL6DvWOu*60xx;u6V#Q2{0r8adCy( zEn;IuV&g28p4jI>W#CW53OF&!CsAr~RottogHM>&s@S>DKq|7h|3SD9 zqF9XiYwfgmNUJRFhY%(1o6xLY)@?;QKJMM%9Zv1};>0~2!r#}0zp0zW`xNH9UeDj( zg}=XRQtjm}{_d~Eq+;bB6m$ICmr^L!lH$^jp`^CQQOEr>=J>f^rrg)^KRssd^D)QI zeLuo|80KTp^Sb>{=X%)v)pLRSmCW&T|B@EJinpT1Tyzb%m&zPJ_g4w`z?hFg`Rd1_ z>Wj7&9jm;{DmLy1Gsn+8Vp@!PtSTNouWWh8cdz+W{M_4Sj-PwjDs;R>k4LR3_uiS~ z=YBll{weJklr8FC(aI`*?jJPA&pn00ytW2@1pNNmFr)z)}MRaMZIsT^P*Jr zd{v~ficiI=V%Fb3xlf-prc}}2|5bcSDrP-?@&@_Qn~c8Rs-)*Df-M*%`H0H+%lZ72 zvi{EGQOr#h;dxS84CWx2AwMJBn{b$~fyU%&3N}@!=X}9qDHtRuG5tUm68j-~fkG1sqOUyGmYlwPgb z2OYaS`ssnHnDzL{f$7y1HvU2ZvOsRl96y=1qRkb)O#V)fzZuy)A>;K#iJYK%{YIx)`7mahDM1B1t%cm9kaZNYkD4X_DC9qd+$8->B5TQhB} zPLpFP(T5^y$$V8IA1dTRh5V#84>?gGBg(O=3b|S#mnh^Cg)FI%vsB;THmdl^aSGW> zA@3;U9fcgEkcSj)tKX)y|CMyJ9 zWMGAisgNZVGNwZIRLI7bES?uKuA0cIN->306SAtME58p}SdPK5N}H!(y?QQ$SPR)# zEw=cH;9p8myVEOE~ZJrY}3iIg?0rP&%LTBp=}8h@I%TXv<9-xUO`%}-uWt5a*E=2Z6^)Nip$4?6}mrb=W3r9pMm{N(?%I<=0f{ZX!iK0oKQ1d^EdG#^%`N>O4Lp#&)lc_BC`N?cbBh&ou z$Ha>#mE4>Z3XbJ2L!+Nt++W%XmzCnEDKwe#1XEVN#&9kX7z*Ba>aDt~p(O7d58 ztNMbLMIj4qo}V1Gs?t)?V|bWl{j*<9L>}8bKN)V*HyMT)&Xn7jpKpqbGz6zmVk@{(S%;moMb= zg`B=PIy$QPUCF}>xq2agFXZoq+`W*w*DN`FAuBIr%G&-D!IW`F9}` zFJ#_@jJ%MQmz-@~sV+i3UdYL7B1xFE+kg*rC_sn}}eaYVo*?J*YFZ>$;!oOJ{ z{QCgB-)1FF4i?imzkPZz{4Rvr{h7I>sgUu{%LsSK%b0JUml0-1RnN;GSP!(-+jpO%JopO`B((dnpK-(&yRaUJ6F; zchnE_k$Wv1f4{oG;*T$8Vx5|ss!Wf01@yO_$nuNBLZ4Gvb)Vu6x9f7RD3t3{RPFna z@~=**zWfUs8kYPPZCSL4e)B1xT|TXnSM+U>y|{O?8%m4vtzIr_BVKg5vCP}`*3dR} z&a!{N#n>%>kU18z!$Q_q$meQ#RW3=oZ=knFmg=8&V&`qOUg~p1N&lWwnpHmPb9YW3 zw+z)kIP(xwOMAJX5{|A*v__uZdtvV;w2rOkgeCCc1i z#a5Q%Amc3IgIa3+fBIm(x&OWTs_~Un|HxNN{coH$#m{POUDev^Dy>e{FMhe1Y5iiu zZ + + + + + Intel® Threading Building Blocks. Seismic sample + + + + + +

    + Parallel seismic wave simulation that demonstrates use of parallel_for and affinity_partitioner. +

    + The example can be built in the offload version to run on Intel® Many Integrated Core (Intel® MIC) Architecture based coprocessor (see build instructions). +

    + Note: Currently, the offload version does not support GUI and can only be used with console mode. +

    + +
    +
    System Requirements
    + +
    +

    + For the most up to date system requirements, see the release notes. +

    +
    +
    + +
    +
    Files
    + +
    +
    +
    main.cpp +
    Main program which parses command line options and runs the algorithm with different numbers of threads. +
    universe.h +
    Wave propagation methods interface. +
    universe.cpp +
    Wave propagation methods implementation. +
    seismic_video.h +
    GUI mode support interface. +
    seismic_video.cpp +
    GUI mode support implementation. +
    Makefile +
    Makefile for building the example. +
    +
    +
    + +
    +
    Directories
    + +
    +
    +
    msvs +
    Contains Microsoft* Visual Studio* workspace for building and running the example (Windows* systems only). +
    xcode +
    Contains Xcode* IDE workspace for building and running the example (macOS* systems only). +
    +

    For information about the minimum supported version of IDE, see release notes.

    +
    +
    + +
    +
    Build instructions
    + +
    +

    General build directions can be found here.

    +

    The following additional options are supported:

    +
    +
    make [(general targets: {release, debug} [test])] UI={con, gdi, d2d, x, mac} +
    Build and run as usual, but build with the specified GUI driver: console, GDI+*, + Direct2D*, X11, or OpenGL* + (see the description of the common GUI code + for more information on available graphics support).
    + For Linux* and macOS* systems, the best available driver is detected automatically by the Makefile.
    + For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=d2d may offer superior + performance, but can only be used if the Microsoft* DirectX* SDK is installed on your system + and if overlay is supported by your graphics card.
    + Use UI=con to build without the GUI for use in making performance measurements + (strongly recommended when measuring performance or scalability; see note below). +
    make [(above options or targets)] XARCH=x64 +
    Build and run as above, but also specify XARCH=x64 + (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary. +
    make [(above options or targets)] DDLIB_DIR=<specify path to Direct Draw* SDK here> +
    If you experience ddraw.lib linking problems, specify the correct library directory via this option. +
    make [(above options or targets)] CXXFLAGS=-DX_FULLSYNC +
    Build and run as above, but enable full X11 synchronization if you experience "tearing" of motion on slower video systems. +
    +
    +
    + +
    +
    Usage
    + +
    +
    +
    seismic -h +
    Prints the help for command line options +
    seismic [n-of-threads=value] [n-of-frames=value] [silent] [serial] +
    seismic [n-of-threads [n-of-frames]] [silent] [serial] +
    n-of-threads is the number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.
    + n-of-frames is a number of frames the example processes internally.
    + silent - no output except elapsed time.
    + serial - in GUI mode start with serial version of algorithm.
    +
    To run a short version of this example, e.g., for use with Intel® Parallel Inspector:: +
    Build a debug version of the example + (see the build instructions). +
    Run it with the desired number of threads and smaller number of frames, e.g., seismic 4 5. +
    +
    +
    + +
    +
    Hot keys
    + +
    +

    + The following hot keys can be used in interactive execution mode when the example is compiled with the graphical + user interface: +

    +
    +
    <left mouse button> +
    Starts new seismic wave in place specified by mouse cursor. +
    <space> +
    Toggles between parallel and serial execution modes. +
    <p> +
    Enables parallel execution mode. +
    <s> +
    Enables serial execution mode. +
    <e> +
    Enables screen updates. +
    <d> +
    Disables screen updates (strongly recommended when measuring performance or scalability; see note below). +
    <esc> +
    Stops execution. +
    +
    +
    + +
    +
    Notes
    + +
    +
      +
    • While running with the GUI display turned on should yield reasonable performance in most cases, running with the GUI + display turned off is strongly recommended in order to demonstrate the full performance and scalability of the example. +
    +
    +
    + +
    + Up to parent directory +
    +
    +
    Legal Information
    + +
    +

    + Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. +
    * Other names and brands may be claimed as the property of others. +
    © 2017, Intel Corporation +

    +
    +
    + + + diff --git a/examples/parallel_for/seismic/seismic_video.cpp b/examples/parallel_for/seismic/seismic_video.cpp new file mode 100644 index 0000000..67ae78c --- /dev/null +++ b/examples/parallel_for/seismic/seismic_video.cpp @@ -0,0 +1,148 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "seismic_video.h" +#include "universe.h" +#include "tbb/task_scheduler_init.h" + +const char * const SeismicVideo::titles[2] = {"Seismic Simulation: Serial", "Seismic Simulation: Parallel"}; +void SeismicVideo::on_mouse(int x, int y, int key) { + if(key == 1){ + u_.TryPutNewPulseSource(x,y); + } +} + +void SeismicVideo::on_key(int key) { + key &= 0xff; + if(char(key) == ' ') initIsParallel = !initIsParallel; + else if(char(key) == 'p') initIsParallel = true; + else if(char(key) == 's') initIsParallel = false; + else if(char(key) == 'e') updating = true; + else if(char(key) == 'd') updating = false; + else if(key == 27) running = false; + title = titles[initIsParallel?1:0]; +} + +void SeismicVideo::on_process() { + tbb::task_scheduler_init Init(threadsHigh); + for( int frames = 0; numberOfFrames_==0 || frameson_key('p'); + break; + case ID_FILE_SERIAL: + gVideo->on_key('s'); + break; + case ID_FILE_ENABLEGUI: + gVideo->on_key('e'); + break; + case ID_FILE_DISABLEGUI: + gVideo->on_key('d'); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +#endif diff --git a/examples/parallel_for/seismic/seismic_video.h b/examples/parallel_for/seismic/seismic_video.h new file mode 100644 index 0000000..a1b5932 --- /dev/null +++ b/examples/parallel_for/seismic/seismic_video.h @@ -0,0 +1,54 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef SEISMIC_VIDEO_H_ +#define SEISMIC_VIDEO_H_ + +#include "../../common/gui/video.h" + +class Universe; + +class SeismicVideo : public video +{ +#ifdef _WINDOWS + #define MAX_LOADSTRING 100 + TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name + WNDCLASSEX wcex; +#endif + static const char * const titles[2]; + + bool initIsParallel ; + + Universe &u_; + int numberOfFrames_; // 0 means forever, positive means number of frames, negative is undefined + int threadsHigh; +private: + void on_mouse(int x, int y, int key); + void on_process(); + +#ifdef _WINDOWS +public: +#endif + void on_key(int key); + +public: + SeismicVideo( Universe &u,int numberOfFrames, int threadsHigh, bool initIsParallel=true); +}; +#endif /* SEISMIC_VIDEO_H_ */ diff --git a/examples/parallel_for/seismic/universe.cpp b/examples/parallel_for/seismic/universe.cpp new file mode 100644 index 0000000..f8d5f2f --- /dev/null +++ b/examples/parallel_for/seismic/universe.cpp @@ -0,0 +1,221 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "../../common/gui/video.h" +#include +#include "tbb/blocked_range.h" +#include "tbb/parallel_for.h" + + +using namespace std; + +#ifdef _MSC_VER +// warning C4068: unknown pragma +#pragma warning(disable: 4068) +// warning C4351: new behavior: elements of array 'array' will be default initialized +#pragma warning(disable: 4351) +#endif + +#include "universe.h" + +const colorcomp_t MaterialColor[4][3] = { // BGR + {96,0,0}, // WATER + {0,48,48}, // SANDSTONE + {32,32,23} // SHALE +}; + +void Universe::InitializeUniverse(video const& colorizer) { + + pulseCounter = pulseTime = 100; + pulseX = UniverseWidth/3; + pulseY = UniverseHeight/4; + // Initialize V, S, and T to slightly non-zero values, in order to avoid denormal waves. + for( int i=0; i0 ? t : 0; + ValueType b = t<0 ? -t : 0; + ValueType g = 0.5f*fabs(t); + memcpy(c, MaterialColor[k], sizeof(c)); + c[2] = colorcomp_t(r*(255-c[2])+c[2]); + c[1] = colorcomp_t(g*(255-c[1])+c[1]); + c[0] = colorcomp_t(b*(255-c[0])+c[0]); + ColorMap[k][i] = colorizer.get_color(c[2], c[1], c[0]); + } + } + // Set damping coefficients around border to reduce reflections from boundaries. + ValueType d = 1.0; + for( int k=DamperSize-1; k>0; --k ) { + d *= 1-1.0f/(DamperSize*DamperSize); + for( int j=1; j0 ) { + ValueType t = (pulseCounter-pulseTime/2)*0.05f; + V[pulseY][pulseX] += 64*sqrt(M[pulseY][pulseX])*exp(-t*t); + --pulseCounter; + } +} + +struct Universe::Rectangle { + struct std::pair xRange; + struct std::pair yRange; + Rectangle (int startX, int startY, int width, int height):xRange(startX,width),yRange(startY,height){} + int StartX() const {return xRange.first;} + int StartY() const {return yRange.first;} + int Width() const {return xRange.second;} + int Height() const {return yRange.second;} + int EndX() const {return xRange.first + xRange.second;} + int EndY() const {return yRange.first + yRange.second;} + +}; + +void Universe::UpdateStress(Rectangle const& r ) { + drawing_area drawing(r.StartX(),r.StartY(),r.Width(),r.Height(),drawingMemory); + for( int i=r.StartY(); i=ColorMapSize ) index = ColorMapSize-1; + color_t* c = ColorMap[material[i][j]]; + drawing.put_pixel(c[index]); + } + } +} + +void Universe::SerialUpdateStress() { + Rectangle area(0, 0, UniverseWidth-1, UniverseHeight-1); + UpdateStress(area); +} + +struct UpdateStressBody { + Universe & u_; + UpdateStressBody(Universe & u):u_(u){} + void operator()( const tbb::blocked_range& range ) const { + Universe::Rectangle area(0, range.begin(), u_.UniverseWidth-1, range.size()); + u_.UpdateStress(area); + } +}; + +void Universe::ParallelUpdateStress(tbb::affinity_partitioner &affinity) { + tbb::parallel_for( tbb::blocked_range( 0, UniverseHeight-1 ), // Index space for loop + UpdateStressBody(*this), // Body of loop + affinity ); // Affinity hint +} + +void Universe::UpdateVelocity(Rectangle const& r) { + for( int i=r.StartY(); i& y_range ) const { + u_.UpdateVelocity(Universe::Rectangle(1,y_range.begin(),u_.UniverseWidth-1,y_range.size())); + } +}; + +void Universe::ParallelUpdateVelocity(tbb::affinity_partitioner &affinity) { + tbb::parallel_for( tbb::blocked_range( 1, UniverseHeight ), // Index space for loop + UpdateVelocityBody(*this), // Body of loop + affinity ); // Affinity hint +} + +void Universe::SerialUpdateUniverse() { + UpdatePulse(); + SerialUpdateStress(); + SerialUpdateVelocity(); +} + +void Universe::ParallelUpdateUniverse() { + /** Affinity is an argument to parallel_for to hint that an iteration of a loop + is best replayed on the same processor for each execution of the loop. + It is a static object because it must remember where the iterations happened + in previous executions. */ + static tbb::affinity_partitioner affinity; + UpdatePulse(); + ParallelUpdateStress(affinity); + ParallelUpdateVelocity(affinity); +} + +bool Universe::TryPutNewPulseSource(int x, int y){ + if(pulseCounter == 0) { + pulseCounter = pulseTime; + pulseX = x; pulseY = y; + return true; + } + return false; +} + +void Universe::SetDrawingMemory(const drawing_memory &dmem) { + drawingMemory = dmem; +} diff --git a/examples/parallel_for/seismic/universe.h b/examples/parallel_for/seismic/universe.h new file mode 100644 index 0000000..ccad69e --- /dev/null +++ b/examples/parallel_for/seismic/universe.h @@ -0,0 +1,118 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef UNIVERSE_H_ +#define UNIVERSE_H_ + +#ifndef UNIVERSE_WIDTH +#define UNIVERSE_WIDTH 1024 +#endif +#ifndef UNIVERSE_HEIGHT +#define UNIVERSE_HEIGHT 512 +#endif + +#include "../../common/gui/video.h" +#include "tbb/partitioner.h" + +class Universe { +public: + enum { + UniverseWidth = UNIVERSE_WIDTH, + UniverseHeight = UNIVERSE_HEIGHT + }; +private: + //in order to avoid performance degradation due to cache aliasing issue + //some padding is needed after each row in array, and between array themselves. + //the padding is achieved by adjusting number of rows and columns. + //as the compiler is forced to place class members of the same clause in order of the + //declaration this seems to be the right way of padding. + + //magic constants added below are chosen experimentally for 1024x512. + enum { + MaxWidth = UniverseWidth+1, + MaxHeight = UniverseHeight+3 + }; + + typedef float ValueType; + + //! Horizontal stress + ValueType S[MaxHeight][MaxWidth]; + + //! Velocity at each grid point + ValueType V[MaxHeight][MaxWidth]; + + //! Vertical stress + ValueType T[MaxHeight][MaxWidth]; + + //! Coefficient related to modulus + ValueType M[MaxHeight][MaxWidth]; + + //! Damping coefficients + ValueType D[MaxHeight][MaxWidth]; + + //! Coefficient related to lightness + ValueType L[MaxHeight][MaxWidth]; + + enum { ColorMapSize = 1024}; + color_t ColorMap[4][ColorMapSize]; + + enum MaterialType { + WATER=0, + SANDSTONE=1, + SHALE=2 + }; + + //! Values are MaterialType, cast to an unsigned char to save space. + unsigned char material[MaxHeight][MaxWidth]; + +private: + enum { DamperSize = 32}; + + int pulseTime; + int pulseCounter; + int pulseX; + int pulseY; + + drawing_memory drawingMemory; + +public: + void InitializeUniverse(video const& colorizer); + + void SerialUpdateUniverse(); + void ParallelUpdateUniverse(); + bool TryPutNewPulseSource(int x, int y); + void SetDrawingMemory(const drawing_memory &dmem); +private: + struct Rectangle; + void UpdatePulse(); + void UpdateStress(Rectangle const& r ); + + void SerialUpdateStress() ; + friend struct UpdateStressBody; + friend struct UpdateVelocityBody; + void ParallelUpdateStress(tbb::affinity_partitioner &affinity); + + void UpdateVelocity(Rectangle const& r); + + void SerialUpdateVelocity() ; + void ParallelUpdateVelocity(tbb::affinity_partitioner &affinity); +}; + +#endif /* UNIVERSE_H_ */ diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c0ba5eb --- /dev/null +++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj @@ -0,0 +1,548 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; + 84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; }; + 84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; }; + 84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; }; + 84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; }; + 84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; }; + 84B8DA87152CA99C00D59B95 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; }; + 84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; }; + 84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; }; + 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; }; + 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; }; + D31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; + D31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; + D31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; + D31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; }; + D31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; }; + D3BD96921C0DD55E00163D8B /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; }; + D3BD96931C0DD56900163D8B /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; }; + D3BD96941C0DD57600163D8B /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; }; + D3BD96951C0DD59200163D8B /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; }; + D3BD96961C0DD5A000163D8B /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; }; + D3BD96971C0DD5A900163D8B /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; }; + D3BD96A31C0DE2BB00163D8B /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA99152CADF400D59B95 /* macvideo.cpp */; }; + D3BD96A61C0DE3DE00163D8B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D3BD96A51C0DE3DE00163D8B /* main.m */; }; + D3BD96AB1C0E08E500163D8B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D3BD96A51C0DE3DE00163D8B /* main.m */; }; + D3BD96B31C0E0AFE00163D8B /* tbbExample-Info.ios.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */; }; + D3BD96B51C0E0B2200163D8B /* tbbExample-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */; }; + D3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D3BD96B61C0E11C600163D8B /* iOS.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; + 84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = ""; }; + 84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = ""; }; + 84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = ""; }; + 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = tbbAppDelegate.m; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.m; sourceTree = ""; }; + 84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tbbExample-Prefix.pch"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; sourceTree = ""; }; + 84B8DA7D152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = ""; }; + 84B8DA7F152CA97B00D59B95 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = MainMenu.xib; sourceTree = ""; }; + 84B8DA82152CA99C00D59B95 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = ""; }; + 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = seismic_video.cpp; path = ../seismic_video.cpp; sourceTree = ""; }; + 84B8DA84152CA99C00D59B95 /* seismic_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = seismic_video.h; path = ../seismic_video.h; sourceTree = ""; }; + 84B8DA85152CA99C00D59B95 /* universe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = universe.cpp; path = ../universe.cpp; sourceTree = ""; }; + 84B8DA86152CA99C00D59B95 /* universe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = universe.h; path = ../universe.h; sourceTree = ""; }; + 84B8DA99152CADF400D59B95 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = ""; }; + 84D017511527431F0008A4E0 /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 84D017551527431F0008A4E0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 84D017581527431F0008A4E0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + D31F32781C12DEE000A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = ""; }; + D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = ""; }; + D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "tbbExample-Info.ios.plist"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; sourceTree = ""; }; + D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = ""; }; + D3BD96A51C0DE3DE00163D8B /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = ""; }; + D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "tbbExample-Info.plist"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; sourceTree = ""; }; + D3BD96B61C0E11C600163D8B /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = ""; }; + D3BD96BB1C0E19E700163D8B /* tbbExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 84D0174E1527431F0008A4E0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */, + 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */, + 84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */, + D31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3BD96571C0DD00400163D8B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */, + D31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 84B8DA6C152CA8D900D59B95 /* tbbExample Sources */ = { + isa = PBXGroup; + children = ( + 84B8DA7B152CA97B00D59B95 /* Resources */, + 84B8DA82152CA99C00D59B95 /* main.cpp */, + D3BD96A51C0DE3DE00163D8B /* main.m */, + 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */, + 84B8DA84152CA99C00D59B95 /* seismic_video.h */, + 84B8DA85152CA99C00D59B95 /* universe.cpp */, + 84B8DA86152CA99C00D59B95 /* universe.h */, + ); + name = "tbbExample Sources"; + sourceTree = ""; + }; + 84B8DA7B152CA97B00D59B95 /* Resources */ = { + isa = PBXGroup; + children = ( + D3BD96B61C0E11C600163D8B /* iOS.storyboard */, + 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */, + 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */, + ); + name = Resources; + path = ../../../common/gui/xcode/tbbExample/en.lproj; + sourceTree = ""; + }; + 84B8DA98152CAD8600D59B95 /* Gui layer */ = { + isa = PBXGroup; + children = ( + 84B8DA99152CADF400D59B95 /* macvideo.cpp */, + 84B8DA70152CA90100D59B95 /* OpenGLView.h */, + 84B8DA71152CA90100D59B95 /* OpenGLView.m */, + 84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */, + 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */, + 84B8DA75152CA90100D59B95 /* tbbExample-Prefix.pch */, + ); + name = "Gui layer"; + sourceTree = ""; + }; + 84D017461527431F0008A4E0 = { + isa = PBXGroup; + children = ( + D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */, + D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */, + 84B8DA98152CAD8600D59B95 /* Gui layer */, + 84B8DA6C152CA8D900D59B95 /* tbbExample Sources */, + 84D017541527431F0008A4E0 /* Frameworks */, + 84D017521527431F0008A4E0 /* Products */, + ); + sourceTree = ""; + }; + 84D017521527431F0008A4E0 /* Products */ = { + isa = PBXGroup; + children = ( + 84D017511527431F0008A4E0 /* tbbExample.app */, + D3BD96BB1C0E19E700163D8B /* tbbExample.app */, + ); + name = Products; + sourceTree = ""; + }; + 84D017541527431F0008A4E0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 84D017591527431F0008A4E0 /* CoreData.framework */, + 84B8DA13152C9AC600D59B95 /* libtbb.dylib */, + D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */, + D31F32781C12DEE000A77D54 /* libtbb.dylib */, + D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */, + 84D0175A1527431F0008A4E0 /* Foundation.framework */, + 84D017581527431F0008A4E0 /* AppKit.framework */, + 84D01775152744BD0008A4E0 /* OpenGL.framework */, + 84D017551527431F0008A4E0 /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 84D017501527431F0008A4E0 /* tbbExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */; + buildPhases = ( + 84D0174D1527431F0008A4E0 /* Sources */, + 84D0174E1527431F0008A4E0 /* Frameworks */, + 84D0174F1527431F0008A4E0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tbbExample; + productName = tbbExample; + productReference = 84D017511527431F0008A4E0 /* tbbExample.app */; + productType = "com.apple.product-type.application"; + }; + D3BD96591C0DD00400163D8B /* tbbExample_ios */ = { + isa = PBXNativeTarget; + buildConfigurationList = D3BD96841C0DD00500163D8B /* Build configuration list for PBXNativeTarget "tbbExample_ios" */; + buildPhases = ( + D3BD96561C0DD00400163D8B /* Sources */, + D3BD96571C0DD00400163D8B /* Frameworks */, + D3BD96581C0DD00400163D8B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tbbExample_ios; + productName = tbbExample_ios; + productReference = D3BD96BB1C0E19E700163D8B /* tbbExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 84D017481527431F0008A4E0 /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = tbb; + LastUpgradeCheck = 0710; + TargetAttributes = { + D3BD96591C0DD00400163D8B = { + CreatedOnToolsVersion = 7.1.1; + DevelopmentTeam = 7J8M3RM94C; + }; + }; + }; + buildConfigurationList = 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "seismic" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 84D017461527431F0008A4E0; + productRefGroup = 84D017521527431F0008A4E0 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 84D017501527431F0008A4E0 /* tbbExample */, + D3BD96591C0DD00400163D8B /* tbbExample_ios */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 84D0174F1527431F0008A4E0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3BD96B51C0E0B2200163D8B /* tbbExample-Info.plist in Resources */, + 84B8DA7A152CA90100D59B95 /* (null) in Resources */, + 84B8DA80152CA97B00D59B95 /* InfoPlist.strings in Resources */, + 84B8DA81152CA97B00D59B95 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3BD96581C0DD00400163D8B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */, + D31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */, + D3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */, + D3BD96B31C0E0AFE00163D8B /* tbbExample-Info.ios.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 84D0174D1527431F0008A4E0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */, + 84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */, + 84B8DA87152CA99C00D59B95 /* main.cpp in Sources */, + D3BD96A31C0DE2BB00163D8B /* macvideo.cpp in Sources */, + 84B8DA88152CA99C00D59B95 /* seismic_video.cpp in Sources */, + D3BD96A61C0DE3DE00163D8B /* main.m in Sources */, + 84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3BD96561C0DD00400163D8B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3BD96941C0DD57600163D8B /* universe.cpp in Sources */, + D3BD96921C0DD55E00163D8B /* main.cpp in Sources */, + D3BD96951C0DD59200163D8B /* macvideo.cpp in Sources */, + D3BD96931C0DD56900163D8B /* seismic_video.cpp in Sources */, + D3BD96971C0DD5A900163D8B /* tbbAppDelegate.m in Sources */, + D3BD96AB1C0E08E500163D8B /* main.m in Sources */, + D3BD96961C0DD5A000163D8B /* OpenGLView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 84B8DA7D152CA97B00D59B95 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 84B8DA7F152CA97B00D59B95 /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 84D01770152743200008A4E0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 84D01771152743200008A4E0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; + SDKROOT = macosx; + }; + name = Release; + }; + 84D01773152743200008A4E0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = NO; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_BUNDLE_IDENTIFIER = "Intel.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + RUN_CLANG_STATIC_ANALYZER = YES; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + VERSION_INFO_BUILDER = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 84D01774152743200008A4E0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = NO; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../../../lib\"", + "\"$(SRCROOT)\"", + ); + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_BUNDLE_IDENTIFIER = "Intel.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + RUN_CLANG_STATIC_ANALYZER = YES; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + VERSION_INFO_BUILDER = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + D3BD96851C0DD00500163D8B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + "__TBB_IOS=1", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; + PRODUCT_NAME = tbbExample; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + D3BD96861C0DD00500163D8B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = "__TBB_IOS=1"; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; + LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; + PRODUCT_NAME = tbbExample; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 1; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "seismic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 84D01770152743200008A4E0 /* Debug */, + 84D01771152743200008A4E0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 84D01773152743200008A4E0 /* Debug */, + 84D01774152743200008A4E0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D3BD96841C0DD00500163D8B /* Build configuration list for PBXNativeTarget "tbbExample_ios" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D3BD96851C0DD00500163D8B /* Debug */, + D3BD96861C0DD00500163D8B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 84D017481527431F0008A4E0 /* Project object */; +} diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme new file mode 100644 index 0000000..9975c8e --- /dev/null +++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.ios.xcscheme @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme new file mode 100644 index 0000000..21b8d64 --- /dev/null +++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/xcshareddata/xcschemes/tbbExample.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/parallel_for/tachyon/Makefile b/examples/parallel_for/tachyon/Makefile new file mode 100644 index 0000000..7df8526 --- /dev/null +++ b/examples/parallel_for/tachyon/Makefile @@ -0,0 +1,184 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# The original source for this example is +# Copyright (c) 1994-2008 John E. Stone +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. 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. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + +# GNU Makefile that builds and runs example. +NAME:=tachyon + +# The C++ compiler +ifneq (,$(shell which icc 2>/dev/null)) +CXX=icc +endif # icc + +# The default runtime arguments +export ARGS = dat/balls.dat +export PERF_RUN_ARGS = silent dat/balls3.dat +export LIGHT_ARGS= dat/model2.dat + +# define name suffix +SUFFIX = .$(VERSION) + +LIBS ?= -lm + +include ../../common/gui/Makefile.gmake + +ifeq ($(UI),x) +UI_CXXFLAGS += -DX_FULLSYNC +ifneq (,$(findstring -lXext,$(LIBS))) +UI_CXXFLAGS += -DX_NOSHMPIX +endif +endif # X + +MYCXXFLAGS = $(CXXFLAGS) $(UI_CXXFLAGS) + +all: build run +release: build +debug: build_debug +test: run + +build: build_serial build_tbb1d build_tbb +build_debug: build_serial_debug build_tbb1d_debug build_tbb_debug +run: run_serial run_tbb1d run_tbb + +serial: build_serial run_serial +serial_debug: build_serial_debug run_serial +tbb: build_tbb run_tbb +tbb_debug: build_tbb_debug run_tbb +tbb1d: build_tbb1d run_tbb1d +tbb1d_debug: build_tbb1d_debug run_tbb1d + +build_serial: + $(MAKE) VERSION=serial build_one +build_serial_debug: + $(MAKE) VERSION=serial ADD_DEBUG=1 build_one +run_serial: + $(MAKE) VERSION=serial run_one + +build_tbb: + $(MAKE) VERSION=tbb ADD_TBB=1 build_one +build_tbb_debug: + $(MAKE) VERSION=tbb ADD_TBB=1 ADD_DEBUG=1 build_one +run_tbb: + $(MAKE) VERSION=tbb run_one + +build_tbb1d: + $(MAKE) VERSION=tbb1d ADD_TBB=1 build_one +build_tbb1d_debug: + $(MAKE) VERSION=tbb1d ADD_TBB=1 ADD_DEBUG=1 build_one +run_tbb1d: + $(MAKE) VERSION=tbb1d run_one + + +perf_build: + $(MAKE) UI=con VERSION=tbb ADD_TBB=1 build_one +perf_run: + $(MAKE) UI=con VERSION=tbb run_perf_one + +light_test: + $(MAKE) UI=con VERSION=tbb light_test_one + + +# +# Per-build Makefile rules (for recursive $(MAKE) calls from above) +# + +SVERSION = $(VERSION) + +ifeq ($(ADD_DEBUG),1) +MYCXXFLAGS += -O0 -g -D_DEBUG +else +MYCXXFLAGS += -O2 -DNDEBUG +endif + + +ifeq ($(ADD_TBB),1) +MYCXXFLAGS += +ifeq ($(ADD_DEBUG),1) +MYCXXFLAGS += -DTBB_USE_DEBUG +LIBS += -ltbb_debug +else +LIBS += -ltbb +endif +endif + +ifeq ($(shell uname), Linux) +LIBS += -lrt +else ifeq ($(shell uname), Darwin) +override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib +endif + +SOURCE = ../../common/gui/$(UI)video.cpp src/trace.$(SVERSION).cpp src/main.cpp src/pthread.cpp src/tachyon_video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp src/ui.cpp src/util.cpp src/vector.cpp src/vol.cpp + +build_one: $(EXE) + +run_one: +ifeq ($(UI),mac) + export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(run_cmd) ./$(EXE) $(ARGS) +else + $(run_cmd) ./$(EXE) $(ARGS) +endif + +run_perf_one: + $(run_cmd) ./$(EXE) $(PERF_RUN_ARGS) + +light_test_one: + $(run_cmd) ./$(EXE) $(LIGHT_ARGS) + +$(EXE): $(SOURCE) +ifeq ($(UI),mac) + mkdir -p $(APPRES)/en.lproj $(NAME)$(SUFFIX).app/Contents/MacOS + cp ../../common/gui/xcode/tbbExample/tbbExample-Info.plist $(NAME)$(SUFFIX).app/Contents/Info.plist + cp ../../common/gui/xcode/tbbExample/PkgInfo $(NAME)$(SUFFIX).app/Contents + cp ../../common/gui/xcode/tbbExample/en.lproj/* $(APPRES)/en.lproj + $(CXX_UI) $(MYCXXFLAGS) $(CXXFLAGS) -c $(MACUISOURCES) +endif # macOS* + $(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(MACUIOBJS) $(LIBS) + $(RM) *.o + +clean: VERSION = * +clean: +ifeq ($(UI),mac) + rm -rf $(NAME).* +endif + $(RM) $(EXE) *.o *.d diff --git a/examples/parallel_for/tachyon/Makefile.windows b/examples/parallel_for/tachyon/Makefile.windows new file mode 100644 index 0000000..9b5266b --- /dev/null +++ b/examples/parallel_for/tachyon/Makefile.windows @@ -0,0 +1,150 @@ +# Copyright (c) 2005-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# + +# The original source for this example is +# Copyright (c) 1994-2008 John E. Stone +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. 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. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + +# Common Makefile that builds and runs example. + +# Trying to find if icl.exe is set +CXX1 = $(TBB_CXX)- +CXX2 = $(CXX1:icl.exe-=icl.exe) +CXX = $(CXX2:-=cl.exe) + +# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw) +#UI = con +UI = gdi +#UI = dd + +# Machine architecture, auto-detected from TBB_TARGET_ARCH by default +# Use XARCH variable to change it. See index.html for more information +ARCH0 = $(TBB_TARGET_ARCH)- +ARCH1 = $(ARCH0:ia32-=x86) +ARCH2 = $(ARCH1:intel64-=AMD64) +XARCH = $(ARCH2:-=x86) + +# The default runtime arguments +ARGS = dat\balls.dat +PERF_RUN_ARGS = silent dat\balls3.dat +LIGHT_ARGS=dat\model2.dat + +# Add these for tbb/tbb1d release builds +# /GL is a workaround to prevent run-time crash when built by VS2010 +CXXFLAGS_TBB_NDEBUG = $(CXXFLAGS) /GL +LIBS_TBB_NDEBUG = tbb.lib $(LIBS) + +# Add these for tbb/tbb1d debug builds +CXXFLAGS_TBB_DEBUG = $(CXXFLAGS) /D TBB_USE_DEBUG +LIBS_TBB_DEBUG = tbb_debug.lib $(LIBS) + + +MAKEINC = ../../common/gui/Makefile.win +# scr/main.cpp src/tachyon_video.cpp cannot be included to the SOURCE_COMMON list since it depends on UI and /subsystem which is not specified for common SOURCE build +SOURCE = src/main.cpp src/tachyon_video.cpp +SOURCE_COMMON = src/pthread.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp src/ui.cpp src/util.cpp src/vector.cpp src/vol.cpp + +# Targets +all: build run +release: build +debug: build_debug +test: run + +build: build_serial build_tbb1d build_tbb +build_debug: build_serial_debug build_tbb1d_debug build_tbb_debug +run: run_serial run_tbb1d run_tbb + +serial: build_serial run_serial +serial_debug: build_serial_debug run_serial +tbb: build_tbb run_tbb +tbb_debug: build_tbb_debug run_tbb +tbb1d: build_tbb1d run_tbb1d +tbb1d_debug: build_tbb1d_debug run_tbb1d + +CXXFLAGS_COMMON = /c /nologo /EHsc /Zc:forScope /D WIN32 /D _MBCS /D _CRT_SECURE_NO_DEPRECATE /Foobj/ /MP $(CXXFLAGS) +CXXFLAGS_NDEBUG = /MD /O2 /Ot /Gy /D NDEBUG +CXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG +LIB_LINK_FLAGS = /nologo /machine:$(XARCH) + +tachyon_common.lib: + @cmd.exe /C if not exist obj mkdir obj + $(CXX) $(CXXFLAGS_NDEBUG) $(CXXFLAGS_COMMON) $(SOURCE_COMMON) + LIB $(LIB_LINK_FLAGS) obj/*.obj /OUT:$@ + @cmd.exe /C if exist obj rmdir /S /Q obj + +tachyon_common_debug.lib: + @cmd.exe /C if not exist obj mkdir obj + $(CXX) $(CXXFLAGS_DEBUG) $(CXXFLAGS_COMMON) $(SOURCE_COMMON) + LIB $(LIB_LINK_FLAGS) obj/*.obj /OUT:$@ + @cmd.exe /C if exist obj rmdir /S /Q obj + +build_serial: tachyon_common.lib + @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.serial.cpp $(SOURCE) tachyon_common.lib" EXE=tachyon.serial.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS="/GL $(CXXFLAGS)" XARCH=$(XARCH) build_one +build_serial_debug: tachyon_common_debug.lib + @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.serial.cpp $(SOURCE) tachyon_common_debug.lib" EXE=tachyon.serial.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS=$(CXXFLAGS) XARCH=$(XARCH) build_one +run_serial: + -.\tachyon.serial.exe $(ARGS) + +build_tbb: tachyon_common.lib + @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb.cpp $(SOURCE) tachyon_common.lib" EXE=tachyon.tbb.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_NDEBUG)" LFLAGS="$(LIBS_TBB_NDEBUG)" XARCH=$(XARCH) build_one +build_tbb_debug: tachyon_common_debug.lib + @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb.cpp $(SOURCE) tachyon_common_debug.lib" EXE=tachyon.tbb.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_DEBUG)" LFLAGS="$(LIBS_TBB_DEBUG)" XARCH=$(XARCH) build_one +run_tbb: + -.\tachyon.tbb.exe $(ARGS) + +build_tbb1d: tachyon_common.lib + @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb1d.cpp $(SOURCE) tachyon_common.lib" EXE=tachyon.tbb1d.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_NDEBUG)" LFLAGS="$(LIBS_TBB_NDEBUG)" XARCH=$(XARCH) build_one +build_tbb1d_debug: tachyon_common_debug.lib + @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb1d.cpp $(SOURCE) tachyon_common_debug.lib" EXE=tachyon.tbb1d.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_DEBUG)" LFLAGS="$(LIBS_TBB_DEBUG)" XARCH=$(XARCH) build_one +run_tbb1d: + -.\tachyon.tbb1d.exe $(ARGS) + + +clean: + @cmd.exe /C del tachyon.* *.manifest *.obj *.lib msvs\gui.res *.?db + +perf_build: tachyon_common.lib + @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb.cpp $(SOURCE) tachyon_common.lib" EXE=tachyon.tbb.exe RCNAME=gui UI=con CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_NDEBUG)" LFLAGS="$(LIBS_TBB_NDEBUG)" XARCH=$(XARCH) build_one +perf_run: + -.\tachyon.tbb.exe $(PERF_RUN_ARGS) + +light_test: + -.\tachyon.tbb.exe $(LIGHT_ARGS) diff --git a/examples/parallel_for/tachyon/dat/820spheres.dat b/examples/parallel_for/tachyon/dat/820spheres.dat new file mode 100644 index 0000000..5d5a430 --- /dev/null +++ b/examples/parallel_for/tachyon/dat/820spheres.dat @@ -0,0 +1,1671 @@ +BEGIN_SCENE + OUTFILE /dev/null + RESOLUTION 512 512 + VERBOSE 0 + +CAMERA + ZOOM 1.0 + ASPECTRATIO 1.0 + ANTIALIASING 0 + RAYDEPTH 12 + CENTER 0.0 0.0 2.0 + VIEWDIR 0 0 -1 + UPDIR 0 1 0 + +END_CAMERA + +LIGHT CENTER 4 3 2 RAD 0.2 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 1 -4 4 RAD 0.2 COLOR 0.5 0.5 0.5 + +LIGHT CENTER -3 1 5 RAD 0.2 COLOR 0.5 0.5 0.5 + +TEXDEF txt001 AMBIENT 0.2 DIFFUSE 0.8 SPECULAR 0 OPACITY 1 + COLOR 1 0.75 0.33 + TEXFUNC 0 + +TEXDEF txt002 AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + COLOR 1.0 1.0 1.0 TEXFUNC 0 + + SPHERE CENTER 0 0 0 RAD 0.5 + txt002 + SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.852418 0.0955788 2.30268e-16 RAD 0.0555556 + txt002 + SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0955788 0.852418 1.31582e-16 RAD 0.0555556 + txt002 + SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.508983 0.690426 1.25414e-16 RAD 0.0555556 + txt002 + SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.786005 -0.343435 1.25414e-16 RAD 0.0555556 + txt002 + SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.343435 -0.786005 1.25414e-16 RAD 0.0555556 + txt002 + SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.690426 -0.508983 2.241e-16 RAD 0.0555556 + txt002 + SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185 + txt002 + +END_SCENE diff --git a/examples/parallel_for/tachyon/dat/balls.dat b/examples/parallel_for/tachyon/dat/balls.dat new file mode 100644 index 0000000..0d4bbb1 --- /dev/null +++ b/examples/parallel_for/tachyon/dat/balls.dat @@ -0,0 +1,14804 @@ +BEGIN_SCENE + OUTFILE /dev/null + RESOLUTION 512 512 + VERBOSE 0 + +CAMERA + ZOOM 1.20711 +ASPECTRATIO 1.0 + ANTIALIASING 0 + RAYDEPTH 5 + CENTER 2.1 1.3 1.7 + VIEWDIR -0.700389 -0.433574 -0.566982 + UPDIR -0.482085 -0.298433 0.82373 + +END_CAMERA + +BACKGROUND 0.078 0.361 0.753 + +LIGHT CENTER 4 3 2 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 1 -4 4 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER -3 1 5 RAD 0.002 COLOR 0.5 0.5 0.5 + +TEXDEF txt001 AMBIENT 0.2 DIFFUSE 0.8 SPECULAR 0 OPACITY 1 +PHONG PLASTIC 0 PHONG_SIZE 100000 + COLOR 1 0.75 0.33 + TEXFUNC 0 + +TRI + V0 12 12 -0.5 V1 -12 -12 -0.5 V2 12 -12 -0.5 + txt001 +TRI + V0 12 12 -0.5 V1 -12 12 -0.5 V2 -12 -12 -0.5 + txt001 +TEXDEF txt002 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 +PHONG PLASTIC 0.5 PHONG_SIZE 45.2776 + COLOR 1 0.9 0.7 + TEXFUNC 0 + + SPHERE CENTER 0 0 0 RAD 0.5 + txt002 + SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER 0.481689 0.481689 0.57904 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475329 0.45787 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45787 0.475329 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.477074 0.494534 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.453255 0.488174 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4661 0.48356 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.494534 0.477074 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48356 0.4661 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488174 0.453255 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.47044 0.419664 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447954 0.425689 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.468014 0.433095 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484109 0.40322 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481683 0.416651 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475292 0.392801 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.464049 0.395814 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455233 0.385395 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.441563 0.401839 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.419664 0.47044 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433095 0.468014 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.425689 0.447954 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.395814 0.464049 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401839 0.441563 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385395 0.455233 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40322 0.484109 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.392801 0.475292 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416651 0.481683 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.441197 0.503434 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452601 0.483752 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434161 0.494577 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418001 0.501466 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410965 0.492609 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.406209 0.479816 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436441 0.490641 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42465 0.46899 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447846 0.470958 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.36376 0.497028 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383056 0.487812 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383056 0.487812 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34864 0.481907 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352815 0.457572 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34864 0.481907 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352815 0.457572 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.376578 0.444814 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399064 0.438789 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385395 0.455233 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356518 0.437408 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.365335 0.447826 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.358944 0.423976 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.370187 0.420964 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372614 0.407532 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.392673 0.414939 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.503434 0.441197 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.494577 0.434161 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.483752 0.452601 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490641 0.436441 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.470958 0.447846 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46899 0.42465 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501466 0.418001 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.479816 0.406209 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.492609 0.410965 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.444814 0.376578 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455233 0.385395 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.438789 0.399064 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420964 0.370187 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.414939 0.392673 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407532 0.372614 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.437408 0.356518 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423976 0.358944 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447826 0.365335 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.497028 0.36376 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.487812 0.383056 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.487812 0.383056 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481907 0.34864 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457572 0.352815 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481907 0.34864 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457572 0.352815 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.492085 0.33495 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488469 0.313874 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471009 0.331334 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495701 0.356025 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.474625 0.352409 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495701 0.356025 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51316 0.338566 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51316 0.338566 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.509544 0.31749 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.40568 0.315605 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403931 0.312107 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419383 0.329161 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426095 0.30867 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.439797 0.322225 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.444759 0.298235 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410643 0.291616 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429307 0.281181 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408893 0.288117 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.440864 0.389015 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457301 0.37895 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.451857 0.367697 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418755 0.378463 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429748 0.357145 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.413085 0.357845 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4242 0.389715 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418529 0.369098 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440637 0.37965 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.546497 0.347572 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532117 0.331508 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522481 0.352406 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.543964 0.350552 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519948 0.355387 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.52705 0.337468 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5536 0.329654 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536686 0.31657 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.53922 0.313589 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.48474 0.389488 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495668 0.369235 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.477004 0.379669 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.461764 0.388188 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.454027 0.37837 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449715 0.366636 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480429 0.377754 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46838 0.356202 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.491357 0.357501 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.518259 0.314219 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519922 0.310678 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504895 0.328108 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.49768 0.307788 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484316 0.321677 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478764 0.297816 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER 0.512708 0.290358 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493791 0.280387 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51437 0.286818 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.539811 0.274878 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.520873 0.290418 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.533373 0.290264 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.537674 0.255722 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531235 0.271108 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER 0.516598 0.252106 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.525174 0.255876 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504099 0.25226 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506236 0.271416 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.50716 0.230587 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51153 0.24936 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499694 0.253381 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484125 0.222248 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER 0.476659 0.245042 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46546 0.232683 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495961 0.218227 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.477296 0.228661 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER 0.500331 0.237 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.455172 0.217147 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472226 0.232599 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45115 0.228983 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433942 0.226031 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429921 0.237867 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429767 0.250367 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455018 0.229647 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.450842 0.253983 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472072 0.245099 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.33495 0.492085 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331334 0.471009 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313874 0.488469 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338566 0.51316 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31749 0.509544 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338566 0.51316 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356025 0.495701 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356025 0.495701 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352409 0.474625 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389015 0.440864 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367697 0.451857 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37895 0.457301 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389715 0.4242 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37965 0.440637 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369098 0.418529 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378463 0.418755 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357845 0.413085 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357145 0.429748 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.315605 0.40568 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329161 0.419383 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312107 0.403931 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291616 0.410643 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288117 0.408893 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281181 0.429307 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30867 0.426095 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298235 0.444759 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322225 0.439797 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.274878 0.539811 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290264 0.533373 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290418 0.520873 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.255876 0.525174 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271416 0.506236 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.25226 0.504099 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.255722 0.537674 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.252106 0.516598 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271108 0.531235 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.217147 0.455172 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228983 0.45115 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.232599 0.472226 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229647 0.455018 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245099 0.472072 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253983 0.450842 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.226031 0.433942 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250367 0.429767 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237867 0.429921 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.230587 0.50716 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253381 0.499694 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER 0.24936 0.51153 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218227 0.495961 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237 0.500331 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228661 0.477296 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER 0.222248 0.484125 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER 0.232683 0.46546 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245042 0.476659 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.347572 0.546497 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352406 0.522481 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331508 0.532117 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329654 0.5536 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313589 0.53922 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31657 0.536686 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350552 0.543964 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337468 0.52705 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355387 0.519948 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.314219 0.518259 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328108 0.504895 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310678 0.519922 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290358 0.512708 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286818 0.51437 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280387 0.493791 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307788 0.49768 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297816 0.478764 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321677 0.484316 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389488 0.48474 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379669 0.477004 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369235 0.495668 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.377754 0.480429 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357501 0.491357 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356202 0.46838 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388188 0.461764 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366636 0.449715 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37837 0.454027 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.264242 0.467193 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER 0.272442 0.447086 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253384 0.459832 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2424 0.46672 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.231541 0.459359 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228758 0.446141 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261459 0.453974 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247817 0.433396 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269659 0.433868 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.319874 0.420236 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.303021 0.407886 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.296625 0.428474 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318692 0.420256 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295442 0.428494 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.300656 0.407926 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325088 0.399668 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307053 0.387338 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308235 0.387318 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.263032 0.459076 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.270029 0.436804 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247378 0.440021 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.246239 0.472047 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230585 0.452992 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236443 0.462746 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26889 0.468829 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259094 0.459528 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275887 0.446557 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.174744 0.447688 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.197172 0.437457 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.1895 0.447523 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156968 0.436708 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171724 0.436544 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161621 0.415499 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164641 0.426642 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.169293 0.405432 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187069 0.416412 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.177682 0.45215 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.190087 0.449636 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200611 0.44299 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER 0.169628 0.432153 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER 0.192556 0.422992 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173978 0.409641 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159104 0.438799 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.163454 0.416288 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171508 0.436286 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.13761 0.368692 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.158434 0.366998 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153102 0.387887 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138607 0.369329 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER 0.154099 0.388523 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160429 0.36827 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER 0.14394 0.34844 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165761 0.347381 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164764 0.346745 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.237348 0.393812 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251829 0.390976 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234368 0.408432 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.213518 0.387445 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER 0.210538 0.402066 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.204169 0.378242 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23098 0.369989 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221631 0.360786 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245461 0.367152 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.209548 0.312342 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229235 0.324887 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209827 0.337 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188347 0.31322 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188626 0.337878 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.186834 0.326643 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207755 0.301107 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206242 0.31453 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227442 0.313652 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.302145 0.344931 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297823 0.356827 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.289691 0.366251 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28356 0.334005 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271106 0.355325 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.260653 0.334975 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291692 0.324581 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268785 0.325551 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28737 0.336477 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.110567 0.524146 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER 0.126738 0.506465 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.112687 0.504055 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0863343 0.519988 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0884544 0.499897 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0782715 0.49815 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100385 0.522399 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0923218 0.500561 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER 0.116555 0.504718 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.177777 0.492047 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176681 0.473492 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159222 0.490951 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161488 0.493217 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.142932 0.492121 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144102 0.475831 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.178947 0.475757 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161561 0.458371 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177851 0.457202 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.167697 0.481967 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161561 0.458371 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144102 0.475831 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166528 0.498257 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.142932 0.492121 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159222 0.490951 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183987 0.480797 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176681 0.473492 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177851 0.457202 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0450372 0.477623 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.055591 0.475469 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696413 0.47788 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0465898 0.4591 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER 0.071194 0.459357 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0586963 0.438424 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325396 0.45669 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0446461 0.436013 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0430934 0.454536 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.10495 0.439381 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0911807 0.435691 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10864 0.45315 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128801 0.43299 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13249 0.44676 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138881 0.42291 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111341 0.415531 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.121421 0.40545 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0975713 0.411841 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.052284 0.366554 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0708393 0.36765 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0533799 0.385109 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511144 0.382844 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0522103 0.401399 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0685002 0.400229 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0685739 0.365384 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0859596 0.38277 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0871292 0.36648 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0493251 0.475575 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0725262 0.467381 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.06557 0.479825 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0339426 0.465141 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0501875 0.46939 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0417612 0.446512 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0408988 0.452697 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0487174 0.434069 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0640999 0.444504 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0623642 0.376634 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0859596 0.38277 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0685002 0.400229 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0460743 0.377803 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0522103 0.401399 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0533799 0.385109 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0635337 0.360344 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0708393 0.36765 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0871292 0.36648 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.125111 0.439381 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138881 0.435691 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.121421 0.45315 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101261 0.43299 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0975713 0.44676 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0911807 0.42291 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11872 0.415531 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10864 0.40545 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13249 0.411841 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0426858 0.273525 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.064638 0.265928 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0510334 0.281546 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0219434 0.26565 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.030291 0.273671 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0231533 0.250178 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0355481 0.250032 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.036758 0.23456 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0575003 0.242434 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.135677 0.265544 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138361 0.25778 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12224 0.275732 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115003 0.26032 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101567 0.270508 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.097014 0.247334 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER 0.131123 0.242369 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER 0.113134 0.229382 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER 0.133808 0.234605 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0971427 0.330622 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER 0.109956 0.310023 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER 0.091905 0.317013 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0735708 0.329151 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0683331 0.315541 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0628126 0.30708 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0916222 0.322161 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.080864 0.30009 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.104436 0.301561 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0110117 0.257416 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00823377 0.253319 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0102865 0.269325 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0105502 0.249215 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.010748 0.261124 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00915679 0.236916 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0126029 0.233209 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00710408 0.22091 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00664257 0.229111 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0555846 0.315856 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0705987 0.309941 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0705297 0.296292 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.03617 0.301531 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511152 0.281968 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0317696 0.281291 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.036239 0.31518 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0318385 0.29494 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.051253 0.309265 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.025169 0.224935 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0281502 0.217281 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0288111 0.241399 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0443054 0.234341 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0479475 0.250805 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.066423 0.236092 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0436445 0.210223 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0657621 0.211974 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0466257 0.202569 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0335228 0.179527 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0567332 0.187058 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0385291 0.203632 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0167878 0.181593 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER 0.021794 0.205698 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0232631 0.191189 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0349919 0.165018 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0414672 0.174615 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0582023 0.172549 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0867911 0.147549 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101845 0.166573 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER 0.083121 0.161663 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0635354 0.151669 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0598652 0.165782 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0553337 0.174812 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822597 0.156579 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.074058 0.179722 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0973138 0.175603 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.133336 0.176775 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136161 0.192663 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.124499 0.199753 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.110965 0.167739 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102127 0.190718 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0914184 0.174592 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.122627 0.160649 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.103081 0.167502 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.125452 0.176537 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.467193 0.264242 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459832 0.253384 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447086 0.272442 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER 0.453974 0.261459 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433868 0.269659 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433396 0.247817 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46672 0.2424 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446141 0.228758 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459359 0.231541 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.459076 0.263032 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440021 0.247378 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436804 0.270029 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.468829 0.26889 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446557 0.275887 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459528 0.259094 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472047 0.246239 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER 0.462746 0.236443 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452992 0.230585 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.420236 0.319874 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428474 0.296625 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407886 0.303021 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399668 0.325088 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387318 0.308235 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387338 0.307053 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420256 0.318692 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407926 0.300656 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428494 0.295442 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.393812 0.237348 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408432 0.234368 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.390976 0.251829 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369989 0.23098 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367152 0.245461 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.360786 0.221631 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387445 0.213518 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378242 0.204169 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402066 0.210538 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.344931 0.302145 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366251 0.289691 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356827 0.297823 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324581 0.291692 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336477 0.28737 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325551 0.268785 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334005 0.28356 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334975 0.260653 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355325 0.271106 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.312342 0.209548 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337 0.209827 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324887 0.229235 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301107 0.207755 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313652 0.227442 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31453 0.206242 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31322 0.188347 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.326643 0.186834 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337878 0.188626 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.447688 0.174744 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447523 0.1895 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER 0.437457 0.197172 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426642 0.164641 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416412 0.187069 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405432 0.169293 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436708 0.156968 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER 0.415499 0.161621 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436544 0.171724 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.368692 0.13761 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387887 0.153102 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366998 0.158434 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34844 0.14394 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER 0.346745 0.164764 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347381 0.165761 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369329 0.138607 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36827 0.160429 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388523 0.154099 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.45215 0.177682 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44299 0.200611 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449636 0.190087 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER 0.438799 0.159104 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436286 0.171508 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416288 0.163454 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.432153 0.169628 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409641 0.173978 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.422992 0.192556 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.273525 0.0426858 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281546 0.0510334 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER 0.265928 0.064638 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250032 0.0355481 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242434 0.0575003 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23456 0.036758 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26565 0.0219434 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250178 0.0231533 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273671 0.030291 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.330622 0.0971427 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317013 0.091905 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310023 0.109956 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322161 0.0916222 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301561 0.104436 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30009 0.080864 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329151 0.0735708 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30708 0.0628126 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315541 0.0683331 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.265544 0.135677 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275732 0.12224 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.25778 0.138361 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242369 0.131123 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234605 0.133808 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229382 0.113134 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26032 0.115003 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247334 0.097014 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER 0.270508 0.101567 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.179527 0.0335228 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203632 0.0385291 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187058 0.0567332 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165018 0.0349919 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172549 0.0582023 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174615 0.0414672 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181593 0.0167878 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191189 0.0232631 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205698 0.021794 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.176775 0.133336 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.199753 0.124499 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.192663 0.136161 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160649 0.122627 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176537 0.125452 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167502 0.103081 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167739 0.110965 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174592 0.0914184 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.190718 0.102127 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.147549 0.0867911 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161663 0.083121 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166573 0.101845 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156579 0.0822597 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.175603 0.0973138 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179722 0.074058 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.151669 0.0635354 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174812 0.0553337 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165782 0.0598652 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER 0.257416 -0.0110117 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269325 0.0102865 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253319 0.00823377 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233209 -0.0126029 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229111 0.00664257 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22091 0.00710408 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249215 -0.0105502 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236916 0.00915679 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261124 0.010748 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.224935 0.025169 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241399 0.0288111 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217281 0.0281502 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.210223 0.0436445 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.202569 0.0466257 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211974 0.0657621 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234341 0.0443054 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236092 0.066423 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250805 0.0479475 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.315856 0.0555846 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.296292 0.0705297 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.309941 0.0705987 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31518 0.036239 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.309265 0.051253 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29494 0.0318385 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301531 0.03617 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281291 0.0317696 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281968 0.0511152 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.524146 0.110567 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504055 0.112687 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506465 0.126738 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522399 0.100385 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504718 0.116555 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER 0.500561 0.0923218 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519988 0.0863343 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER 0.49815 0.0782715 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499897 0.0884544 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.481967 0.167697 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475831 0.144102 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.458371 0.161561 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480797 0.183987 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457202 0.177851 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.473492 0.176681 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498257 0.166528 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490951 0.159222 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.492121 0.142932 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.492047 0.177777 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490951 0.159222 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.473492 0.176681 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475757 0.178947 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457202 0.177851 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.458371 0.161561 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493217 0.161488 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475831 0.144102 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.492121 0.142932 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.475575 0.0493251 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER 0.479825 0.06557 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER 0.467381 0.0725262 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452697 0.0408988 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER 0.444504 0.0640999 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434069 0.0487174 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.465141 0.0339426 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446512 0.0417612 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46939 0.0501875 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.439381 0.125111 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45315 0.121421 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435691 0.138881 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.415531 0.11872 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.411841 0.13249 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40545 0.10864 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.43299 0.101261 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42291 0.0911807 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44676 0.0975713 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.376634 0.0623642 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400229 0.0685002 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38277 0.0859596 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.360344 0.0635337 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36648 0.0871292 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36765 0.0708393 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.377803 0.0460743 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385109 0.0533799 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401399 0.0522103 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.477623 0.0450372 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.47788 0.0696413 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475469 0.055591 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45669 0.0325396 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.454536 0.0430934 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436013 0.0446461 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4591 0.0465898 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER 0.438424 0.0586963 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459357 0.071194 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.366554 0.052284 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385109 0.0533799 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36765 0.0708393 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.365384 0.0685739 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36648 0.0871292 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38277 0.0859596 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382844 0.0511144 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400229 0.0685002 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401399 0.0522103 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.41922 0.125111 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40545 0.121421 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42291 0.138881 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44307 0.11872 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44676 0.13249 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45315 0.10864 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.425611 0.101261 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435691 0.0911807 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.411841 0.0975713 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.822021 0.302088 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.821938 0.282758 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.802598 0.298094 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER 0.824119 0.32499 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.804695 0.320997 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER 0.826132 0.328563 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843459 0.309654 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845472 0.313227 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843375 0.290324 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.785699 0.218449 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.802677 0.22345 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER 0.778718 0.223304 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770818 0.236351 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER 0.763837 0.241205 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER 0.772915 0.259253 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER 0.794777 0.236497 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.796874 0.2594 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER 0.811756 0.241498 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.741263 0.325175 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER 0.747715 0.32493 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.765112 0.325981 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745704 0.305466 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.769553 0.306272 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER 0.756597 0.285513 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.728307 0.304415 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7392 0.284462 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.734759 0.304171 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.851488 0.360404 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853509 0.335865 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.832518 0.347059 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER 0.836826 0.370319 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817857 0.356973 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.824185 0.355695 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857816 0.359125 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845176 0.344501 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.859838 0.334587 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.768944 0.369945 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER 0.788341 0.356172 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER 0.780624 0.356171 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.747572 0.359113 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759252 0.34534 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745596 0.33451 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755289 0.359115 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER 0.753313 0.334511 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774685 0.345342 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.83071 0.340361 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.840365 0.325527 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.822249 0.341208 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER 0.807766 0.336425 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.799305 0.337272 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER 0.794477 0.317654 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER 0.825882 0.320744 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.812593 0.301973 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.835537 0.30591 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.891539 0.292033 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER 0.868678 0.28812 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.872763 0.305711 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER 0.897348 0.285824 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER 0.878572 0.299501 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.880296 0.275701 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER 0.893263 0.268233 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876212 0.25811 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER 0.870402 0.264319 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.87538 0.26204 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.87108 0.266856 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER 0.860805 0.280934 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857361 0.252905 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842785 0.271799 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.835041 0.248586 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER 0.867636 0.238827 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845317 0.234508 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER 0.863337 0.243643 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.860225 0.206363 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER 0.858689 0.230102 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER 0.854636 0.223536 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.839784 0.193863 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.834196 0.211035 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817808 0.205101 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843837 0.200429 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER 0.821861 0.211667 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842301 0.224168 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.61556 0.221097 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621702 0.225035 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.635958 0.210779 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607567 0.198849 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627965 0.188531 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605717 0.180539 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593312 0.213105 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591462 0.194794 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.599454 0.217042 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.556122 0.208861 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575596 0.203643 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.578791 0.215568 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.552927 0.196936 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575596 0.203643 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569205 0.179793 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549732 0.185011 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.56601 0.167868 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569205 0.179793 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.631486 0.266765 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648629 0.250487 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.636704 0.247291 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607636 0.260374 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.612854 0.240901 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600929 0.237705 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.619561 0.26357 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.612854 0.240901 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.636704 0.247291 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684921 0.190903 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665787 0.178397 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669989 0.201661 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704395 0.196121 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.689462 0.206879 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704733 0.188833 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700193 0.172858 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700531 0.165569 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681058 0.160351 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.710584 0.23918 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705059 0.216195 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687599 0.233654 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701855 0.24791 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678869 0.242384 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687599 0.233654 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.719314 0.23045 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705059 0.216195 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.713788 0.207465 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.738169 0.160081 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718696 0.165299 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721891 0.177224 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.734974 0.148156 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718696 0.165299 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712305 0.141449 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.731779 0.136231 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.70911 0.129524 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712305 0.141449 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.634145 0.108412 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.650927 0.115965 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627664 0.111763 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616099 0.123683 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609618 0.127034 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.614836 0.146508 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639363 0.127886 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.6381 0.15071 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656145 0.135439 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.680265 0.0847178 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.686972 0.107387 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675047 0.104191 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656415 0.0783272 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651197 0.0978007 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639272 0.0946054 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.66834 0.0815225 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651197 0.0978007 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675047 0.104191 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.577317 0.105912 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600302 0.111438 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582843 0.128897 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.568587 0.114642 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.574113 0.137627 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582843 0.128897 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586046 0.0971825 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600302 0.111438 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609032 0.102708 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.625955 0.411883 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630791 0.390369 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607547 0.396287 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61429 0.429805 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.595882 0.414208 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607462 0.426212 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.637535 0.423887 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630706 0.420295 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642371 0.402373 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.68332 0.389713 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68332 0.389713 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688854 0.369058 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.652948 0.344865 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.632683 0.357697 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651954 0.357326 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.658482 0.324211 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.657489 0.336672 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643752 0.316388 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639211 0.324581 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624481 0.316758 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.618946 0.337413 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.541008 0.410169 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548718 0.410472 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.564748 0.405866 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539866 0.388816 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563607 0.384513 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546435 0.367766 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523836 0.393422 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530405 0.372372 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531546 0.393725 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.555534 0.296626 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572202 0.297216 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.550163 0.307914 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549999 0.31728 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.544629 0.328569 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.561133 0.338525 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572037 0.306582 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.583171 0.327827 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588706 0.307172 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.501272 0.340934 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501272 0.340934 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506807 0.320279 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.58161 0.452905 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5989 0.436077 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586467 0.434777 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.55776 0.446515 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562617 0.428387 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5512 0.423296 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570193 0.447815 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563633 0.424596 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587483 0.430987 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.547099 0.396248 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569716 0.388263 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.557504 0.403175 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527447 0.387819 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.537852 0.394747 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530412 0.371406 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539659 0.372907 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542624 0.356494 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562276 0.364922 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.637209 0.41723 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642848 0.401533 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624734 0.418027 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.615976 0.414703 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603501 0.4155 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600381 0.39648 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634089 0.39821 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.618494 0.379986 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639728 0.382513 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.872345 0.34259 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.86421 0.32016 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848329 0.338969 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER 0.866833 0.351888 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842817 0.348268 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853186 0.338757 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882715 0.333079 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.869068 0.319948 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER 0.87458 0.310649 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.849036 0.291048 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER 0.826067 0.287867 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER 0.840755 0.304882 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER 0.868341 0.28406 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.86006 0.297894 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER 0.864676 0.273891 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853652 0.267046 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER 0.849987 0.256877 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.830683 0.263865 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.808673 0.346884 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER 0.82298 0.335792 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER 0.807762 0.322361 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.784265 0.34818 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER 0.783355 0.323657 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774164 0.338384 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.799483 0.361611 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.789382 0.351815 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.81379 0.350519 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.828769 0.350165 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838905 0.333232 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER 0.820583 0.347547 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER 0.805799 0.346984 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER 0.797614 0.344366 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.792966 0.32687 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER 0.824121 0.332668 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER 0.811288 0.312554 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER 0.834258 0.315735 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.753851 0.362219 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774086 0.350765 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76987 0.352319 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.735575 0.349134 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751594 0.339233 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737534 0.324595 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.739791 0.347581 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER 0.74175 0.323042 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760026 0.336127 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.756464 0.29233 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.779336 0.288514 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.765125 0.305929 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER 0.736973 0.285879 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745634 0.299478 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.740355 0.275612 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751185 0.268464 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.754567 0.258198 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774058 0.264649 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.885497 0.282313 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876946 0.281455 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER 0.867718 0.29787 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.871286 0.274699 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853506 0.290257 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848523 0.266228 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.880514 0.258284 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857752 0.249813 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER 0.871963 0.257427 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.818054 0.21762 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER 0.83061 0.230661 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER 0.813612 0.241754 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.794089 0.212813 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER 0.789647 0.236948 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.78268 0.221048 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.811087 0.20172 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER 0.799677 0.209955 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.823642 0.214761 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.873186 0.21889 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.865588 0.240865 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER 0.866351 0.236437 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857005 0.203288 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.850171 0.220835 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.833227 0.20966 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.856242 0.207715 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER 0.832464 0.214088 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848644 0.22969 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.626191 0.448155 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634643 0.42519 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.614455 0.43276 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.60514 0.45191 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593404 0.436515 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.592541 0.4327 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625328 0.44434 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.612729 0.42513 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.63378 0.421375 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.68332 0.389713 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68332 0.389713 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688854 0.369058 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.625435 0.399844 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627149 0.378352 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.60511 0.38905 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.619901 0.420499 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.599576 0.409705 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61608 0.419661 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.641939 0.409801 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638118 0.408963 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643653 0.388308 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.53788 0.433888 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.558395 0.423551 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.55574 0.426423 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.521526 0.42011 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539387 0.412646 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.525689 0.395996 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.524182 0.417238 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528344 0.393124 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.544697 0.406901 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.540802 0.399304 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.54453 0.400489 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563801 0.400119 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546337 0.37865 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569335 0.379464 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555599 0.35918 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527065 0.37902 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536327 0.359551 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530793 0.380205 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.501272 0.340934 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501272 0.340934 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506807 0.320279 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.594185 0.405974 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609969 0.394768 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593017 0.410332 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570335 0.399584 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569167 0.403942 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562269 0.381987 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587286 0.384019 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57922 0.366422 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.60307 0.372813 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.567308 0.314012 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587901 0.320398 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569787 0.336891 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546074 0.311485 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548554 0.334364 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.545434 0.315344 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.564188 0.294991 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563547 0.29885 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.584781 0.301377 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.659244 0.341809 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65787 0.345471 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645657 0.360383 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639592 0.33338 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626005 0.351955 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.618565 0.328614 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651804 0.318468 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630777 0.313702 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65043 0.32213 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.690652 0.219248 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.695267 0.206403 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677807 0.223862 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669577 0.215632 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656732 0.220246 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.653116 0.199171 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687036 0.198172 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.670575 0.181711 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.691651 0.185327 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.733129 0.203821 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.191718 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.709966 0.212373 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.733129 0.203821 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.709966 0.212373 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.191718 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.738664 0.183166 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721035 0.171063 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721035 0.171063 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.675225 0.261725 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683777 0.238562 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.244096 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65457 0.267259 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642468 0.249631 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642468 0.249631 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675225 0.261725 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.244096 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683777 0.238562 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.600215 0.197046 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.622701 0.191021 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609032 0.207465 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.580155 0.18964 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588972 0.200059 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582581 0.176209 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593824 0.173196 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.596251 0.159765 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61631 0.167171 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.587397 0.24926 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606693 0.240045 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606693 0.240045 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572277 0.23414 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.224924 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.576452 0.209804 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572277 0.23414 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.576452 0.209804 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.224924 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.551082 0.155041 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.153374 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566866 0.174029 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.551082 0.155041 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566866 0.174029 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.153374 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.556617 0.134387 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.577935 0.13272 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.577935 0.13272 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.668451 0.12881 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678869 0.137627 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.662426 0.151296 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644601 0.12242 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638576 0.144906 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.631169 0.124846 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661044 0.108751 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647613 0.111177 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671463 0.117567 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.626446 0.0796777 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645433 0.0954616 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.100996 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605791 0.0852121 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604124 0.10653 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604124 0.10653 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626446 0.0796777 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.100996 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645433 0.0954616 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.720665 0.115992 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.711449 0.135288 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.711449 0.135288 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705544 0.100872 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.120168 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681209 0.105047 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705544 0.100872 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681209 0.105047 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.120168 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.852418 0.0955788 1.89979e-16 RAD 0.0555556 + txt002 + SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.937225 0.122151 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.916553 0.11086 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.915202 0.131874 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER 0.943281 0.12236 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER 0.921258 0.132084 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER 0.928665 0.111279 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER 0.944632 0.101346 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER 0.930016 0.0902645 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.92396 0.090055 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.873196 0.134634 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882112 0.117797 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.858152 0.11765 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.858315 0.152536 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843271 0.135552 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.852349 0.1536 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882275 0.152682 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876309 0.153747 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.89119 0.135845 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.890926 0.182656 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.897331 0.159019 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876622 0.167676 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.871561 0.188412 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857256 0.173431 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.8586 0.17053 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.89227 0.179755 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.87931 0.161874 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.898675 0.156118 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.930963 0.0752104 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER 0.924191 0.0806562 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER 0.915684 0.0941344 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.914568 0.0655041 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.899289 0.0844281 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.891402 0.0612436 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.923076 0.0520258 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER 0.89991 0.0477654 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER 0.916304 0.0574717 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.875744 0.141535 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.88655 0.129819 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.868763 0.146389 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.852347 0.136371 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845366 0.141225 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.839756 0.119492 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.870135 0.119801 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857544 0.102922 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.880941 0.108085 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.842832 0.0523913 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.86055 0.0593957 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842434 0.0750766 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.819888 0.0484547 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.81949 0.07114 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.814662 0.0515226 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838004 0.0327739 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.832778 0.0358417 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.855722 0.0397783 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.920407 0.0359958 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER 0.912106 0.0588574 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.915603 0.0511067 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER 0.905363 0.0190117 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER 0.900559 0.0341227 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882018 0.0248894 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.901866 0.0267625 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.878521 0.0326401 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER 0.893565 0.0496241 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.825102 0.00436945 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.84533 0.018173 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.823964 0.025051 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.806642 0.0125791 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.805505 0.0332607 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.808411 0.0345923 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.828008 0.00570109 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.829777 0.0277143 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848237 0.0195047 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.840284 0.0454909 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.856111 0.0473735 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.831823 0.0463379 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.825856 0.0646197 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817395 0.0654667 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.827255 0.0856311 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.850144 0.0656554 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.851543 0.0866667 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.865971 0.0675379 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.762259 -0.0417568 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759495 -0.0345526 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.748937 -0.0216407 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743089 -0.051231 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.729767 -0.0311149 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721155 -0.053501 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.753646 -0.0641429 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.731712 -0.0664129 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.750882 -0.0569387 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.782939 0.0179281 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.782939 0.0179281 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.788473 -0.00272662 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.736829 0.0454452 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.742467 0.0297485 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.724354 0.046242 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715595 0.0429182 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.70312 0.043715 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7 0.0246945 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.733709 0.0264247 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718114 0.00820099 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.739347 0.010728 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.669983 -0.0708196 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.690113 -0.0618185 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671462 -0.0467378 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648644 -0.0721997 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.650123 -0.0481178 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647436 -0.0645786 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.667296 -0.0872804 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666087 -0.0796593 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687426 -0.0782793 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.646718 0.0244627 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669336 0.016478 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.657124 0.0313903 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627066 0.0160343 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.637471 0.022962 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630031 -0.000378614 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639278 0.00112207 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642244 -0.0152909 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661896 -0.00686255 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.600892 -0.0308513 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600892 -0.0308513 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606426 -0.051506 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.730141 -0.101422 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.736701 -0.0782041 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.725284 -0.0832945 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.706291 -0.107813 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701434 -0.0896851 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.689001 -0.0909853 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.717709 -0.102723 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700418 -0.0858949 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.724268 -0.0795043 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.655153 -0.0751594 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671821 -0.0745692 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649783 -0.0638711 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649619 -0.0545047 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644249 -0.0432164 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660752 -0.0332597 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671657 -0.0652028 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682791 -0.0439578 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688325 -0.0646126 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.752567 -0.0269197 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.732303 -0.014088 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751574 -0.0144587 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.758102 -0.0475745 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.757108 -0.0351134 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743371 -0.0553974 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.73883 -0.0472037 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7241 -0.0550267 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718566 -0.0343719 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.770032 -0.0684873 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759394 -0.0481266 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.762305 -0.0507391 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.756497 -0.0850422 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.74877 -0.067294 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.732325 -0.0812364 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.753586 -0.0824297 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.729413 -0.0786239 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.742948 -0.062069 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.782939 0.0179281 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.782939 0.0179281 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.788473 -0.00272662 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.758864 -0.0299763 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.757489 -0.0263144 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745277 -0.0114021 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.739212 -0.0384047 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.725625 -0.0198304 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718185 -0.043171 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751424 -0.0533169 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.730397 -0.0580833 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.750049 -0.0496549 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.675276 -0.106805 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.694308 -0.091423 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.673094 -0.0875713 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.655278 -0.0992356 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.653095 -0.0800016 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65431 -0.0762835 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.676491 -0.103087 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675524 -0.0801352 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.695522 -0.0877049 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.666927 -0.0577732 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68752 -0.0513875 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669407 -0.034894 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645694 -0.0603001 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648173 -0.0374209 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645053 -0.0564414 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663807 -0.0767937 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663167 -0.072935 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.6844 -0.070408 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.600892 -0.0308513 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600892 -0.0308513 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606426 -0.051506 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.717566 -0.0544915 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.725632 -0.0368947 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718734 -0.0588496 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.693716 -0.0608821 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.694884 -0.0652402 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677932 -0.0496759 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700615 -0.0389272 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.684831 -0.027721 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.708681 -0.0213304 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.640422 0.0275193 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644149 0.0287044 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.66342 0.0283337 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645956 0.00686453 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.668955 0.00767898 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.655218 -0.012605 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626685 0.00723527 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.635947 -0.0122343 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630413 0.00842045 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.725055 0.0280589 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.726768 0.00656677 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.70473 0.0172649 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.71952 0.0487136 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.699195 0.0379196 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715699 0.0478762 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.741558 0.0380155 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737738 0.0371781 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743272 0.0165234 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.302088 0.822021 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298094 0.802598 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282758 0.821938 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.309654 0.843459 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290324 0.843375 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313227 0.845472 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32499 0.824119 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328563 0.826132 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320997 0.804695 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.325175 0.741263 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325981 0.765112 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32493 0.747715 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304415 0.728307 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304171 0.734759 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER 0.284462 0.7392 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305466 0.745704 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285513 0.756597 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306272 0.769553 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.218449 0.785699 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223304 0.778718 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22345 0.802677 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236497 0.794777 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241498 0.811756 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2594 0.796874 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236351 0.770818 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259253 0.772915 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241205 0.763837 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.292033 0.891539 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305711 0.872763 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28812 0.868678 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268233 0.893263 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER 0.264319 0.870402 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.25811 0.876212 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285824 0.897348 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275701 0.880296 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299501 0.878572 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.206363 0.860225 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223536 0.854636 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230102 0.858689 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200429 0.843837 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224168 0.842301 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211667 0.821861 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193863 0.839784 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205101 0.817808 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211035 0.834196 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.26204 0.87538 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280934 0.860805 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266856 0.87108 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238827 0.867636 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.243643 0.863337 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234508 0.845317 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER 0.252905 0.857361 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248586 0.835041 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271799 0.842785 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.360404 0.851488 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347059 0.832518 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335865 0.853509 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359125 0.857816 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334587 0.859838 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.344501 0.845176 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.370319 0.836826 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355695 0.824185 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356973 0.817857 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340361 0.83071 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.341208 0.822249 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325527 0.840365 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320744 0.825882 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30591 0.835537 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301973 0.812593 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336425 0.807766 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317654 0.794477 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337272 0.799305 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.369945 0.768944 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356171 0.780624 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356172 0.788341 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359115 0.755289 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345342 0.774685 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334511 0.753313 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359113 0.747572 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33451 0.745596 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34534 0.759252 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.411883 0.625955 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396287 0.607547 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.390369 0.630791 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423887 0.637535 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402373 0.642371 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420295 0.630706 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429805 0.61429 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426212 0.607462 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.414208 0.595882 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.344865 0.652948 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357326 0.651954 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357697 0.632683 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324581 0.639211 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337413 0.618946 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316758 0.624481 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324211 0.658482 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316388 0.643752 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336672 0.657489 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389713 0.68332 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369058 0.688854 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389713 0.68332 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.452905 0.58161 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434777 0.586467 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436077 0.5989 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447815 0.570193 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.430987 0.587483 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.424596 0.563633 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446515 0.55776 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423296 0.5512 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428387 0.562617 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.41723 0.637209 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418027 0.624734 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401533 0.642848 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39821 0.634089 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382513 0.639728 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379986 0.618494 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.414703 0.615976 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39648 0.600381 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4155 0.603501 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.396248 0.547099 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403175 0.557504 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388263 0.569716 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372907 0.539659 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.364922 0.562276 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356494 0.542624 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387819 0.527447 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.371406 0.530412 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.394747 0.537852 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.410169 0.541008 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405866 0.564748 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410472 0.548718 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393422 0.523836 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393725 0.531546 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372372 0.530405 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388816 0.539866 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367766 0.546435 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384513 0.563607 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340934 0.501272 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320279 0.506807 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340934 0.501272 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.296626 0.555534 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307914 0.550163 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297216 0.572202 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306582 0.572037 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307172 0.588706 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.327827 0.583171 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31728 0.549999 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338525 0.561133 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328569 0.544629 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.144155 0.692502 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.150298 0.696439 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164554 0.682184 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136163 0.670254 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156561 0.659936 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.134313 0.651943 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.121907 0.684509 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120057 0.666199 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12805 0.688447 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0847178 0.680265 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.104191 0.675047 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.107387 0.686972 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0815225 0.66834 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.104191 0.675047 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0978007 0.651197 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0783272 0.656415 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0946054 0.639272 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0978007 0.651197 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.160081 0.738169 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177224 0.721891 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165299 0.718696 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136231 0.731779 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141449 0.712305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.129524 0.70911 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.148156 0.734974 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141449 0.712305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165299 0.718696 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.213517 0.662308 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.194382 0.649801 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198584 0.673065 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23299 0.667526 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218058 0.678283 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233329 0.660237 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228788 0.644262 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229127 0.636974 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209653 0.631756 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.23918 0.710584 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233654 0.687599 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.216195 0.705059 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23045 0.719314 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207465 0.713788 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.216195 0.705059 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.24791 0.701855 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233654 0.687599 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242384 0.678869 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.266765 0.631486 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247291 0.636704 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250487 0.648629 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26357 0.619561 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247291 0.636704 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240901 0.612854 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.260374 0.607636 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237705 0.600929 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240901 0.612854 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.162741 0.579817 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179523 0.58737 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156259 0.583168 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144695 0.595088 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138214 0.598439 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.143431 0.617912 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167958 0.59929 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166695 0.622115 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.184741 0.606843 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.208861 0.556122 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215568 0.578791 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203643 0.575596 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.185011 0.549732 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179793 0.569205 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167868 0.56601 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.196936 0.552927 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179793 0.569205 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203643 0.575596 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.105912 0.577317 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128897 0.582843 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111438 0.600302 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0971825 0.586046 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102708 0.609032 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111438 0.600302 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.114642 0.568587 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128897 0.582843 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.137627 0.574113 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0955788 0.852418 9.1293e-17 RAD 0.0555556 + txt002 + SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.122151 0.937225 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.131874 0.915202 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11086 0.916553 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101346 0.944632 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER 0.090055 0.92396 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0902645 0.930016 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12236 0.943281 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111279 0.928665 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER 0.132084 0.921258 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.182656 0.890926 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167676 0.876622 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159019 0.897331 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179755 0.89227 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156118 0.898675 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161874 0.87931 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188412 0.871561 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.17053 0.8586 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173431 0.857256 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.134634 0.873196 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11765 0.858152 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.117797 0.882112 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152682 0.882275 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135845 0.89119 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153747 0.876309 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152536 0.858315 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.1536 0.852349 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135552 0.843271 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0359958 0.920407 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511067 0.915603 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0588574 0.912106 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0267625 0.901866 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0496241 0.893565 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0326401 0.878521 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0190117 0.905363 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0248894 0.882018 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0341227 0.900559 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0454909 0.840284 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0463379 0.831823 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0473735 0.856111 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0656554 0.850144 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0675379 0.865971 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0866667 0.851543 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0646197 0.825856 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0856311 0.827255 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0654667 0.817395 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.00436945 0.825102 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.025051 0.823964 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.018173 0.84533 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00570109 0.828008 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0195047 0.848237 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0277143 0.829777 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0125791 0.806642 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0345923 0.808411 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0332607 0.805505 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0752104 0.930963 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0941344 0.915684 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0806562 0.924191 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0520258 0.923076 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0574717 0.916304 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0477654 0.89991 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0655041 0.914568 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0612436 0.891402 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0844281 0.899289 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0523913 0.842832 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0750766 0.842434 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0593957 0.86055 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0327739 0.838004 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0397783 0.855722 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0358417 0.832778 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0484547 0.819888 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0515226 0.814662 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.07114 0.81949 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.141535 0.875744 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.146389 0.868763 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.129819 0.88655 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.119801 0.870135 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108085 0.880941 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102922 0.857544 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136371 0.852347 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.119492 0.839756 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141225 0.845366 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0684873 0.770032 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0507391 0.762305 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0481266 0.759394 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0824297 0.753586 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.062069 0.742948 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0786239 0.729413 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0850422 0.756497 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0812364 0.732325 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.067294 0.74877 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0299763 0.758864 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0114021 0.745277 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0263144 0.757489 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0533169 0.751424 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0496549 0.750049 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0580833 0.730397 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0384047 0.739212 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.043171 0.718185 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0198304 0.725625 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0179281 0.782939 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00272662 0.788473 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0179281 0.782939 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0544915 0.717566 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0588496 0.718734 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0368947 0.725632 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0389272 0.700615 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0213304 0.708681 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.027721 0.684831 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0608821 0.693716 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0496759 0.677932 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0652402 0.694884 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0280589 0.725055 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0172649 0.70473 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00656677 0.726768 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0380155 0.741558 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0165234 0.743272 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0371781 0.737738 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0487136 0.71952 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0478762 0.715699 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0379196 0.699195 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0275193 0.640422 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0283337 0.66342 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0287044 0.644149 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00723527 0.626685 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00842045 0.630413 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0122343 0.635947 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00686453 0.645956 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.012605 0.655218 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00767898 0.668955 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.106805 0.675276 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0875713 0.673094 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.091423 0.694308 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103087 0.676491 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0877049 0.695522 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0801352 0.675524 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0992356 0.655278 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0762835 0.65431 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0800016 0.653095 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0308513 0.600892 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.051506 0.606426 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0308513 0.600892 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0577732 0.666927 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.034894 0.669407 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0513875 0.68752 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0767937 0.663807 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.070408 0.6844 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.072935 0.663167 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0603001 0.645694 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0564414 0.645053 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0374209 0.648173 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0417568 0.762259 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0216407 0.748937 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0345526 0.759495 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0641429 0.753646 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0569387 0.750882 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0664129 0.731712 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.051231 0.743089 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053501 0.721155 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0311149 0.729767 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0454452 0.736829 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.046242 0.724354 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0297485 0.742467 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0264247 0.733709 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.010728 0.739347 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00820099 0.718114 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0429182 0.715595 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0246945 0.7 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.043715 0.70312 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0179281 0.782939 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00272662 0.788473 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0179281 0.782939 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.101422 0.730141 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0832945 0.725284 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0782041 0.736701 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.102723 0.717709 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0795043 0.724268 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0858949 0.700418 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107813 0.706291 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0909853 0.689001 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0896851 0.701434 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0269197 0.752567 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0144587 0.751574 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.014088 0.732303 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0472037 0.73883 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0343719 0.718566 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0550267 0.7241 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0475745 0.758102 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0553974 0.743371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0351134 0.757108 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0751594 0.655153 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0638711 0.649783 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0745692 0.671821 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0652028 0.671657 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0646126 0.688325 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0439578 0.682791 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0545047 0.649619 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0332597 0.660752 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0432164 0.644249 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0708196 0.669983 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0467378 0.671462 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0618185 0.690113 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0872804 0.667296 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0782793 0.687426 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0796593 0.666087 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0721997 0.648644 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0645786 0.647436 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0481178 0.650123 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0308513 0.600892 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.051506 0.606426 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0308513 0.600892 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0244627 0.646718 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0313903 0.657124 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.016478 0.669336 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00112207 0.639278 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00686255 0.661896 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0152909 0.642244 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0160343 0.627066 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.000378614 0.630031 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.022962 0.637471 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.34259 0.872345 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338969 0.848329 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32016 0.86421 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.333079 0.882715 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310649 0.87458 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER 0.319948 0.869068 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351888 0.866833 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338757 0.853186 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.348268 0.842817 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.346884 0.808673 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322361 0.807762 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335792 0.82298 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER 0.361611 0.799483 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350519 0.81379 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351815 0.789382 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34818 0.784265 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338384 0.774164 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.323657 0.783355 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.291048 0.849036 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304882 0.840755 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287867 0.826067 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267046 0.853652 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263865 0.830683 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.256877 0.849987 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28406 0.868341 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273891 0.864676 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297894 0.86006 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.282313 0.885497 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29787 0.867718 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281455 0.876946 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258284 0.880514 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257427 0.871963 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249813 0.857752 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER 0.274699 0.871286 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266228 0.848523 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290257 0.853506 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.21889 0.873186 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236437 0.866351 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240865 0.865588 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207715 0.856242 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22969 0.848644 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214088 0.832464 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203288 0.857005 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20966 0.833227 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.220835 0.850171 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.21762 0.818054 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241754 0.813612 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230661 0.83061 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20172 0.811087 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214761 0.823642 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209955 0.799677 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212813 0.794089 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221048 0.78268 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236948 0.789647 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.350165 0.828769 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347547 0.820583 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER 0.333232 0.838905 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332668 0.824121 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315735 0.834258 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312554 0.811288 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER 0.346984 0.805799 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32687 0.792966 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER 0.344366 0.797614 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.29233 0.756464 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305929 0.765125 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288514 0.779336 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268464 0.751185 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.264649 0.774058 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258198 0.754567 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285879 0.736973 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275612 0.740355 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299478 0.745634 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.362219 0.753851 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352319 0.76987 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350765 0.774086 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347581 0.739791 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336127 0.760026 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER 0.323042 0.74175 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER 0.349134 0.735575 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324595 0.737534 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339233 0.751594 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.219248 0.690652 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223862 0.677807 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206403 0.695267 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198172 0.687036 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.185327 0.691651 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181711 0.670575 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215632 0.669577 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.199171 0.653116 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.220246 0.656732 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.261725 0.675225 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.663122 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238562 0.683777 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261725 0.675225 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238562 0.683777 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.663122 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267259 0.65457 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249631 0.642468 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249631 0.642468 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.203821 0.733129 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212373 0.709966 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.715501 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183166 0.738664 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171063 0.721035 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171063 0.721035 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203821 0.733129 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.715501 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212373 0.709966 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.12881 0.668451 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.151296 0.662426 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.137627 0.678869 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108751 0.661044 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.117567 0.671463 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111177 0.647613 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12242 0.644601 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.124846 0.631169 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144906 0.638576 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.115992 0.720665 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135288 0.711449 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135288 0.711449 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100872 0.705544 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.696329 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.105047 0.681209 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100872 0.705544 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.105047 0.681209 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.696329 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0796777 0.626446 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.624779 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0954616 0.645433 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0796777 0.626446 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0954616 0.645433 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.624779 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0852121 0.605791 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10653 0.604124 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10653 0.604124 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.197046 0.600215 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207465 0.609032 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191021 0.622701 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173196 0.593824 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167171 0.61631 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159765 0.596251 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.18964 0.580155 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176209 0.582581 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200059 0.588972 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.155041 0.551082 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174029 0.566866 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.5724 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.134387 0.556617 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13272 0.577935 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13272 0.577935 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.155041 0.551082 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.5724 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174029 0.566866 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.24926 0.587397 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240045 0.606693 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240045 0.606693 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23414 0.572277 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.591572 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209804 0.576452 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23414 0.572277 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209804 0.576452 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.591572 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.448155 0.626191 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.43276 0.614455 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42519 0.634643 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44434 0.625328 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.421375 0.63378 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42513 0.612729 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45191 0.60514 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4327 0.592541 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436515 0.593404 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399844 0.625435 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38905 0.60511 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378352 0.627149 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409801 0.641939 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388308 0.643653 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408963 0.638118 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420499 0.619901 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419661 0.61608 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409705 0.599576 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389713 0.68332 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369058 0.688854 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389713 0.68332 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.405974 0.594185 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410332 0.593017 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.394768 0.609969 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384019 0.587286 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372813 0.60307 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366422 0.57922 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399584 0.570335 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.381987 0.562269 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403942 0.569167 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.341809 0.659244 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.360383 0.645657 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345471 0.65787 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318468 0.651804 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32213 0.65043 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313702 0.630777 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33338 0.639592 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328614 0.618565 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351955 0.626005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.314012 0.567308 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336891 0.569787 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320398 0.587901 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294991 0.564188 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301377 0.584781 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29885 0.563547 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.311485 0.546074 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315344 0.545434 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334364 0.548554 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.433888 0.53788 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426423 0.55574 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423551 0.558395 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.417238 0.524182 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.406901 0.544697 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393124 0.528344 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42011 0.521526 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.395996 0.525689 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.412646 0.539387 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340934 0.501272 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320279 0.506807 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340934 0.501272 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399304 0.540802 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400119 0.563801 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400489 0.54453 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37902 0.527065 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.380205 0.530793 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359551 0.536327 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37865 0.546337 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.35918 0.555599 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379464 0.569335 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.354293 0.299716 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER -0.347717 0.279022 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366989 0.292196 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375177 0.300337 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.387873 0.292817 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389485 0.280263 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355904 0.287162 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.370213 0.267088 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349329 0.266468 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.304702 0.250544 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32307 0.238717 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327715 0.259421 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.30352 0.250492 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.326533 0.259369 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320707 0.238612 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298875 0.229788 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316063 0.217908 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317244 0.21796 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.362978 0.289441 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER -0.35549 0.267771 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378255 0.270044 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379952 0.302733 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.395229 0.283335 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389438 0.294353 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357187 0.30046 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366673 0.29208 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349699 0.278789 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.443285 0.282991 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.421181 0.271991 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4302 0.282046 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462437 0.27248 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER -0.449353 0.271534 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459485 0.250967 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453417 0.262424 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.450466 0.240911 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431313 0.251423 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.449273 0.285685 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436139 0.282528 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER -0.426189 0.27701 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45733 0.266055 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434246 0.257381 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452254 0.243269 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46728 0.271573 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462204 0.248787 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.454146 0.268416 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.486123 0.204606 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464339 0.202946 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470107 0.223366 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.487137 0.203998 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471122 0.222757 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466367 0.201729 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.481368 0.183578 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.460599 0.18131 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459584 0.181918 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER -0.378635 0.228779 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER -0.365937 0.225483 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383364 0.24293 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.402455 0.222377 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407185 0.236529 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER -0.413578 0.21268 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385029 0.20493 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396152 0.195233 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER -0.372331 0.201634 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER -0.412573 0.147477 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39322 0.15977 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER -0.412448 0.172167 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434131 0.147647 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434006 0.172338 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436336 0.16011 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414903 0.13525 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.417108 0.147713 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39555 0.147543 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER -0.319723 0.177083 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.325124 0.189464 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.332294 0.198298 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337645 0.165722 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER -0.350216 0.186938 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360967 0.166743 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330475 0.156889 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353797 0.157909 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335876 0.16927 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.115471 0.221102 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.126388 0.200597 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13987 0.220766 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119172 0.228435 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143571 0.228099 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13379 0.215264 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10569 0.208266 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120308 0.195095 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116607 0.187762 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.15554 0.180792 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER -0.17557 0.171251 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166926 0.19323 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134265 0.182215 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.145651 0.194652 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER -0.133019 0.174096 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.142909 0.160236 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141663 0.152117 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.162939 0.150694 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.18209 0.243049 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168159 0.227721 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.185251 0.218634 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER -0.206066 0.245747 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209227 0.221332 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216111 0.233117 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188974 0.254834 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.199019 0.242204 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER -0.175043 0.239506 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.151829 0.219088 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14514 0.205084 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163068 0.221861 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173729 0.215537 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.184969 0.218309 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188942 0.197981 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155801 0.19876 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171014 0.181204 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149113 0.184756 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.22829 0.248268 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207937 0.234532 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216949 0.2391 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.249439 0.237756 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238098 0.228589 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.250236 0.213509 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240428 0.233189 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241225 0.208942 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220075 0.219453 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.229756 0.167942 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207683 0.16569 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223214 0.183484 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.250271 0.162129 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.243729 0.177671 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248714 0.154064 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER -0.234741 0.144336 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233184 0.13627 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212668 0.142084 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.105335 0.14887 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115741 0.153943 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121723 0.167242 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER -0.118795 0.138714 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135183 0.157086 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER -0.142661 0.13363 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.112813 0.125414 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.136679 0.120331 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.123219 0.130487 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.179968 0.0897843 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166467 0.105492 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.183804 0.114103 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER -0.20386 0.0864233 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207696 0.110742 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER -0.214251 0.0987702 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.186523 0.0778128 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196914 0.0901597 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173022 0.0935207 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.130858 0.0995811 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135326 0.123725 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134736 0.113639 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER -0.148938 0.0843858 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.152816 0.0984435 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171487 0.0933338 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149528 0.0944715 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172078 0.10342 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153997 0.118615 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.269898 0.374298 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER -0.270045 0.350338 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.291334 0.362218 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277815 0.391115 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299251 0.379036 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.285878 0.383973 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER -0.256525 0.379235 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.264588 0.372093 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER -0.256671 0.355276 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.235688 0.305995 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259438 0.312359 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245915 0.321516 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228556 0.291303 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238783 0.306824 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245173 0.282974 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.242079 0.282145 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.258696 0.273816 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265828 0.288509 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.32435 0.32435 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33812 0.32066 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32066 0.33812 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3005 0.317959 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29681 0.331729 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29042 0.307879 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317959 0.3005 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307879 0.29042 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331729 0.29681 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.334762 0.407156 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31686 0.392275 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.326552 0.388696 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357827 0.39864 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349618 0.380181 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362991 0.375243 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348135 0.402218 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353299 0.378821 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330233 0.387337 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.393346 0.348239 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383366 0.345565 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369843 0.354723 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386213 0.333547 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362711 0.340031 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369102 0.316181 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399736 0.324389 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382624 0.307023 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389757 0.321715 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.386461 0.346394 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362711 0.340031 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369843 0.354723 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399983 0.337237 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383366 0.345565 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389757 0.321715 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392851 0.322544 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382624 0.307023 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369102 0.316181 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.261966 0.385852 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259422 0.36581 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER -0.278159 0.38141 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER -0.280504 0.387198 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296698 0.382755 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER -0.2965 0.368501 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.261768 0.371598 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277764 0.352901 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259225 0.351556 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.304189 0.32435 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29042 0.32066 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307879 0.33812 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328039 0.317959 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331729 0.331729 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33812 0.307879 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31058 0.3005 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32066 0.29042 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29681 0.29681 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.228803 0.30415 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238783 0.306824 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245915 0.321516 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.242326 0.294992 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259438 0.312359 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265828 0.288509 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.235194 0.2803 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.258696 0.273816 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245173 0.282974 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER -0.612732 0.225282 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591695 0.212428 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60221 0.22113 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633805 0.215388 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623283 0.211236 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER -0.63384 0.192641 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62329 0.206686 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623325 0.183939 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602253 0.193832 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER -0.527458 0.200547 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522843 0.187702 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.540303 0.205161 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548533 0.196931 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561378 0.201546 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.564994 0.18047 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531074 0.179472 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.547535 0.163011 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.526459 0.166627 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.542885 0.243024 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534333 0.219861 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563539 0.248559 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575642 0.23093 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575642 0.23093 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542885 0.243024 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534333 0.219861 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER -0.660425 0.189742 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645434 0.185725 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636618 0.196144 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657999 0.17631 0.57904 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634191 0.182712 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640582 0.158862 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666816 0.165892 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649399 0.148444 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651825 0.161875 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER -0.574809 0.203972 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561378 0.201546 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.568784 0.181486 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598659 0.197581 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.592634 0.175095 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609078 0.188764 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591253 0.217641 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601672 0.208824 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577822 0.215215 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER -0.620861 0.107144 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608016 0.102529 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625475 0.119989 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617245 0.128219 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621859 0.141064 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600784 0.14468 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599785 0.11076 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583324 0.127221 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58694 0.106145 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER -0.643128 0.132649 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618482 0.133263 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631785 0.152367 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656585 0.130371 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645242 0.150088 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645397 0.128706 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643283 0.111266 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632094 0.109601 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618637 0.11188 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.591664 0.0609772 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572676 0.076761 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612319 0.0665116 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613986 0.0878298 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613986 0.0878298 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591664 0.0609772 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572676 0.076761 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549659 0.11011 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53924 0.118927 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555684 0.132596 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.573509 0.103719 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579534 0.126205 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58694 0.106145 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557065 0.09005 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570497 0.0924762 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.546646 0.0988668 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.484182 0.326876 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470513 0.310432 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.488171 0.302705 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507957 0.330051 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511946 0.305881 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.518062 0.316783 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490299 0.337778 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500404 0.324509 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476629 0.321334 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.436971 0.320401 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436675 0.29902 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER -0.455413 0.3148 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453274 0.32392 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471717 0.318318 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469281 0.306057 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434535 0.30814 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER -0.450543 0.290278 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434239 0.286759 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.426389 0.279233 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.445377 0.263449 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448298 0.286276 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415641 0.285616 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER -0.43755 0.29266 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42388 0.276216 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41272 0.262789 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420959 0.253389 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431707 0.247006 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549787 0.275127 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549787 0.275127 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529727 0.282533 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536117 0.258683 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.516058 0.266089 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522448 0.242239 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556177 0.251277 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542508 0.234833 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556177 0.251277 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER -0.457868 0.209819 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER -0.458164 0.2312 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453963 0.210053 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476163 0.193527 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER -0.472258 0.193761 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.494753 0.198616 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER -0.480363 0.214674 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER -0.498954 0.219763 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.480659 0.236055 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549603 0.17251 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528912 0.177908 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549105 0.191778 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557329 0.187292 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556831 0.20656 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544363 0.207471 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.537136 0.173421 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.524171 0.193601 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.516445 0.178819 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER -0.562288 0.314604 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542501 0.306499 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541186 0.310183 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574255 0.299494 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.553152 0.295073 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566433 0.276279 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575569 0.29581 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567748 0.272595 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555781 0.287705 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.567359 0.227186 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54267 0.227528 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555283 0.246777 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579676 0.225054 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567601 0.244644 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567305 0.223263 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567063 0.205805 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554691 0.204014 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542374 0.206147 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER -0.507811 0.298839 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.489718 0.287442 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505577 0.302049 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531251 0.291716 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529016 0.294927 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536597 0.273198 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515392 0.27711 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER -0.520738 0.258591 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497299 0.265714 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER -0.646362 0.0316054 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625173 0.0287309 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627981 0.0478 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647066 0.0277577 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628685 0.0439523 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62658 0.0210355 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644258 0.00868865 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623773 0.00196644 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623069 0.00581415 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER -0.584898 0.0177119 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56353 0.0185345 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER -0.580268 0.0364224 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.605935 0.0129918 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601305 0.0317022 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.605605 0.00909422 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER -0.589197 -0.00489609 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.588867 -0.00879364 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567829 -0.00407348 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.593994 0.105299 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572783 0.0926585 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582384 0.100664 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.614541 0.0949359 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602932 0.090301 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613879 0.0719323 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604941 0.0869303 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604278 0.0639267 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58373 0.0742898 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER -0.607302 0.0604766 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607302 0.0604766 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587242 0.0678827 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593633 0.0440327 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.573573 0.0514389 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579964 0.0275889 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613693 0.0366265 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600023 0.0201827 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613693 0.0366265 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER -0.551884 0.118381 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536664 0.103361 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550745 0.0944221 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576307 0.116465 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575168 0.0925065 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58551 0.0995293 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562225 0.125404 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571428 0.108468 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.547006 0.110383 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER -0.523344 0.0542684 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534291 0.0358996 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541988 0.0591566 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509132 0.0704822 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER -0.527777 0.0753703 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505868 0.0683272 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.501435 0.0472252 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49817 0.0450702 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.512382 0.0288565 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.5935 -0.0473753 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57344 -0.0399691 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.595617 -0.0308315 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604929 -0.0318545 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607046 -0.0153107 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.596298 -0.00892756 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582752 -0.0409921 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574121 -0.0180651 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562692 -0.0335859 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.48882 -0.0212225 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497372 0.00194055 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491256 -0.00896145 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502764 -0.0395307 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505199 -0.0272696 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER -0.525259 -0.0346758 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER -0.50888 -0.0286287 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531375 -0.0237738 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517432 -0.00546563 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.530389 -0.0495897 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER -0.519442 -0.031221 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53532 -0.0261165 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554507 -0.0538859 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER -0.559438 -0.0304127 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567678 -0.0398133 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538628 -0.0589904 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.551799 -0.0449178 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER -0.527681 -0.0406217 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER -0.435909 0.01504 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423265 0.0115452 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440694 0.0289993 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459725 0.00864346 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46451 0.0226028 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470897 -0.0012478 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER -0.442297 -0.00881065 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453468 -0.0187019 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.429652 -0.0123054 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER -0.364644 0.0293677 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375512 0.0213457 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385352 0.0401449 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37527 0.0253024 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER -0.395978 0.0360796 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396764 0.0132151 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER -0.36543 0.0065032 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386924 -0.00558411 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376298 -0.00151881 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER -0.426942 0.0903221 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.416328 0.0699989 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435083 0.0806307 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER -0.449792 0.0891998 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.457933 0.0795084 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462029 0.0677542 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431037 0.078568 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER -0.443274 0.0571224 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420423 0.0582447 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.523883 -0.000557006 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49924 -0.00208214 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.51057 0.0165974 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536722 -0.00475566 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523409 0.0123987 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER -0.524918 -0.0104794 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.525392 -0.0234352 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.513588 -0.029159 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500749 -0.0249603 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.508666 0.0817008 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.488971 0.0722467 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.489545 0.0732807 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523872 0.0669012 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504751 0.058481 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.519382 0.0426474 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523298 0.0658672 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER -0.518808 0.0416134 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.503602 0.0564131 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.540463 -0.00154892 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.52751 -0.00538221 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER -0.524673 0.0156462 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529087 -0.00174531 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.513298 0.0154498 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504759 -0.00577498 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531924 -0.0227737 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507596 -0.0268034 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER -0.518971 -0.026607 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.451803 -0.0707378 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435761 -0.0561039 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER -0.454158 -0.0461991 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER -0.475081 -0.0725109 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477435 -0.0479721 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.482316 -0.05965 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER -0.456685 -0.0824157 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46392 -0.0695548 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440643 -0.0677817 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.459563 -0.081612 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.442243 -0.0665888 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.463589 -0.0696122 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER -0.480415 -0.0721979 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.48444 -0.0601982 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER -0.483946 -0.0477607 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459069 -0.0691745 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4626 -0.0447373 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.441749 -0.0541513 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.373728 -0.0495643 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383722 -0.030137 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382672 -0.0306825 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388102 -0.0651725 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.397047 -0.0462908 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41247 -0.0613535 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389151 -0.064627 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41352 -0.060808 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399146 -0.0451997 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.412497 -0.190929 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400273 -0.174844 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.417001 -0.16674 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436523 -0.195071 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER -0.441027 -0.170881 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448325 -0.183127 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419795 -0.203175 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431597 -0.191231 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407571 -0.18709 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.343834 -0.12515 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353814 -0.122476 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360946 -0.107784 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357357 -0.134308 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374468 -0.116942 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380859 -0.140792 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.350225 -0.149 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.373727 -0.155484 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360204 -0.146326 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.41922 -0.10495 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40545 -0.10864 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42291 -0.0911807 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44307 -0.111341 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44676 -0.0975713 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45315 -0.121421 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425611 -0.128801 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435691 -0.138881 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.411841 -0.13249 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.502603 -0.174264 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.479659 -0.170327 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER -0.495376 -0.15142 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509207 -0.166319 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER -0.501981 -0.143475 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.492868 -0.154437 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49349 -0.185226 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477151 -0.173345 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470546 -0.18129 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.501491 -0.082906 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477742 -0.0892696 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484874 -0.0745774 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515014 -0.0920638 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER -0.498397 -0.0837352 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504787 -0.107585 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507882 -0.106756 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497655 -0.122277 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484132 -0.11312 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.508376 -0.0810612 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.498397 -0.0837352 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484874 -0.0745774 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.501244 -0.0957534 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477742 -0.0892696 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484132 -0.11312 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.514767 -0.104911 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497655 -0.122277 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504787 -0.107585 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.411775 -0.200165 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399922 -0.179342 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415187 -0.189948 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436152 -0.199808 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.439564 -0.189591 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448677 -0.178629 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420888 -0.189202 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER -0.433412 -0.168023 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409035 -0.168379 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.439381 -0.10495 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45315 -0.10864 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435691 -0.0911807 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415531 -0.111341 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.411841 -0.0975713 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40545 -0.121421 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.43299 -0.128801 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42291 -0.138881 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44676 -0.13249 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.350719 -0.123305 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374468 -0.116942 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360946 -0.107784 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343587 -0.137998 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353814 -0.122476 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360204 -0.146326 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357109 -0.147155 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.373727 -0.155484 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380859 -0.140792 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.160406 -0.0522053 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171954 -0.0513956 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178533 -0.0358698 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172236 -0.0607319 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER -0.190363 -0.0443964 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195615 -0.0684488 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165658 -0.0762577 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189036 -0.0839747 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177206 -0.075448 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.176731 -0.00705049 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192673 -0.025725 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200733 -0.00352517 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171177 0.00138875 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195179 0.00491406 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER -0.181564 -0.00884647 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163117 -0.020811 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173504 -0.0310463 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179058 -0.0394855 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.20044 0.0258737 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196602 0.00551963 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215612 0.0203763 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER -0.21976 0.0270852 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.234932 0.0215878 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.235241 0.00794264 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200749 0.0122285 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER -0.21623 -0.00691403 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196911 -0.00812553 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.234308 -0.0942304 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.221514 -0.0854464 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238704 -0.0714204 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER -0.258223 -0.0997955 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.262619 -0.0769856 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.269343 -0.0965768 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241032 -0.113822 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.252152 -0.110603 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228237 -0.105038 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.275459 -0.0076281 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER -0.255218 -0.0167139 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER -0.270078 -0.00142185 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER -0.297806 -0.0152725 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.292425 -0.00906621 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299911 -0.0320026 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282946 -0.0305645 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.285051 -0.0472946 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.262704 -0.0396503 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.324811 -0.0817333 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.300317 -0.0800146 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.313378 -0.0603366 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER -0.334899 -0.0811832 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER -0.323466 -0.0597864 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320493 -0.0789143 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.321838 -0.100861 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307433 -0.0985923 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.297345 -0.0991425 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.195663 -0.127519 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194866 -0.104303 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER -0.201738 -0.108803 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER -0.217423 -0.138245 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223497 -0.119529 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238386 -0.125754 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210551 -0.133744 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.231514 -0.121254 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209754 -0.110528 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.291073 -0.126206 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.271345 -0.119897 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293457 -0.110246 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER -0.301332 -0.10979 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.303716 -0.0938302 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER -0.291862 -0.0870656 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.279219 -0.119442 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.269749 -0.0967168 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER -0.25949 -0.113132 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.20388 -0.0673141 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216456 -0.0490355 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER -0.198742 -0.0609052 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207384 -0.0906706 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.202246 -0.0842617 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223463 -0.0957484 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225098 -0.0788008 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241177 -0.0838786 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.237674 -0.0605222 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.508983 0.690426 8.51251e-17 RAD 0.0555556 + txt002 + SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.47411 0.767658 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.467528 0.744501 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER -0.489758 0.749038 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491377 0.779098 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507025 0.760478 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502061 0.767382 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469146 0.774562 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER -0.47983 0.762845 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462564 0.751405 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.418941 0.714226 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.43889 0.704751 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44101 0.724842 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.416335 0.712374 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.438403 0.722991 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.433677 0.701048 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414215 0.692283 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431557 0.680957 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434163 0.682808 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.481931 0.703418 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500827 0.694124 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491475 0.716184 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459538 0.704962 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469082 0.717727 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.456041 0.697211 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46889 0.682902 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.465393 0.675152 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.487786 0.673608 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.560084 0.767402 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543179 0.760285 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53997 0.755145 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574398 0.750585 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554284 0.738328 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571808 0.726651 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577608 0.755725 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575017 0.731791 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER -0.560703 0.748608 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.573364 0.687731 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571303 0.682033 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56324 0.703871 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.553195 0.688893 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543071 0.705033 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530964 0.684356 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561258 0.667055 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539027 0.662518 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.559196 0.661356 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.601808 0.682851 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579842 0.680568 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58454 0.700216 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603648 0.680237 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58638 0.697602 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583522 0.675339 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59895 0.660588 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.578824 0.65569 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576984 0.658304 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.506594 0.773394 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491321 0.755462 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507924 0.764807 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530616 0.768632 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531946 0.760045 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539365 0.745938 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.514012 0.759287 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522762 0.736593 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49874 0.741355 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.538818 0.693658 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517905 0.691194 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534075 0.708875 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.560445 0.687649 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555702 0.702866 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561158 0.679176 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544274 0.669969 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544988 0.661495 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523361 0.667505 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.447385 0.709346 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.447429 0.703286 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46231 0.721188 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466788 0.703718 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.481713 0.71556 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.486235 0.692031 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.451907 0.685816 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471354 0.674129 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.451951 0.679757 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.269894 0.672915 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.275822 0.649528 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293281 0.666987 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277236 0.683032 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.300624 0.677104 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.290507 0.669762 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259777 0.665573 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273047 0.652302 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265705 0.642185 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.279361 0.614273 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.303327 0.613293 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.288206 0.628413 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.262487 0.604959 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.271332 0.619099 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.269578 0.594664 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277607 0.589839 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.284698 0.579544 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.301572 0.588858 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.328536 0.663448 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314396 0.654603 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.329516 0.639482 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.35297 0.665202 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353951 0.641237 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.363265 0.658111 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33785 0.680322 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348145 0.673232 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32371 0.671477 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.321274 0.684748 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.308341 0.666888 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.326131 0.678752 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.344967 0.681014 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349824 0.675018 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355727 0.659419 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327177 0.669149 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337937 0.647554 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314244 0.651289 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.391875 0.684201 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.389739 0.622198 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366159 0.617804 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378964 0.63493 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407771 0.61539 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396997 0.628121 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.402224 0.604188 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.394966 0.598265 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389418 0.587062 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.371386 0.593871 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.258061 0.621535 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.264057 0.616678 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.275921 0.634468 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.27366 0.615632 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29152 0.628565 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.295255 0.604872 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.261795 0.597842 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.28339 0.587082 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267791 0.592985 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.320611 0.55307 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.30788 0.563845 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.325005 0.57665 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.344544 0.547843 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348938 0.571423 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355747 0.553391 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327419 0.535038 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338621 0.540585 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314688 0.545813 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.258608 0.550934 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.316595 0.626214 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318408 0.606941 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335868 0.624401 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.311592 0.648676 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330864 0.646863 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.308402 0.651867 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.294133 0.631217 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.290942 0.634407 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.295946 0.611945 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.319608 0.539107 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307378 0.556863 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.322499 0.541743 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.344043 0.540862 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.346933 0.543497 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356248 0.560372 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328923 0.555982 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.341128 0.575492 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316693 0.573738 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.403702 0.623201 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401066 0.62031 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385946 0.635431 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386827 0.613886 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369071 0.626116 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367317 0.601681 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401947 0.598766 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382437 0.586561 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399312 0.595876 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.305407 0.69384 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296616 0.671002 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317721 0.674446 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.325704 0.701111 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338018 0.681717 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337211 0.685545 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3046 0.697667 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316107 0.682101 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.295809 0.67483 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.391875 0.684201 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.329538 0.677411 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314897 0.661584 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.332022 0.674389 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353472 0.672184 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355956 0.669162 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362764 0.65113 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.336346 0.659378 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.345639 0.638325 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.321705 0.643552 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.248969 0.637402 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.268363 0.625088 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.271807 0.646193 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245142 0.638209 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267979 0.647 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.260708 0.626702 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241698 0.617105 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.257264 0.605598 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.261092 0.604791 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.265398 0.613271 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.26842 0.610787 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.281225 0.627912 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.283431 0.606463 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299257 0.621104 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.304484 0.59717 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.270625 0.589337 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.291679 0.580045 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273647 0.586853 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.258608 0.550934 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.678928 0.639472 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661636 0.629767 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER -0.664108 0.621631 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698678 0.626079 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683858 0.608237 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701135 0.602979 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696205 0.634214 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698662 0.611115 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678912 0.624508 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.640648 0.631982 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625749 0.614812 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64267 0.62585 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER -0.664623 0.627081 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666645 0.620949 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673698 0.605012 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647702 0.616044 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656777 0.593974 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632802 0.598874 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.595495 0.63057 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594239 0.605919 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615286 0.617371 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608828 0.641795 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628619 0.628595 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER -0.620906 0.628369 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587782 0.630343 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59986 0.616917 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586526 0.605692 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.689897 0.57563 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693998 0.575587 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673115 0.585222 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.672626 0.560848 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655844 0.57044 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659456 0.546023 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693509 0.551213 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680339 0.536388 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69761 0.55117 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.602201 0.570049 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623084 0.560414 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615021 0.582252 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582032 0.571211 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594852 0.583414 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582745 0.562738 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER -0.590095 0.549372 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER -0.590808 0.540899 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610978 0.539737 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.627785 0.478525 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615951 0.497935 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630799 0.484234 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER -0.652241 0.479365 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655255 0.485075 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.664864 0.499616 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637394 0.493066 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.650016 0.513317 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62556 0.512476 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.73992 0.563328 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.720935 0.559693 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719679 0.577348 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737863 0.557208 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717623 0.571228 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.716821 0.547453 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739118 0.539553 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718076 0.529798 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.720133 0.535918 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.688647 0.474542 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666351 0.485132 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER -0.686417 0.498226 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.704854 0.480953 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER -0.702624 0.504637 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698765 0.497955 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.684788 0.46786 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678699 0.484862 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER -0.662492 0.47845 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.690713 0.554862 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.667813 0.552739 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682694 0.570641 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER -0.710116 0.549235 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.702097 0.565014 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.706619 0.541484 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER -0.695235 0.531333 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691738 0.523582 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER -0.672335 0.52921 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.499795 0.519956 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.493653 0.523893 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.479397 0.509638 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507788 0.497708 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.48739 0.48739 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509638 0.479397 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522043 0.511963 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523893 0.493653 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515901 0.515901 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.559233 0.507719 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539759 0.502501 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536564 0.514426 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562428 0.495794 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539759 0.502501 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54615 0.478651 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.565623 0.483869 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549345 0.466726 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54615 0.478651 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.483869 0.565623 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466726 0.549345 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.478651 0.54615 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507719 0.559233 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502501 0.539759 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.514426 0.536564 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.495794 0.562428 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502501 0.539759 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.478651 0.54615 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.430434 0.489762 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.449569 0.477255 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.445366 0.500519 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41096 0.49498 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425893 0.505737 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410622 0.487691 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415162 0.471716 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414824 0.464428 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434297 0.45921 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.404771 0.538038 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410297 0.515053 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427756 0.532513 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4135 0.546768 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436486 0.541242 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427756 0.532513 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396041 0.529309 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410297 0.515053 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401567 0.506323 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.377186 0.45894 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396659 0.464158 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.393464 0.476083 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380381 0.447015 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396659 0.464158 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40305 0.440308 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383576 0.43509 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406245 0.428383 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40305 0.440308 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.48121 0.407271 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464428 0.414824 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.487691 0.410622 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499256 0.422542 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505737 0.425893 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500519 0.445366 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.475992 0.426744 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477255 0.449569 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45921 0.434297 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.43509 0.383576 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428383 0.406245 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440308 0.40305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45894 0.377186 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464158 0.396659 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476083 0.393464 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.447015 0.380381 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464158 0.396659 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440308 0.40305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.538038 0.404771 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515053 0.410297 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.532513 0.427756 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.546768 0.4135 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541242 0.436486 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.532513 0.427756 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529309 0.396041 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515053 0.410297 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.506323 0.401567 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.672915 0.269894 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649528 0.275822 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666987 0.293281 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683032 0.277236 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.677104 0.300624 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669762 0.290507 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665573 0.259777 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.652302 0.273047 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642185 0.265705 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.592776 0.280905 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.580045 0.291679 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59717 0.304484 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.61671 0.275678 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621104 0.299257 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627912 0.281225 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599585 0.262872 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610787 0.26842 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586853 0.273647 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.661904 0.350033 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638325 0.345639 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65113 0.362764 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679937 0.343224 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669162 0.355956 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674389 0.332022 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.667131 0.326099 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661584 0.314897 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643552 0.321705 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.685865 0.340177 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679339 0.33606 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669651 0.355123 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669679 0.336151 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.653465 0.351097 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.646968 0.328008 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679367 0.317089 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656656 0.308945 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.672841 0.312971 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.664041 0.412036 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.600701 0.391282 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586561 0.382437 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601681 0.367317 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625136 0.393037 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626116 0.369071 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.635431 0.385946 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610016 0.408157 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62031 0.401066 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.595876 0.399312 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.602632 0.256944 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587686 0.273158 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606749 0.26347 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62572 0.263442 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.629838 0.269968 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633864 0.286153 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606658 0.27313 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.614801 0.295841 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591712 0.289344 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.551527 0.342108 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575492 0.341128 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.560372 0.356248 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534652 0.332793 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543497 0.346933 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541743 0.322499 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549772 0.317673 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556863 0.307378 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.573738 0.316693 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.530773 0.278768 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.663938 0.633406 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64522 0.617928 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65892 0.626429 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687239 0.625707 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682221 0.61873 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691822 0.602531 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673539 0.617206 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678123 0.59403 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.654822 0.601728 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.580238 0.601562 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER -0.581665 0.587563 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59781 0.605914 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER -0.597491 0.599646 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615063 0.603999 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616171 0.583732 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.581346 0.581295 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600026 0.565381 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582773 0.567297 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.608008 0.63767 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601637 0.613891 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623239 0.620102 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626157 0.646756 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.641389 0.629188 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637936 0.632063 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604555 0.640545 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616334 0.625852 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598184 0.616766 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.729812 0.597914 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711617 0.592661 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70632 0.602084 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732864 0.584178 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.709372 0.588348 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.71772 0.565189 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER -0.738161 0.574755 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER -0.723017 0.555767 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719965 0.569503 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.658095 0.605761 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647455 0.607672 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643855 0.58746 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.676573 0.589763 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER -0.662334 0.571461 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER -0.684413 0.575674 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680174 0.609975 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.688013 0.595887 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669535 0.611885 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.712906 0.511567 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.699372 0.507717 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.710453 0.529503 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.704747 0.526889 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER -0.702295 0.544826 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683054 0.538362 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693665 0.505104 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671972 0.516576 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680131 0.501254 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.70016 0.547376 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER -0.676324 0.546319 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690564 0.564621 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717636 0.542652 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70804 0.559898 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711276 0.536873 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER -0.703396 0.524351 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER -0.697037 0.518571 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679561 0.523294 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.67091 0.466887 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER -0.650637 0.480853 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671107 0.490138 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690617 0.471745 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690815 0.494995 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690052 0.490567 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.670147 0.46246 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669581 0.481283 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649874 0.476425 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.60809 0.516313 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60089 0.524375 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616221 0.538029 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631397 0.508952 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639529 0.530668 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647504 0.509653 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616065 0.495298 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632172 0.495999 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608865 0.50336 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.626214 0.316595 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606941 0.318408 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624401 0.335868 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648676 0.311592 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.646863 0.330864 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651867 0.308402 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631217 0.294133 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634407 0.290942 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.611945 0.295946 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.537564 0.341105 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.540585 0.338621 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.553391 0.355747 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555596 0.334297 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571423 0.348938 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57665 0.325005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542791 0.317172 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563845 0.30788 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545813 0.314688 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.601704 0.405245 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587062 0.389418 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604188 0.402224 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625637 0.400018 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628121 0.396997 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.63493 0.378964 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608512 0.387213 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617804 0.366159 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593871 0.371386 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.697473 0.31938 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674538 0.318074 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681812 0.338182 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701209 0.31822 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.685547 0.337022 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682009 0.315754 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693935 0.298112 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674736 0.295646 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671 0.296805 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.664041 0.412036 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.675867 0.351035 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673232 0.348145 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.658111 0.363265 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.658993 0.341721 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.641237 0.353951 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639482 0.329516 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674113 0.3266 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.654603 0.314396 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671477 0.32371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.623429 0.245336 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604627 0.260997 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624736 0.268271 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644697 0.248874 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.646004 0.271809 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647163 0.268073 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624589 0.2416 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627055 0.2608 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.605787 0.257262 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.591774 0.266942 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579544 0.284698 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594664 0.269578 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616209 0.268696 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619099 0.271332 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628413 0.288206 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601088 0.283817 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613293 0.303327 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.588858 0.301572 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.530773 0.278768 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.424703 0.518106 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420089 0.505261 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.437548 0.522721 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.445778 0.51449 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.458623 0.519105 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462239 0.498029 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428319 0.497031 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44478 0.48057 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423704 0.484186 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.382226 0.502679 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.490576 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405389 0.511231 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382226 0.502679 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405389 0.511231 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.490576 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376691 0.482024 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39432 0.469922 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39432 0.469922 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.44013 0.560583 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431578 0.53742 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.542955 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.460785 0.566118 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.472887 0.548489 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.472887 0.548489 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44013 0.560583 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.542955 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431578 0.53742 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.51514 0.495905 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.492654 0.48988 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.506323 0.506323 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5352 0.488498 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.526383 0.498917 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.532774 0.475067 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.521531 0.472055 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.519105 0.458623 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499045 0.46603 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.527958 0.548119 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.508662 0.538903 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.508662 0.538903 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543078 0.532998 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.523783 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538903 0.508662 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543078 0.532998 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538903 0.508662 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.523783 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.564273 0.4539 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.452233 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548489 0.472887 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.564273 0.4539 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548489 0.472887 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.452233 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558738 0.433245 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53742 0.431578 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53742 0.431578 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.446904 0.427669 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436486 0.436486 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45293 0.450155 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470754 0.421278 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.47678 0.443764 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484186 0.423704 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.454311 0.407609 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.467742 0.410035 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.443892 0.416426 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.488909 0.378536 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469922 0.39432 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.399854 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509564 0.384071 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511231 0.405389 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511231 0.405389 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.488909 0.378536 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.399854 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469922 0.39432 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.39469 0.414851 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403906 0.434147 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403906 0.434147 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409811 0.399731 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.419026 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434147 0.403906 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409811 0.399731 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434147 0.403906 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.419026 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.871334 -0.102403 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER -0.850164 -0.113406 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862937 -0.100577 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.892817 -0.111133 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER -0.884419 -0.109307 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER -0.893129 -0.130866 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880044 -0.123961 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880356 -0.143694 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER -0.858873 -0.134964 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.781177 -0.120908 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER -0.778973 -0.13149 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.795477 -0.113462 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.801282 -0.125067 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.815582 -0.11762 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819182 -0.139808 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.784778 -0.143095 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802678 -0.157836 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.782573 -0.153678 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.811594 -0.0654286 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER -0.80102 -0.0876595 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.820516 -0.0820122 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.833964 -0.0632344 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER -0.842886 -0.079818 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.845761 -0.083271 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER -0.814468 -0.0688817 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER -0.826265 -0.0889183 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803895 -0.0911125 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.926643 -0.128672 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER -0.90826 -0.133221 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.904034 -0.1198 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER -0.926768 -0.139481 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.904159 -0.130608 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER -0.908508 -0.154838 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.930993 -0.152902 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.912733 -0.16826 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER -0.912609 -0.157451 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.853284 -0.0905999 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER -0.839638 -0.0940331 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840233 -0.111382 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER -0.873773 -0.103926 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860723 -0.124708 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880618 -0.120685 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER -0.873178 -0.086577 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880022 -0.103336 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.859532 -0.0900102 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.894035 -0.188167 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.885777 -0.195141 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER -0.89378 -0.172046 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880811 -0.172463 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880556 -0.156342 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER -0.859328 -0.163733 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER -0.872807 -0.195558 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER -0.851325 -0.186828 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.864549 -0.202532 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.891905 -0.197746 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.867957 -0.193701 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.884286 -0.175383 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.908019 -0.198259 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER -0.900401 -0.175896 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.900186 -0.194726 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER -0.89169 -0.216576 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.883856 -0.213043 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.867741 -0.212531 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.843832 -0.25245 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.826426 -0.235043 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.846687 -0.233837 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.865646 -0.247028 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.868501 -0.228415 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER -0.870053 -0.224198 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER -0.845385 -0.248234 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER -0.849792 -0.225404 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.827978 -0.230827 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.794108 -0.212743 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER -0.788345 -0.199907 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802328 -0.189621 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.817265 -0.220563 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER -0.825486 -0.197441 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.83466 -0.215547 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803282 -0.230849 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER -0.820676 -0.225832 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER -0.797518 -0.218012 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.597249 -0.125845 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.592635 -0.138689 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610094 -0.12123 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618324 -0.12946 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631169 -0.124846 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634785 -0.145921 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600865 -0.14692 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617326 -0.163381 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.596251 -0.159765 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.554772 -0.141271 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.153374 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577935 -0.13272 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554772 -0.141271 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577935 -0.13272 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.153374 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549237 -0.161926 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566866 -0.174029 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566866 -0.174029 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.612676 -0.0833673 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604124 -0.10653 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.100996 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633331 -0.0778329 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645433 -0.0954616 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645433 -0.0954616 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612676 -0.0833673 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.100996 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604124 -0.10653 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.687686 -0.148046 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6652 -0.154071 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678869 -0.137627 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.707746 -0.155452 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698929 -0.145033 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70532 -0.168883 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.694077 -0.171896 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691651 -0.185327 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671591 -0.177921 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.700504 -0.095832 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681209 -0.105047 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681209 -0.105047 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715624 -0.110952 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.120168 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711449 -0.135288 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715624 -0.110952 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711449 -0.135288 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.120168 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.736819 -0.190051 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.191718 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721035 -0.171063 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.736819 -0.190051 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721035 -0.171063 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.191718 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.731284 -0.210706 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.709966 -0.212373 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.709966 -0.212373 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.61945 -0.216282 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609032 -0.207465 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625476 -0.193796 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6433 -0.222672 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649326 -0.200186 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656732 -0.220246 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626857 -0.236341 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640288 -0.233915 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616438 -0.227525 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.661455 -0.265414 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642468 -0.249631 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.244096 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.68211 -0.25988 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683777 -0.238562 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683777 -0.238562 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661455 -0.265414 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.244096 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642468 -0.249631 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.567237 -0.2291 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576452 -0.209804 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576452 -0.209804 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582357 -0.24422 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.224924 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606693 -0.240045 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582357 -0.24422 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606693 -0.240045 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.224924 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.66171 0.103063 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.653258 0.0800983 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673446 0.0876683 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682761 0.106818 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.694497 0.0914233 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69536 0.0876083 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.662574 0.0992478 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.675172 0.0800382 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.654121 0.0762832 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.604582 0.0446211 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604582 0.0446211 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599047 0.0239663 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.662466 0.0547519 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660752 0.0332597 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682791 0.0439578 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.668 0.0754066 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.688325 0.0646126 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671821 0.0745692 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645962 0.0647085 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649783 0.0638711 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644249 0.0432164 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.750021 0.0887955 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.729506 0.078459 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732161 0.0813312 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.766375 0.075018 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.748514 0.0675537 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.762212 0.050904 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.763719 0.0721458 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759557 0.0480318 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743204 0.0618093 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.747099 0.0542122 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743371 0.0553974 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.7241 0.0550267 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741565 0.0335575 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718566 0.0343719 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732303 0.014088 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.760836 0.0339282 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.751574 0.0144587 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.757108 0.0351134 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.786629 -0.00415829 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786629 -0.00415829 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.781094 -0.024813 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.693716 0.0608821 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.677932 0.0496759 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.694884 0.0652402 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717566 0.0544915 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718734 0.0588496 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.725632 0.0368947 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.700615 0.0389272 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.708681 0.0213304 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.684831 0.027721 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.720593 -0.0310802 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.7 -0.0246945 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718114 -0.00820099 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741827 -0.0336072 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739347 -0.010728 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.742467 -0.0297485 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.723713 -0.0501007 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.724354 -0.046242 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70312 -0.043715 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.628657 -0.00328338 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630031 0.000378614 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642244 0.0152909 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648309 -0.0117117 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661896 0.00686255 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669336 -0.016478 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636097 -0.026624 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657124 -0.0313903 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637471 -0.022962 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.909872 -0.0977075 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER -0.891613 -0.104052 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER -0.886771 -0.0997803 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.917612 -0.113625 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER -0.894512 -0.115698 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER -0.907093 -0.135886 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.922453 -0.117896 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.911935 -0.140158 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.904194 -0.124241 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.867758 -0.11253 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.846864 -0.122142 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860854 -0.107566 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER -0.889596 -0.120593 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.882692 -0.115629 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER -0.890541 -0.138267 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.875606 -0.135168 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.876551 -0.152843 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER -0.854713 -0.14478 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.826973 -0.0627848 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER -0.81296 -0.083104 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER -0.830202 -0.0805529 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER -0.850898 -0.0640908 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER -0.854126 -0.0818589 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860809 -0.0857161 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER -0.833656 -0.0666419 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER -0.843568 -0.0882673 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819643 -0.0869612 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.876203 -0.130609 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.879733 -0.128522 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.857385 -0.124356 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862935 -0.149395 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.844117 -0.143141 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER -0.853198 -0.166093 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.885283 -0.153561 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.875546 -0.170259 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.888813 -0.151474 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.798532 -0.108311 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.797989 -0.131037 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819589 -0.119537 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER -0.80454 -0.0890219 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER -0.825597 -0.100248 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.810005 -0.0924597 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.78294 -0.100522 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.788405 -0.10396 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER -0.782397 -0.123249 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.785723 -0.180723 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER -0.798991 -0.161937 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER -0.782104 -0.173028 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER -0.78966 -0.203667 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786041 -0.195972 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER -0.806864 -0.207825 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER -0.806546 -0.192576 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.82375 -0.196734 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819813 -0.17379 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.920038 -0.201143 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER -0.900209 -0.201384 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER -0.910616 -0.17991 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.918112 -0.192861 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER -0.90869 -0.171628 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER -0.896357 -0.18482 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.907705 -0.214335 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER -0.88595 -0.206294 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.887876 -0.214576 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.824206 -0.252002 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.810793 -0.231282 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.827952 -0.234336 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER -0.848158 -0.251396 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER -0.851905 -0.23373 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.858698 -0.23007 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER -0.830999 -0.248342 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER -0.841538 -0.227016 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.817586 -0.227621 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.868948 -0.209658 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER -0.84746 -0.202239 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER -0.865773 -0.186008 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.889121 -0.210757 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.885946 -0.187106 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.887806 -0.204436 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER -0.870808 -0.226988 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.869493 -0.220667 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER -0.84932 -0.219569 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.661946 0.0667914 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65711 0.0452771 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680354 0.0511945 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673611 0.0847128 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.692019 0.069116 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680439 0.08112 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.650366 0.0787954 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657195 0.0752026 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64553 0.0572811 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.604582 0.0446211 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604582 0.0446211 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599047 0.0239663 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.634953 -0.000226782 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655218 0.012605 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.635947 0.0122343 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.629419 -0.0208815 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630413 -0.00842045 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644149 -0.0287044 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64869 -0.0205108 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.66342 -0.0283337 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.668955 -0.00767898 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.746894 0.0650768 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739183 0.0653796 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.723153 0.0607735 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.748035 0.0437239 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.724295 0.0394207 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741466 0.0226739 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.764065 0.04833 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.757496 0.02728 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.756355 0.0486329 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.732368 -0.0484665 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715699 -0.0478762 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737738 -0.0371781 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737902 -0.0278118 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743272 -0.0165234 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.726768 -0.00656677 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715864 -0.0385099 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70473 -0.0172649 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.699195 -0.0379196 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.786629 -0.00415829 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786629 -0.00415829 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.781094 -0.024813 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.706291 0.107813 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.689001 0.0909853 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701434 0.0896851 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.730141 0.101422 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.725284 0.0832945 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.736701 0.0782041 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717709 0.102723 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.724268 0.0795043 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.700418 0.0858949 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.740802 0.0511556 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718185 0.043171 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.730397 0.0580833 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.760455 0.0427273 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.750049 0.0496549 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.757489 0.0263144 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.748242 0.027815 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.745277 0.0114021 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.725625 0.0198304 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.650692 0.0721382 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645053 0.0564414 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663167 0.072935 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671925 0.0696112 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6844 0.070408 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.68752 0.0513875 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.653812 0.0531177 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669407 0.034894 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648173 0.0374209 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.672341 -0.123995 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666199 -0.120057 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651943 -0.134313 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680334 -0.146243 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659936 -0.156561 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682184 -0.164554 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69459 -0.131987 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696439 -0.150298 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.688447 -0.12805 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.731779 -0.136231 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.712305 -0.141449 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70911 -0.129524 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.734974 -0.148156 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.712305 -0.141449 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718696 -0.165299 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.738169 -0.160081 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721891 -0.177224 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718696 -0.165299 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.656415 -0.0783272 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639272 -0.0946054 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651197 -0.0978007 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680265 -0.0847178 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.675047 -0.104191 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.686972 -0.107387 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.66834 -0.0815225 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.675047 -0.104191 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651197 -0.0978007 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.60298 -0.154189 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.622115 -0.166695 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617912 -0.143431 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583506 -0.148971 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598439 -0.138214 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583168 -0.156259 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587708 -0.172234 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58737 -0.179523 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606843 -0.184741 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.577317 -0.105912 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582843 -0.128897 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600302 -0.111438 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586046 -0.0971825 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609032 -0.102708 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600302 -0.111438 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.568587 -0.114642 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582843 -0.128897 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574113 -0.137627 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549732 -0.185011 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569205 -0.179793 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56601 -0.167868 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.552927 -0.196936 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569205 -0.179793 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575596 -0.203643 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556122 -0.208861 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.578791 -0.215568 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575596 -0.203643 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.653756 -0.23668 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636974 -0.229127 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660237 -0.233329 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671802 -0.221409 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678283 -0.218058 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673065 -0.198584 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648538 -0.217207 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649801 -0.194382 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631756 -0.209653 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.607636 -0.260374 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600929 -0.237705 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612854 -0.240901 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631486 -0.266765 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636704 -0.247291 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648629 -0.250487 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619561 -0.26357 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636704 -0.247291 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612854 -0.240901 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.710584 -0.23918 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687599 -0.233654 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.705059 -0.216195 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719314 -0.23045 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.713788 -0.207465 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.705059 -0.216195 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701855 -0.24791 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687599 -0.233654 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678869 -0.242384 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786005 -0.343435 8.51251e-17 RAD 0.0555556 + txt002 + SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.824791 -0.400556 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802599 -0.392663 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.821021 -0.376528 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.843843 -0.400347 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840073 -0.376319 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840701 -0.392245 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER -0.82542 -0.416482 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER -0.822279 -0.40838 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803228 -0.408589 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.734271 -0.367981 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.731279 -0.362711 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.745269 -0.348136 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.756109 -0.376044 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.767107 -0.356199 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.774956 -0.378837 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.74212 -0.390619 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.760966 -0.393412 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739128 -0.385349 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.80634 -0.308073 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786996 -0.316395 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802721 -0.300378 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.829184 -0.315299 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.825565 -0.307605 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.832685 -0.330849 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.813459 -0.331317 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.81696 -0.346866 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.794116 -0.339639 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.878086 -0.365674 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER -0.859887 -0.367962 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER -0.863875 -0.346241 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER -0.872736 -0.362827 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.858526 -0.343394 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER -0.849188 -0.362269 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.868748 -0.384548 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER -0.8452 -0.38399 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.85055 -0.386837 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.848999 -0.272611 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.828835 -0.281616 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.829121 -0.278432 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862893 -0.287278 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.843015 -0.293099 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.856621 -0.310951 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862606 -0.290462 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.856335 -0.314135 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.842441 -0.299468 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.819591 -0.297057 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.814956 -0.293153 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.79807 -0.304244 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.823527 -0.320001 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802007 -0.327188 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.822829 -0.339041 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840413 -0.30891 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.839716 -0.32795 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.835779 -0.305006 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.793573 -0.436217 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER -0.776294 -0.419454 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.796968 -0.420728 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.815094 -0.42903 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER -0.818489 -0.413542 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819335 -0.405081 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.79442 -0.427756 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.798662 -0.403807 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER -0.777141 -0.410993 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.747522 -0.356966 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759239 -0.339469 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.740618 -0.352002 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.750453 -0.380746 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743549 -0.375782 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.765101 -0.387029 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.769074 -0.368213 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.783722 -0.374496 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.780791 -0.350716 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.704862 -0.392427 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717401 -0.374248 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.714218 -0.373948 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.716744 -0.408767 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.726099 -0.390287 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741164 -0.406927 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719927 -0.409067 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.744347 -0.407227 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732465 -0.390887 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.517869 -0.413579 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528508 -0.393219 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.525596 -0.395831 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531404 -0.430134 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539131 -0.412386 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555577 -0.426328 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534315 -0.427522 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558488 -0.423716 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544953 -0.407161 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.504962 -0.327164 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504962 -0.327164 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499428 -0.347819 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.529037 -0.375068 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530412 -0.371406 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542624 -0.356494 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548689 -0.383497 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562276 -0.364922 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569716 -0.388263 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536477 -0.398409 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557504 -0.403175 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.537852 -0.394747 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.612625 -0.451897 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593593 -0.436515 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.614807 -0.432663 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632624 -0.444328 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634806 -0.425094 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633591 -0.421376 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.61141 -0.448179 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612377 -0.425227 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.592379 -0.432797 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.620974 -0.402865 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600381 -0.39648 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618494 -0.379986 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642207 -0.405392 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639728 -0.382513 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642848 -0.401533 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624094 -0.421886 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624734 -0.418027 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603501 -0.4155 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.687009 -0.375943 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687009 -0.375943 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681475 -0.396598 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.570335 -0.399584 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562269 -0.381987 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569167 -0.403942 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594185 -0.405974 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593017 -0.410332 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609969 -0.394768 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587286 -0.384019 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60307 -0.372813 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57922 -0.366422 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.64748 -0.317573 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643752 -0.316388 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624481 -0.316758 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.641945 -0.338228 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618946 -0.337413 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632683 -0.357697 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661216 -0.337857 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651954 -0.357326 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657489 -0.336672 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.562847 -0.317033 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561133 -0.338525 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583171 -0.327827 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.568381 -0.296378 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.588706 -0.307172 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572202 -0.297216 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.546343 -0.307077 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550163 -0.307914 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544629 -0.328569 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.525642 -0.386849 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528407 -0.379645 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538964 -0.366733 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544812 -0.396323 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558134 -0.376207 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566746 -0.398593 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534255 -0.409235 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556189 -0.411505 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.537019 -0.402031 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.504962 -0.327164 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504962 -0.327164 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499428 -0.347819 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.551072 -0.299647 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545434 -0.315344 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563547 -0.29885 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572306 -0.302174 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.584781 -0.301377 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587901 -0.320398 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554192 -0.318667 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569787 -0.336891 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548554 -0.334364 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.617918 -0.415912 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.597788 -0.406911 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616439 -0.39183 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639257 -0.417292 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637778 -0.39321 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640465 -0.409671 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.620605 -0.432372 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621814 -0.424751 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600475 -0.423371 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.641183 -0.320629 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618565 -0.328614 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630777 -0.313702 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660835 -0.329058 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65043 -0.32213 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65787 -0.345471 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648623 -0.34397 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645657 -0.360383 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626005 -0.351955 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.687009 -0.375943 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687009 -0.375943 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681475 -0.396598 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.55776 -0.446515 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5512 -0.423296 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562617 -0.428387 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58161 -0.452905 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586467 -0.434777 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5989 -0.436077 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570193 -0.447815 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587483 -0.430987 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563633 -0.424596 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.632748 -0.420252 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.61608 -0.419661 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638118 -0.408963 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638282 -0.399597 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643653 -0.388308 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627149 -0.378352 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616244 -0.410295 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60511 -0.38905 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599576 -0.409705 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.535334 -0.372012 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555599 -0.35918 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536327 -0.359551 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529799 -0.392667 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530793 -0.380205 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54453 -0.400489 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549071 -0.392296 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563801 -0.400119 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569335 -0.379464 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.299716 -0.354293 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER 0.292196 -0.366989 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER 0.279022 -0.347717 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287162 -0.355904 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266468 -0.349329 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267088 -0.370213 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER 0.300337 -0.375177 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280263 -0.389485 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.292817 -0.387873 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.289441 -0.362978 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER 0.270044 -0.378255 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267771 -0.35549 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30046 -0.357187 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.278789 -0.349699 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29208 -0.366673 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302733 -0.379952 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294353 -0.389438 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER 0.283335 -0.395229 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.250544 -0.304702 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259421 -0.327715 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238717 -0.32307 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229788 -0.298875 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER 0.21796 -0.317244 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217908 -0.316063 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250492 -0.30352 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238612 -0.320707 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259369 -0.326533 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.228779 -0.378635 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER 0.24293 -0.383364 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225483 -0.365937 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20493 -0.385029 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201634 -0.372331 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.195233 -0.396152 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.222377 -0.402455 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER 0.21268 -0.413578 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236529 -0.407185 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.177083 -0.319723 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198298 -0.332294 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.189464 -0.325124 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156889 -0.330475 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.16927 -0.335876 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.157909 -0.353797 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165722 -0.337645 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166743 -0.360967 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.186938 -0.350216 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.147477 -0.412573 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172167 -0.412448 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.15977 -0.39322 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13525 -0.414903 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.147543 -0.39555 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.147713 -0.417108 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.147647 -0.434131 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.16011 -0.436336 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172338 -0.434006 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.282991 -0.443285 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282046 -0.4302 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271991 -0.421181 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262424 -0.453417 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251423 -0.431313 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240911 -0.450466 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27248 -0.462437 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250967 -0.459485 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271534 -0.449353 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.204606 -0.486123 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223366 -0.470107 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.202946 -0.464339 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183578 -0.481368 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181918 -0.459584 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.18131 -0.460599 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203998 -0.487137 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201729 -0.466367 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.222757 -0.471122 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.285685 -0.449273 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27701 -0.426189 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282528 -0.436139 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271573 -0.46728 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268416 -0.454146 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248787 -0.462204 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266055 -0.45733 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.243269 -0.452254 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257381 -0.434246 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.374298 -0.269898 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER 0.362218 -0.291334 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350338 -0.270045 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379235 -0.256525 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355276 -0.256671 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372093 -0.264588 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER 0.391115 -0.277815 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383973 -0.285878 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379036 -0.299251 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.304189 -0.304189 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29042 -0.307879 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307879 -0.29042 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328039 -0.31058 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331729 -0.29681 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33812 -0.32066 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31058 -0.328039 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32066 -0.33812 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29681 -0.331729 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.305995 -0.235688 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321516 -0.245915 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312359 -0.259438 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282145 -0.242079 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288509 -0.265828 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273816 -0.258696 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291303 -0.228556 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282974 -0.245173 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306824 -0.238783 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.385852 -0.261966 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38141 -0.278159 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36581 -0.259422 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER 0.371598 -0.261768 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351556 -0.259225 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352901 -0.277764 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387198 -0.280504 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER 0.368501 -0.2965 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382755 -0.296698 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.30415 -0.228803 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321516 -0.245915 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306824 -0.238783 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2803 -0.235194 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282974 -0.245173 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273816 -0.258696 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294992 -0.242326 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288509 -0.265828 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312359 -0.259438 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.32435 -0.304189 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33812 -0.307879 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32066 -0.29042 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3005 -0.31058 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29681 -0.29681 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29042 -0.32066 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317959 -0.328039 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307879 -0.33812 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331729 -0.331729 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.407156 -0.334762 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388696 -0.326552 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.392275 -0.31686 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402218 -0.348135 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387337 -0.330233 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378821 -0.353299 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39864 -0.357827 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER 0.375243 -0.362991 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.380181 -0.349618 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.346394 -0.386461 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.354723 -0.369843 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340031 -0.362711 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322544 -0.392851 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316181 -0.369102 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307023 -0.382624 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337237 -0.399983 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321715 -0.389757 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345565 -0.383366 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.348239 -0.393346 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.354723 -0.369843 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345565 -0.383366 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324389 -0.399736 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321715 -0.389757 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307023 -0.382624 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.333547 -0.386213 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316181 -0.369102 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340031 -0.362711 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER 0.221102 -0.115471 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.220766 -0.13987 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200597 -0.126388 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208266 -0.10569 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187762 -0.116607 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER 0.195095 -0.120308 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228435 -0.119172 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215264 -0.13379 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228099 -0.143571 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.243049 -0.18209 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218634 -0.185251 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227721 -0.168159 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.254834 -0.188974 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.239506 -0.175043 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242204 -0.199019 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245747 -0.206066 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233117 -0.216111 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221332 -0.209227 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.180792 -0.15554 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER 0.19323 -0.166926 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171251 -0.17557 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160236 -0.142909 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.150694 -0.162939 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152117 -0.141663 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.182215 -0.134265 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174096 -0.133019 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.194652 -0.145651 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.14887 -0.105335 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167242 -0.121723 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153943 -0.115741 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER 0.125414 -0.112813 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.130487 -0.123219 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120331 -0.136679 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138714 -0.118795 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13363 -0.142661 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.157086 -0.135183 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0995811 -0.130858 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER 0.113639 -0.134736 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.123725 -0.135326 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0944715 -0.149528 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.118615 -0.153997 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10342 -0.172078 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0843858 -0.148938 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0933338 -0.171487 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0984435 -0.152816 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0897843 -0.179968 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER 0.114103 -0.183804 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.105492 -0.166467 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0778128 -0.186523 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0935207 -0.173022 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0901597 -0.196914 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0864233 -0.20386 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0987702 -0.214251 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.110742 -0.207696 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.219088 -0.151829 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221861 -0.163068 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205084 -0.14514 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER 0.19876 -0.155801 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.184756 -0.149113 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181204 -0.171014 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215537 -0.173729 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.197981 -0.188942 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218309 -0.184969 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.167942 -0.229756 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183484 -0.223214 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.16569 -0.207683 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144336 -0.234741 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER 0.142084 -0.212668 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13627 -0.233184 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER 0.162129 -0.250271 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.154064 -0.248714 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177671 -0.243729 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.248268 -0.22829 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2391 -0.216949 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234532 -0.207937 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233189 -0.240428 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219453 -0.220075 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208942 -0.241225 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237756 -0.249439 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER 0.213509 -0.250236 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228589 -0.238098 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.01504 -0.435909 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0289993 -0.440694 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0115452 -0.423265 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00881065 -0.442297 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0123054 -0.429652 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0187019 -0.453468 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00864346 -0.459725 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0012478 -0.470897 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0226028 -0.46451 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0903221 -0.426942 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0806307 -0.435083 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0699989 -0.416328 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.078568 -0.431037 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0582447 -0.420423 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0571224 -0.443274 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0891998 -0.449792 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0677542 -0.462029 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0795084 -0.457933 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0293677 -0.364644 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0401449 -0.385352 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0213457 -0.375512 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0065032 -0.36543 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00151881 -0.376298 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00558411 -0.386924 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0253024 -0.37527 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0132151 -0.396764 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0360796 -0.395978 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0707378 -0.451803 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0461991 -0.454158 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0561039 -0.435761 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0824157 -0.456685 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0677817 -0.440643 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0695548 -0.46392 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0725109 -0.475081 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.05965 -0.482316 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0479721 -0.477435 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0495643 -0.373728 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0306825 -0.382672 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.030137 -0.383722 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER -0.064627 -0.389151 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0451997 -0.399146 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER -0.060808 -0.41352 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0651725 -0.388102 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0613535 -0.41247 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0462908 -0.397047 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.081612 -0.459563 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0696122 -0.463589 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0665888 -0.442243 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0691745 -0.459069 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0541513 -0.441749 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0447373 -0.4626 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0721979 -0.480415 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0477607 -0.483946 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0601982 -0.48444 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.000557006 -0.523883 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0165974 -0.51057 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00208214 -0.49924 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0234352 -0.525392 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0249603 -0.500749 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER -0.029159 -0.513588 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00475566 -0.536722 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0104794 -0.524918 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0123987 -0.523409 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00154892 -0.540463 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0156462 -0.524673 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00538221 -0.52751 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0227737 -0.531924 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER -0.026607 -0.518971 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0268034 -0.507596 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00174531 -0.529087 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00577498 -0.504759 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0154498 -0.513298 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0817008 -0.508666 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0732807 -0.489545 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0722467 -0.488971 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0658672 -0.523298 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0564131 -0.503602 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0416134 -0.518808 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0669012 -0.523872 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0426474 -0.519382 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.058481 -0.504751 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0522053 -0.160406 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0358698 -0.178533 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0513956 -0.171954 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0762577 -0.165658 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER -0.075448 -0.177206 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0839747 -0.189036 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0607319 -0.172236 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0684488 -0.195615 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0443964 -0.190363 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0258737 -0.20044 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0203763 -0.215612 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00551963 -0.196602 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0122285 -0.200749 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00812553 -0.196911 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00691403 -0.21623 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0270852 -0.21976 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00794264 -0.235241 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0215878 -0.234932 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00705049 -0.176731 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00352517 -0.200733 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.025725 -0.192673 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.020811 -0.163117 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0394855 -0.179058 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0310463 -0.173504 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00138875 -0.171177 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00884647 -0.181564 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00491406 -0.195179 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.127519 -0.195663 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER -0.108803 -0.201738 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104303 -0.194866 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER -0.133744 -0.210551 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110528 -0.209754 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121254 -0.231514 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138245 -0.217423 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER -0.125754 -0.238386 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119529 -0.223497 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0673141 -0.20388 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0609052 -0.198742 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0490355 -0.216456 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0788008 -0.225098 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0605222 -0.237674 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0838786 -0.241177 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0906706 -0.207384 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0957484 -0.223463 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0842617 -0.202246 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.126206 -0.291073 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110246 -0.293457 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119897 -0.271345 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119442 -0.279219 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113132 -0.25949 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0967168 -0.269749 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10979 -0.301332 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0870656 -0.291862 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0938302 -0.303716 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0942304 -0.234308 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0714204 -0.238704 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0854464 -0.221514 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113822 -0.241032 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.105038 -0.228237 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110603 -0.252152 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0997955 -0.258223 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0965768 -0.269343 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0769856 -0.262619 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0817333 -0.324811 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0603366 -0.313378 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0800146 -0.300317 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100861 -0.321838 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0991425 -0.297345 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0985923 -0.307433 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0811832 -0.334899 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0789143 -0.320493 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0597864 -0.323466 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0076281 -0.275459 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00142185 -0.270078 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0167139 -0.255218 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0305645 -0.282946 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0396503 -0.262704 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0472946 -0.285051 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0152725 -0.297806 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0320026 -0.299911 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00906621 -0.292425 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.190929 -0.412497 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER -0.16674 -0.417001 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.174844 -0.400273 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203175 -0.419795 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.18709 -0.407571 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191231 -0.431597 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195071 -0.436523 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER -0.183127 -0.448325 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER -0.170881 -0.441027 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.10495 -0.41922 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0911807 -0.42291 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10864 -0.40545 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128801 -0.425611 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13249 -0.411841 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138881 -0.435691 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111341 -0.44307 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121421 -0.45315 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0975713 -0.44676 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.12515 -0.343834 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107784 -0.360946 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122476 -0.353814 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149 -0.350225 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.146326 -0.360204 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155484 -0.373727 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134308 -0.357357 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER -0.140792 -0.380859 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116942 -0.374468 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.200165 -0.411775 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189948 -0.415187 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179342 -0.399922 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189202 -0.420888 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168379 -0.409035 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168023 -0.433412 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER -0.199808 -0.436152 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178629 -0.448677 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189591 -0.439564 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.123305 -0.350719 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107784 -0.360946 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116942 -0.374468 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.147155 -0.357109 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.140792 -0.380859 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155484 -0.373727 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.137998 -0.343587 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER -0.146326 -0.360204 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122476 -0.353814 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.125111 -0.41922 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138881 -0.42291 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121421 -0.40545 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.101261 -0.425611 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0975713 -0.411841 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0911807 -0.435691 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11872 -0.44307 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10864 -0.45315 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13249 -0.44676 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.174264 -0.502603 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.15142 -0.495376 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER -0.170327 -0.479659 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER -0.185226 -0.49349 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER -0.18129 -0.470546 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173345 -0.477151 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166319 -0.509207 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154437 -0.492868 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143475 -0.501981 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0810612 -0.508376 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0745774 -0.484874 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0837352 -0.498397 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104911 -0.514767 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107585 -0.504787 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122277 -0.497655 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0957534 -0.501244 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11312 -0.484132 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0892696 -0.477742 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.082906 -0.501491 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0745774 -0.484874 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0892696 -0.477742 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.106756 -0.507882 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11312 -0.484132 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122277 -0.497655 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0920638 -0.515014 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107585 -0.504787 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0837352 -0.498397 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.225282 -0.612732 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22113 -0.60221 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212428 -0.591695 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206686 -0.62329 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193832 -0.602253 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183939 -0.623325 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215388 -0.633805 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.192641 -0.63384 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211236 -0.623283 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.243024 -0.542885 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219861 -0.534333 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.243024 -0.542885 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219861 -0.534333 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248559 -0.563539 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23093 -0.575642 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23093 -0.575642 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.200547 -0.527458 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205161 -0.540303 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187702 -0.522843 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179472 -0.531074 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166627 -0.526459 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.163011 -0.547535 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.196931 -0.548533 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.18047 -0.564994 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201546 -0.561378 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.132649 -0.643128 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152367 -0.631785 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.133263 -0.618482 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111266 -0.643283 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11188 -0.618637 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.109601 -0.632094 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.130371 -0.656585 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128706 -0.645397 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.150088 -0.645242 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.11011 -0.549659 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.132596 -0.555684 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.118927 -0.53924 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.09005 -0.557065 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0988668 -0.546646 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0924762 -0.570497 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.103719 -0.573509 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.106145 -0.58694 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.126205 -0.579534 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0609772 -0.591664 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.076761 -0.572676 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0609772 -0.591664 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.076761 -0.572676 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0665116 -0.612319 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0878298 -0.613986 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0878298 -0.613986 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER 0.189742 -0.660425 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.196144 -0.636618 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.185725 -0.645434 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165892 -0.666816 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161875 -0.651825 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.148444 -0.649399 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.17631 -0.657999 0.57904 RAD 0.00617284 + txt002 + SPHERE CENTER 0.158862 -0.640582 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.182712 -0.634191 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.107144 -0.620861 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.119989 -0.625475 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102529 -0.608016 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11076 -0.599785 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.106145 -0.58694 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.127221 -0.583324 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128219 -0.617245 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.14468 -0.600784 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141064 -0.621859 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.203972 -0.574809 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181486 -0.568784 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201546 -0.561378 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217641 -0.591253 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215215 -0.577822 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208824 -0.601672 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.197581 -0.598659 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188764 -0.609078 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.175095 -0.592634 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0316054 -0.646362 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0478 -0.627981 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0287309 -0.625173 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00868865 -0.644258 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00581415 -0.623069 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00196644 -0.623773 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0277577 -0.647066 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0210355 -0.62658 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0439523 -0.628685 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.105299 -0.593994 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100664 -0.582384 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0926585 -0.572783 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0869303 -0.604941 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0742898 -0.58373 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0639267 -0.604278 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0949359 -0.614541 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0719323 -0.613879 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.090301 -0.602932 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0177119 -0.584898 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0364224 -0.580268 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0185345 -0.56353 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00489609 -0.589197 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00407348 -0.567829 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00879364 -0.588867 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0129918 -0.605935 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00909422 -0.605605 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0317022 -0.601305 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0473753 -0.5935 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0308315 -0.595617 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0399691 -0.57344 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0409921 -0.582752 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0335859 -0.562692 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0180651 -0.574121 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0318545 -0.604929 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00892756 -0.596298 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0153107 -0.607046 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0495897 -0.530389 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0261165 -0.53532 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.031221 -0.519442 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0589904 -0.538628 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0406217 -0.527681 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0449178 -0.551799 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0538859 -0.554507 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0398133 -0.567678 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0304127 -0.559438 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0212225 -0.48882 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00896145 -0.491256 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00194055 -0.497372 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0286287 -0.50888 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00546563 -0.517432 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0237738 -0.531375 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0395307 -0.502764 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0346758 -0.525259 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0272696 -0.505199 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0604766 -0.607302 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0678827 -0.587242 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0604766 -0.607302 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0366265 -0.613693 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0366265 -0.613693 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0201827 -0.600023 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0440327 -0.593633 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0275889 -0.579964 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0514389 -0.573573 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0542684 -0.523344 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0591566 -0.541988 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0358996 -0.534291 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0472252 -0.501435 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0288565 -0.512382 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0450702 -0.49817 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0704822 -0.509132 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0683272 -0.505868 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0753703 -0.527777 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.118381 -0.551884 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0944221 -0.550745 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.103361 -0.536664 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.125404 -0.562225 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.110383 -0.547006 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108468 -0.571428 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.116465 -0.576307 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0995293 -0.58551 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0925065 -0.575168 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.326876 -0.484182 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302705 -0.488171 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310432 -0.470513 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337778 -0.490299 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321334 -0.476629 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324509 -0.500404 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330051 -0.507957 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316783 -0.518062 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305881 -0.511946 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.279233 -0.426389 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286276 -0.448298 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263449 -0.445377 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262789 -0.41272 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247006 -0.431707 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253389 -0.420959 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285616 -0.415641 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER 0.276216 -0.42388 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29266 -0.43755 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.320401 -0.436971 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3148 -0.455413 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29902 -0.436675 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30814 -0.434535 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286759 -0.434239 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290278 -0.450543 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32392 -0.453274 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306057 -0.469281 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318318 -0.471717 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.314604 -0.562288 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310183 -0.541186 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306499 -0.542501 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29581 -0.575569 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287705 -0.555781 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.272595 -0.567748 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299494 -0.574255 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.276279 -0.566433 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295073 -0.553152 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.298839 -0.507811 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302049 -0.505577 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287442 -0.489718 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27711 -0.515392 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.265714 -0.497299 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258591 -0.520738 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291716 -0.531251 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273198 -0.536597 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294927 -0.529016 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.227186 -0.567359 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.246777 -0.555283 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227528 -0.54267 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205805 -0.567063 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206147 -0.542374 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.204014 -0.554691 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225054 -0.579676 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223263 -0.567305 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244644 -0.567601 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.275127 -0.549787 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282533 -0.529727 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275127 -0.549787 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251277 -0.556177 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251277 -0.556177 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234833 -0.542508 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258683 -0.536117 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242239 -0.522448 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266089 -0.516058 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.17251 -0.549603 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191778 -0.549105 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177908 -0.528912 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173421 -0.537136 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.178819 -0.516445 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193601 -0.524171 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187292 -0.557329 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207471 -0.544363 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20656 -0.556831 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.209819 -0.457868 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.210053 -0.453963 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2312 -0.458164 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214674 -0.480363 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236055 -0.480659 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219763 -0.498954 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193527 -0.476163 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198616 -0.494753 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193761 -0.472258 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.102403 -0.871334 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100577 -0.862937 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113406 -0.850164 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER -0.123961 -0.880044 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134964 -0.858873 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143694 -0.880356 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111133 -0.892817 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER -0.130866 -0.893129 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER -0.109307 -0.884419 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0654286 -0.811594 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0820122 -0.820516 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0876595 -0.80102 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0688817 -0.814468 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0911125 -0.803895 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0889183 -0.826265 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0632344 -0.833964 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER -0.083271 -0.845761 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER -0.079818 -0.842886 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.120908 -0.781177 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113462 -0.795477 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13149 -0.778973 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143095 -0.784778 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153678 -0.782573 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.157836 -0.802678 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.125067 -0.801282 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.139808 -0.819182 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11762 -0.815582 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.197746 -0.891905 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.175383 -0.884286 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.193701 -0.867957 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216576 -0.89169 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212531 -0.867741 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER -0.213043 -0.883856 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.198259 -0.908019 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194726 -0.900186 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER -0.175896 -0.900401 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.212743 -0.794108 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189621 -0.802328 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.199907 -0.788345 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.230849 -0.803282 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER -0.218012 -0.797518 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225832 -0.820676 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220563 -0.817265 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215547 -0.83466 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER -0.197441 -0.825486 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.25245 -0.843832 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233837 -0.846687 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.235043 -0.826426 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248234 -0.845385 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER -0.230827 -0.827978 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225404 -0.849792 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.247028 -0.865646 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224198 -0.870053 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228415 -0.868501 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.128672 -0.926643 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER -0.1198 -0.904034 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER -0.133221 -0.90826 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.152902 -0.930993 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.157451 -0.912609 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER -0.16826 -0.912733 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER -0.139481 -0.926768 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154838 -0.908508 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.130608 -0.904159 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.188167 -0.894035 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172046 -0.89378 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195141 -0.885777 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195558 -0.872807 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER -0.202532 -0.864549 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.186828 -0.851325 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172463 -0.880811 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163733 -0.859328 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER -0.156342 -0.880556 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0905999 -0.853284 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111382 -0.840233 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0940331 -0.839638 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.086577 -0.873178 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0900102 -0.859532 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103336 -0.880022 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103926 -0.873773 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120685 -0.880618 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124708 -0.860723 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.103063 -0.66171 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0876683 -0.673446 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0800983 -0.653258 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0992478 -0.662574 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0762832 -0.654121 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0800382 -0.675172 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.106818 -0.682761 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0876083 -0.69536 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0914233 -0.694497 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0547519 -0.662466 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0439578 -0.682791 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0332597 -0.660752 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0647085 -0.645962 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0432164 -0.644249 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0638711 -0.649783 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0754066 -0.668 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0745692 -0.671821 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0646126 -0.688325 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0446211 -0.604582 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0239663 -0.599047 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0446211 -0.604582 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0608821 -0.693716 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0652402 -0.694884 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0496759 -0.677932 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0389272 -0.700615 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.027721 -0.684831 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0213304 -0.708681 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0544915 -0.717566 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0368947 -0.725632 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0588496 -0.718734 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00328338 -0.628657 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0152909 -0.642244 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.000378614 -0.630031 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.026624 -0.636097 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.022962 -0.637471 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0313903 -0.657124 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0117117 -0.648309 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.016478 -0.669336 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00686255 -0.661896 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0310802 -0.720593 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00820099 -0.718114 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0246945 -0.7 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0501007 -0.723713 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.043715 -0.70312 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.046242 -0.724354 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0336072 -0.741827 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0297485 -0.742467 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.010728 -0.739347 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0887955 -0.750021 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0813312 -0.732161 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.078459 -0.729506 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0721458 -0.763719 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0618093 -0.743204 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0480318 -0.759557 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.075018 -0.766375 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.050904 -0.762212 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0675537 -0.748514 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00415829 -0.786629 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.024813 -0.781094 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00415829 -0.786629 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0542122 -0.747099 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0550267 -0.7241 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0553974 -0.743371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0339282 -0.760836 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0351134 -0.757108 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0144587 -0.751574 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0335575 -0.741565 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.014088 -0.732303 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0343719 -0.718566 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.125845 -0.597249 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.12123 -0.610094 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138689 -0.592635 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14692 -0.600865 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.159765 -0.596251 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163381 -0.617326 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.12946 -0.618324 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.145921 -0.634785 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124846 -0.631169 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0833673 -0.612676 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.624779 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10653 -0.604124 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0833673 -0.612676 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10653 -0.604124 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.624779 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0778329 -0.633331 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0954616 -0.645433 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0954616 -0.645433 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.141271 -0.554772 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13272 -0.577935 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.5724 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.161926 -0.549237 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.174029 -0.566866 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.174029 -0.566866 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141271 -0.554772 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.5724 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13272 -0.577935 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.216282 -0.61945 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.193796 -0.625476 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207465 -0.609032 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.236341 -0.626857 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.227525 -0.616438 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233915 -0.640288 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.222672 -0.6433 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220246 -0.656732 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200186 -0.649326 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.2291 -0.567237 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209804 -0.576452 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209804 -0.576452 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.24422 -0.582357 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.591572 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240045 -0.606693 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.24422 -0.582357 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240045 -0.606693 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.591572 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.265414 -0.661455 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.663122 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.249631 -0.642468 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265414 -0.661455 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.249631 -0.642468 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.663122 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.25988 -0.68211 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238562 -0.683777 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238562 -0.683777 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.148046 -0.687686 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.137627 -0.678869 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154071 -0.6652 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171896 -0.694077 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177921 -0.671591 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.185327 -0.691651 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155452 -0.707746 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168883 -0.70532 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.145033 -0.698929 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.190051 -0.736819 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171063 -0.721035 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.715501 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210706 -0.731284 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212373 -0.709966 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212373 -0.709966 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.190051 -0.736819 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.715501 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171063 -0.721035 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.095832 -0.700504 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.105047 -0.681209 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.105047 -0.681209 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110952 -0.715624 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.696329 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135288 -0.711449 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110952 -0.715624 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135288 -0.711449 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.696329 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343435 -0.786005 8.51251e-17 RAD 0.0555556 + txt002 + SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.400556 -0.824791 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376528 -0.821021 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392663 -0.802599 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.416482 -0.82542 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408589 -0.803228 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40838 -0.822279 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400347 -0.843843 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392245 -0.840701 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376319 -0.840073 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.308073 -0.80634 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.300378 -0.802721 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316395 -0.786996 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331317 -0.813459 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339639 -0.794116 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.346866 -0.81696 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.315299 -0.829184 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330849 -0.832685 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307605 -0.825565 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.367981 -0.734271 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348136 -0.745269 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362711 -0.731279 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390619 -0.74212 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385349 -0.739128 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.393412 -0.760966 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376044 -0.756109 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378837 -0.774956 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356199 -0.767107 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.436217 -0.793573 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420728 -0.796968 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419454 -0.776294 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427756 -0.79442 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410993 -0.777141 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403807 -0.798662 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42903 -0.815094 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405081 -0.819335 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.413542 -0.818489 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.392427 -0.704862 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.373948 -0.714218 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374248 -0.717401 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409067 -0.719927 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390887 -0.732465 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407227 -0.744347 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408767 -0.716744 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406927 -0.741164 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390287 -0.726099 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.356966 -0.747522 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.352002 -0.740618 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339469 -0.759239 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.368213 -0.769074 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.350716 -0.780791 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374496 -0.783722 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380746 -0.750453 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.387029 -0.765101 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375782 -0.743549 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.365674 -0.878086 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER -0.346241 -0.863875 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367962 -0.859887 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384548 -0.868748 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386837 -0.85055 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.38399 -0.8452 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362827 -0.872736 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362269 -0.849188 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343394 -0.858526 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.297057 -0.819591 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.304244 -0.79807 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293153 -0.814956 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.30891 -0.840413 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.305006 -0.835779 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32795 -0.839716 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320001 -0.823527 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339041 -0.822829 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327188 -0.802007 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.272611 -0.848999 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.278432 -0.829121 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.281616 -0.828835 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.290462 -0.862606 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299468 -0.842441 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314135 -0.856335 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.287278 -0.862893 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.310951 -0.856621 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293099 -0.843015 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.386849 -0.525642 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366733 -0.538964 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379645 -0.528407 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409235 -0.534255 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.402031 -0.537019 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.411505 -0.556189 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396323 -0.544812 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398593 -0.566746 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376207 -0.558134 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.299647 -0.551072 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29885 -0.563547 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.315344 -0.545434 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318667 -0.554192 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.334364 -0.548554 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.336891 -0.569787 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.302174 -0.572306 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320398 -0.587901 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.301377 -0.584781 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.327164 -0.504962 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.347819 -0.499428 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327164 -0.504962 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.446515 -0.55776 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428387 -0.562617 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423296 -0.5512 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.447815 -0.570193 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.424596 -0.563633 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.430987 -0.587483 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452905 -0.58161 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436077 -0.5989 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434777 -0.586467 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.372012 -0.535334 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359551 -0.536327 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.35918 -0.555599 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392296 -0.549071 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379464 -0.569335 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400119 -0.563801 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392667 -0.529799 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400489 -0.54453 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380205 -0.530793 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.420252 -0.632748 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408963 -0.638118 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419661 -0.61608 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410295 -0.616244 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409705 -0.599576 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.38905 -0.60511 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399597 -0.638282 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378352 -0.627149 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388308 -0.643653 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.415912 -0.617918 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39183 -0.616439 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406911 -0.597788 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.432372 -0.620605 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423371 -0.600475 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.424751 -0.621814 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.417292 -0.639257 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409671 -0.640465 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39321 -0.637778 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.375943 -0.687009 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396598 -0.681475 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375943 -0.687009 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.320629 -0.641183 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.313702 -0.630777 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328614 -0.618565 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.34397 -0.648623 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.351955 -0.626005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360383 -0.645657 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.329058 -0.660835 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.345471 -0.65787 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32213 -0.65043 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.413579 -0.517869 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.395831 -0.525596 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.393219 -0.528508 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427522 -0.534315 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407161 -0.544953 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423716 -0.558488 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.430134 -0.531404 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.426328 -0.555577 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.412386 -0.539131 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.375068 -0.529037 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356494 -0.542624 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.371406 -0.530412 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398409 -0.536477 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.394747 -0.537852 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403175 -0.557504 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383497 -0.548689 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388263 -0.569716 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.364922 -0.562276 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.327164 -0.504962 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.347819 -0.499428 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327164 -0.504962 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.399584 -0.570335 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403942 -0.569167 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.381987 -0.562269 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384019 -0.587286 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366422 -0.57922 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.372813 -0.60307 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405974 -0.594185 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.394768 -0.609969 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410332 -0.593017 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.317033 -0.562847 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327827 -0.583171 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338525 -0.561133 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307077 -0.546343 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328569 -0.544629 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307914 -0.550163 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296378 -0.568381 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.297216 -0.572202 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307172 -0.588706 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.317573 -0.64748 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316758 -0.624481 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316388 -0.643752 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337857 -0.661216 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.336672 -0.657489 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357326 -0.651954 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338228 -0.641945 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357697 -0.632683 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337413 -0.618946 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.451897 -0.612625 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.432663 -0.614807 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436515 -0.593593 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448179 -0.61141 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.432797 -0.592379 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425227 -0.612377 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.444328 -0.632624 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.421376 -0.633591 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425094 -0.634806 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.375943 -0.687009 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396598 -0.681475 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375943 -0.687009 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.402865 -0.620974 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379986 -0.618494 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39648 -0.600381 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.421886 -0.624094 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4155 -0.603501 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.418027 -0.624734 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405392 -0.642207 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401533 -0.642848 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382513 -0.639728 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0977075 -0.909872 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0997803 -0.886771 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104052 -0.891613 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER -0.117896 -0.922453 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124241 -0.904194 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.140158 -0.911935 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113625 -0.917612 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135886 -0.907093 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115698 -0.894512 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0627848 -0.826973 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0805529 -0.830202 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER -0.083104 -0.81296 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0666419 -0.833656 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0869612 -0.819643 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0882673 -0.843568 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0640908 -0.850898 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0857161 -0.860809 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0818589 -0.854126 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.11253 -0.867758 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107566 -0.860854 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122142 -0.846864 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135168 -0.875606 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14478 -0.854713 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.152843 -0.876551 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120593 -0.889596 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138267 -0.890541 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115629 -0.882692 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.201143 -0.920038 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER -0.17991 -0.910616 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.201384 -0.900209 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER -0.214335 -0.907705 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER -0.214576 -0.887876 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER -0.206294 -0.88595 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192861 -0.918112 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER -0.18482 -0.896357 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171628 -0.90869 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.209658 -0.868948 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER -0.186008 -0.865773 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.202239 -0.84746 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER -0.226988 -0.870808 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.219569 -0.84932 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220667 -0.869493 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210757 -0.889121 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.204436 -0.887806 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER -0.187106 -0.885946 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.252002 -0.824206 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.234336 -0.827952 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER -0.231282 -0.810793 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248342 -0.830999 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER -0.227621 -0.817586 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER -0.227016 -0.841538 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.251396 -0.848158 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER -0.23007 -0.858698 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER -0.23373 -0.851905 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.130609 -0.876203 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124356 -0.857385 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128522 -0.879733 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153561 -0.885283 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.151474 -0.888813 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.170259 -0.875546 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149395 -0.862935 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166093 -0.853198 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143141 -0.844117 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.180723 -0.785723 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173028 -0.782104 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER -0.161937 -0.798991 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192576 -0.806546 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.17379 -0.819813 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196734 -0.82375 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203667 -0.78966 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207825 -0.806864 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195972 -0.786041 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.108311 -0.798532 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119537 -0.819589 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131037 -0.797989 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100522 -0.78294 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.123249 -0.782397 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10396 -0.788405 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0890219 -0.80454 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0924597 -0.810005 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100248 -0.825597 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.200937 -0.595399 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194794 -0.591462 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.180539 -0.605717 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.208929 -0.617647 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188531 -0.627965 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210779 -0.635958 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223185 -0.603392 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225035 -0.621702 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.217042 -0.599454 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.260374 -0.607636 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240901 -0.612854 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.237705 -0.600929 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.26357 -0.619561 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240901 -0.612854 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.247291 -0.636704 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.266765 -0.631486 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.250487 -0.648629 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.247291 -0.636704 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.185011 -0.549732 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.167868 -0.56601 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179793 -0.569205 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.208861 -0.556122 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203643 -0.575596 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215568 -0.578791 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196936 -0.552927 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203643 -0.575596 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179793 -0.569205 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.131575 -0.625593 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.15071 -0.6381 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.146508 -0.614836 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.112102 -0.620375 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.127034 -0.609618 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111763 -0.627664 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116304 -0.643639 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115965 -0.650927 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135439 -0.656145 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.105912 -0.577317 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111438 -0.600302 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128897 -0.582843 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.114642 -0.568587 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.137627 -0.574113 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128897 -0.582843 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0971825 -0.586046 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111438 -0.600302 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.102708 -0.609032 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0783272 -0.656415 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0978007 -0.651197 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0946054 -0.639272 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0815225 -0.66834 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0978007 -0.651197 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104191 -0.675047 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0847178 -0.680265 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107387 -0.686972 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104191 -0.675047 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.182351 -0.708085 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165569 -0.700531 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188833 -0.704733 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200397 -0.692813 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.206879 -0.689462 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.201661 -0.669989 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177134 -0.688611 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178397 -0.665787 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.160351 -0.681058 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.136231 -0.731779 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.129524 -0.70911 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141449 -0.712305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.160081 -0.738169 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165299 -0.718696 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177224 -0.721891 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.148156 -0.734974 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165299 -0.718696 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141449 -0.712305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.23918 -0.710584 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216195 -0.705059 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233654 -0.687599 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.24791 -0.701855 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.242384 -0.678869 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233654 -0.687599 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.23045 -0.719314 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216195 -0.705059 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207465 -0.713788 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0667914 -0.661946 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511945 -0.680354 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0452771 -0.65711 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0787954 -0.650366 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0572811 -0.64553 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0752026 -0.657195 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0847128 -0.673611 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.08112 -0.680439 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.069116 -0.692019 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.000226782 -0.634953 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0122343 -0.635947 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.012605 -0.655218 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0205108 -0.64869 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00767898 -0.668955 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0283337 -0.66342 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0208815 -0.629419 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0287044 -0.644149 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00842045 -0.630413 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0446211 -0.604582 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0239663 -0.599047 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0446211 -0.604582 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.107813 -0.706291 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0896851 -0.701434 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0909853 -0.689001 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102723 -0.717709 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0858949 -0.700418 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0795043 -0.724268 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101422 -0.730141 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0782041 -0.736701 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0832945 -0.725284 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0721382 -0.650692 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.072935 -0.663167 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0564414 -0.645053 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0531177 -0.653812 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0374209 -0.648173 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.034894 -0.669407 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696112 -0.671925 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0513875 -0.68752 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.070408 -0.6844 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0511556 -0.740802 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0580833 -0.730397 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.043171 -0.718185 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.027815 -0.748242 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0198304 -0.725625 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0114021 -0.745277 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0427273 -0.760455 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0263144 -0.757489 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0496549 -0.750049 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0650768 -0.746894 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0607735 -0.723153 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0653796 -0.739183 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.04833 -0.764065 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0486329 -0.756355 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02728 -0.757496 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0437239 -0.748035 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0226739 -0.741466 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0394207 -0.724295 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00415829 -0.786629 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.024813 -0.781094 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00415829 -0.786629 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0484665 -0.732368 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0371781 -0.737738 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0478762 -0.715699 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0385099 -0.715864 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0379196 -0.699195 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0172649 -0.70473 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0278118 -0.737902 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00656677 -0.726768 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0165234 -0.743272 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.690426 -0.508983 1.83812e-16 RAD 0.0555556 + txt002 + SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.767658 -0.47411 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.749038 -0.489758 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER 0.744501 -0.467528 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774562 -0.469146 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751405 -0.462564 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.762845 -0.47983 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.779098 -0.491377 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER 0.767382 -0.502061 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760478 -0.507025 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.703418 -0.481931 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.716184 -0.491475 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.694124 -0.500827 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682902 -0.46889 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.673608 -0.487786 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675152 -0.465393 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704962 -0.459538 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697211 -0.456041 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.717727 -0.469082 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.714226 -0.418941 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.724842 -0.44101 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704751 -0.43889 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.692283 -0.414215 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682808 -0.434163 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680957 -0.431557 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712374 -0.416335 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701048 -0.433677 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.722991 -0.438403 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.773394 -0.506594 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER 0.764807 -0.507924 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755462 -0.491321 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759287 -0.514012 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.741355 -0.49874 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.736593 -0.522762 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.768632 -0.530616 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745938 -0.539365 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760045 -0.531946 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.709346 -0.447385 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721188 -0.46231 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.703286 -0.447429 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.685816 -0.451907 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.679757 -0.451951 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674129 -0.471354 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.703718 -0.466788 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.692031 -0.486235 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.71556 -0.481713 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.693658 -0.538818 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.708875 -0.534075 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.691194 -0.517905 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669969 -0.544274 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.667505 -0.523361 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661495 -0.544988 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687649 -0.560445 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.679176 -0.561158 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.702866 -0.555702 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.767402 -0.560084 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755145 -0.53997 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760285 -0.543179 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755725 -0.577608 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER 0.748608 -0.560703 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER 0.731791 -0.575017 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER 0.750585 -0.574398 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.726651 -0.571808 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER 0.738328 -0.554284 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.682851 -0.601808 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700216 -0.58454 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680568 -0.579842 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660588 -0.59895 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.658304 -0.576984 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65569 -0.578824 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680237 -0.603648 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675339 -0.583522 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697602 -0.58638 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.687731 -0.573364 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.703871 -0.56324 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682033 -0.571303 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.667055 -0.561258 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661356 -0.559196 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.662518 -0.539027 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688893 -0.553195 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.684356 -0.530964 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705033 -0.543071 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.626214 -0.316595 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624401 -0.335868 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606941 -0.318408 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.631217 -0.294133 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.611945 -0.295946 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634407 -0.290942 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648676 -0.311592 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651867 -0.308402 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.646863 -0.330864 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.623201 -0.403702 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.635431 -0.385946 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62031 -0.401066 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.598766 -0.401947 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.595876 -0.399312 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586561 -0.382437 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.613886 -0.386827 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.601681 -0.367317 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626116 -0.369071 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.539107 -0.319608 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541743 -0.322499 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.556863 -0.307378 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555982 -0.328923 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.573738 -0.316693 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575492 -0.341128 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.540862 -0.344043 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560372 -0.356248 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.543497 -0.346933 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.637402 -0.248969 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.646193 -0.271807 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625088 -0.268363 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617105 -0.241698 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604791 -0.261092 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605598 -0.257264 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638209 -0.245142 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626702 -0.260708 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647 -0.267979 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.550934 -0.258608 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.613271 -0.265398 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627912 -0.281225 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610787 -0.26842 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.589337 -0.270625 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586853 -0.273647 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.580045 -0.291679 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606463 -0.283431 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.59717 -0.304484 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621104 -0.299257 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.69384 -0.305407 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674446 -0.317721 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671002 -0.296616 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697667 -0.3046 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.67483 -0.295809 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682101 -0.316107 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701111 -0.325704 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.685545 -0.337211 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681717 -0.338018 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.677411 -0.329538 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674389 -0.332022 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661584 -0.314897 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659378 -0.336346 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643552 -0.321705 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638325 -0.345639 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.672184 -0.353472 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65113 -0.362764 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669162 -0.355956 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684201 -0.391875 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.672915 -0.269894 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666987 -0.293281 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649528 -0.275822 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665573 -0.259777 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642185 -0.265705 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.652302 -0.273047 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683032 -0.277236 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669762 -0.290507 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677104 -0.300624 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.663448 -0.328536 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639482 -0.329516 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.654603 -0.314396 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680322 -0.33785 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671477 -0.32371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.673232 -0.348145 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665202 -0.35297 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.658111 -0.363265 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.641237 -0.353951 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.614273 -0.279361 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628413 -0.288206 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.613293 -0.303327 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.589839 -0.277607 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588858 -0.301572 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.579544 -0.284698 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604959 -0.262487 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.594664 -0.269578 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.619099 -0.271332 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.621535 -0.258061 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634468 -0.275921 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616678 -0.264057 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.597842 -0.261795 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.592985 -0.267791 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587082 -0.28339 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.615632 -0.27366 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604872 -0.295255 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628565 -0.29152 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.550934 -0.258608 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.55307 -0.320611 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57665 -0.325005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563845 -0.30788 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535038 -0.327419 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.545813 -0.314688 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.540585 -0.338621 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547843 -0.344544 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.553391 -0.355747 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571423 -0.348938 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684748 -0.321274 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678752 -0.326131 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666888 -0.308341 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669149 -0.327177 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651289 -0.314244 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647554 -0.337937 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681014 -0.344967 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659419 -0.355727 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675018 -0.349824 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.622198 -0.389739 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.63493 -0.378964 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617804 -0.366159 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.598265 -0.394966 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593871 -0.371386 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587062 -0.389418 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61539 -0.407771 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604188 -0.402224 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628121 -0.396997 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684201 -0.391875 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.633406 -0.663938 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626429 -0.65892 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617928 -0.64522 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617206 -0.673539 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.601728 -0.654822 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.59403 -0.678123 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625707 -0.687239 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602531 -0.691822 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61873 -0.682221 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.63767 -0.608008 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER 0.620102 -0.623239 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.613891 -0.601637 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER 0.640545 -0.604555 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616766 -0.598184 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625852 -0.616334 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.646756 -0.626157 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.632063 -0.637936 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER 0.629188 -0.641389 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.601562 -0.580238 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605914 -0.59781 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587563 -0.581665 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.581295 -0.581346 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER 0.567297 -0.582773 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.565381 -0.600026 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.599646 -0.597491 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER 0.583732 -0.616171 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603999 -0.615063 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.547376 -0.70016 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER 0.564621 -0.690564 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546319 -0.676324 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER 0.524351 -0.703396 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523294 -0.679561 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER 0.518571 -0.697037 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542652 -0.717636 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536873 -0.711276 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER 0.559898 -0.70804 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.516313 -0.60809 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538029 -0.616221 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.524375 -0.60089 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495298 -0.616065 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER 0.50336 -0.608865 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495999 -0.632172 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508952 -0.631397 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.509653 -0.647504 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530668 -0.639529 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.466887 -0.67091 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490138 -0.671107 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480853 -0.650637 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46246 -0.670147 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER 0.476425 -0.649874 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481283 -0.669581 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471745 -0.690617 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490567 -0.690052 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.494995 -0.690815 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.597914 -0.729812 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602084 -0.70632 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER 0.592661 -0.711617 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER 0.574755 -0.738161 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569503 -0.719965 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555767 -0.723017 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER 0.584178 -0.732864 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.565189 -0.71772 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588348 -0.709372 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.511567 -0.712906 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529503 -0.710453 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.507717 -0.699372 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.505104 -0.693665 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501254 -0.680131 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.516576 -0.671972 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER 0.526889 -0.704747 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538362 -0.683054 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.544826 -0.702295 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.605761 -0.658095 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER 0.58746 -0.643855 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607672 -0.647455 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609975 -0.680174 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.611885 -0.669535 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER 0.595887 -0.688013 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER 0.589763 -0.676573 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575674 -0.684413 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571461 -0.662334 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.518106 -0.424703 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522721 -0.437548 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.505261 -0.420089 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497031 -0.428319 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484186 -0.423704 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48057 -0.44478 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51449 -0.445778 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498029 -0.462239 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519105 -0.458623 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.560583 -0.44013 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.452233 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.53742 -0.431578 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560583 -0.44013 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.53742 -0.431578 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.452233 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566118 -0.460785 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548489 -0.472887 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548489 -0.472887 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.502679 -0.382226 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.511231 -0.405389 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.399854 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.482024 -0.376691 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.469922 -0.39432 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.469922 -0.39432 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.502679 -0.382226 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.399854 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.511231 -0.405389 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.427669 -0.446904 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.450155 -0.45293 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436486 -0.436486 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407609 -0.454311 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416426 -0.443892 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410035 -0.467742 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.421278 -0.470754 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423704 -0.484186 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.443764 -0.47678 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.414851 -0.39469 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434147 -0.403906 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434147 -0.403906 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399731 -0.409811 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.419026 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403906 -0.434147 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399731 -0.409811 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403906 -0.434147 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.419026 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.378536 -0.488909 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.490576 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39432 -0.469922 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378536 -0.488909 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39432 -0.469922 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.490576 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384071 -0.509564 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405389 -0.511231 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405389 -0.511231 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.495905 -0.51514 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506323 -0.506323 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48988 -0.492654 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472055 -0.521531 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46603 -0.499045 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.458623 -0.519105 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488498 -0.5352 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475067 -0.532774 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498917 -0.526383 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.4539 -0.564273 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472887 -0.548489 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.542955 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433245 -0.558738 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.431578 -0.53742 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.431578 -0.53742 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4539 -0.564273 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.542955 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472887 -0.548489 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.548119 -0.527958 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538903 -0.508662 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538903 -0.508662 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532998 -0.543078 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.523783 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508662 -0.538903 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532998 -0.543078 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508662 -0.538903 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.523783 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.316595 -0.626214 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335868 -0.624401 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318408 -0.606941 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294133 -0.631217 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295946 -0.611945 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290942 -0.634407 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.311592 -0.648676 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308402 -0.651867 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330864 -0.646863 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.405245 -0.601704 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402224 -0.604188 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389418 -0.587062 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387213 -0.608512 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.371386 -0.593871 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366159 -0.617804 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400018 -0.625637 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378964 -0.63493 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396997 -0.628121 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.341105 -0.537564 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355747 -0.553391 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338621 -0.540585 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317172 -0.542791 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.314688 -0.545813 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30788 -0.563845 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334297 -0.555596 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325005 -0.57665 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.348938 -0.571423 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.245336 -0.623429 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268271 -0.624736 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.260997 -0.604627 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2416 -0.624589 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257262 -0.605787 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2608 -0.627055 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248874 -0.644697 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268073 -0.647163 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271809 -0.646004 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.278768 -0.530773 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.266942 -0.591774 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269578 -0.594664 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.284698 -0.579544 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.283817 -0.601088 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301572 -0.588858 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.303327 -0.613293 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268696 -0.616209 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288206 -0.628413 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271332 -0.619099 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.31938 -0.697473 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338182 -0.681812 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318074 -0.674538 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298112 -0.693935 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.296805 -0.671 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295646 -0.674736 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31822 -0.701209 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315754 -0.682009 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337022 -0.685547 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.351035 -0.675867 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.363265 -0.658111 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.348145 -0.673232 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3266 -0.674113 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32371 -0.671477 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.314396 -0.654603 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.341721 -0.658993 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329516 -0.639482 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.353951 -0.641237 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.412036 -0.664041 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.639472 -0.678928 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621631 -0.664108 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.629767 -0.661636 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634214 -0.696205 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624508 -0.678912 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER 0.611115 -0.698662 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626079 -0.698678 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602979 -0.701135 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER 0.608237 -0.683858 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.63057 -0.595495 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617371 -0.615286 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605919 -0.594239 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630343 -0.587782 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605692 -0.586526 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616917 -0.59986 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER 0.641795 -0.608828 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628369 -0.620906 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628595 -0.628619 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.631982 -0.640648 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62585 -0.64267 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER 0.614812 -0.625749 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616044 -0.647702 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER 0.598874 -0.632802 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593974 -0.656777 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627081 -0.664623 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605012 -0.673698 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.620949 -0.666645 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.563328 -0.73992 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.577348 -0.719679 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.559693 -0.720935 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539553 -0.739118 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535918 -0.720133 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529798 -0.718076 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.557208 -0.737863 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547453 -0.716821 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571228 -0.717623 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.554862 -0.690713 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570641 -0.682694 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER 0.552739 -0.667813 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531333 -0.695235 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.52921 -0.672335 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523582 -0.691738 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549235 -0.710116 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541484 -0.706619 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER 0.565014 -0.702097 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.474542 -0.688647 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498226 -0.686417 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.485132 -0.666351 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46786 -0.684788 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER 0.47845 -0.662492 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484862 -0.678699 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480953 -0.704854 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497955 -0.698765 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504637 -0.702624 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.57563 -0.689897 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.585222 -0.673115 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575587 -0.693998 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.551213 -0.693509 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.55117 -0.69761 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536388 -0.680339 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560848 -0.672626 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546023 -0.659456 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57044 -0.655844 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.478525 -0.627785 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484234 -0.630799 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497935 -0.615951 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493066 -0.637394 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.512476 -0.62556 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.513317 -0.650016 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER 0.479365 -0.652241 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499616 -0.664864 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.485075 -0.655255 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.570049 -0.602201 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582252 -0.615021 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560414 -0.623084 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549372 -0.590095 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539737 -0.610978 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER 0.540899 -0.590808 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571211 -0.582032 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562738 -0.582745 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER 0.583414 -0.594852 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.269894 -0.672915 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.293281 -0.666987 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275822 -0.649528 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259777 -0.665573 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.265705 -0.642185 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273047 -0.652302 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.277236 -0.683032 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290507 -0.669762 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.300624 -0.677104 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.350033 -0.661904 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.362764 -0.65113 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345639 -0.638325 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.326099 -0.667131 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321705 -0.643552 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.314897 -0.661584 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.343224 -0.679937 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332022 -0.674389 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355956 -0.669162 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.280905 -0.592776 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304484 -0.59717 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291679 -0.580045 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262872 -0.599585 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273647 -0.586853 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26842 -0.610787 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275678 -0.61671 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281225 -0.627912 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299257 -0.621104 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.256944 -0.602632 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26347 -0.606749 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273158 -0.587686 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27313 -0.606658 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.289344 -0.591712 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295841 -0.614801 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263442 -0.62572 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286153 -0.633864 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269968 -0.629838 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.278768 -0.530773 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.342108 -0.551527 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356248 -0.560372 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.341128 -0.575492 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317673 -0.549772 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316693 -0.573738 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307378 -0.556863 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332793 -0.534652 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322499 -0.541743 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.346933 -0.543497 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340177 -0.685865 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355123 -0.669651 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33606 -0.679339 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317089 -0.679367 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312971 -0.672841 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308945 -0.656656 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336151 -0.669679 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328008 -0.646968 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351097 -0.653465 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.391282 -0.600701 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367317 -0.601681 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382437 -0.586561 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408157 -0.610016 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399312 -0.595876 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401066 -0.62031 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393037 -0.625136 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385946 -0.635431 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369071 -0.626116 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.412036 -0.664041 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.443014 -0.422853 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449156 -0.418916 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.463412 -0.433171 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435021 -0.445101 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455419 -0.455419 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433171 -0.463412 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420766 -0.430846 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418916 -0.449156 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426908 -0.426908 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.383576 -0.43509 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40305 -0.440308 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.406245 -0.428383 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.380381 -0.447015 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40305 -0.440308 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396659 -0.464158 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.377186 -0.45894 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393464 -0.476083 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396659 -0.464158 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.45894 -0.377186 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.476083 -0.393464 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.464158 -0.396659 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.43509 -0.383576 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440308 -0.40305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428383 -0.406245 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447015 -0.380381 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440308 -0.40305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.464158 -0.396659 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.512375 -0.453047 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493241 -0.465554 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497443 -0.44229 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531849 -0.447829 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.516916 -0.437072 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532187 -0.455118 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527647 -0.471093 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527985 -0.478381 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508512 -0.483599 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.538038 -0.404771 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532513 -0.427756 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.515053 -0.410297 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529309 -0.396041 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506323 -0.401567 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.515053 -0.410297 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546768 -0.4135 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532513 -0.427756 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541242 -0.436486 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.565623 -0.483869 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.54615 -0.478651 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549345 -0.466726 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562428 -0.495794 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.54615 -0.478651 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539759 -0.502501 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.559233 -0.507719 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536564 -0.514426 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539759 -0.502501 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.461599 -0.535539 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478381 -0.527985 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455118 -0.532187 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.443553 -0.520267 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.437072 -0.516916 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44229 -0.497443 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.466817 -0.516065 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.465554 -0.493241 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.483599 -0.508512 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.507719 -0.559233 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.514426 -0.536564 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.502501 -0.539759 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.483869 -0.565623 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478651 -0.54615 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.466726 -0.549345 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495794 -0.562428 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478651 -0.54615 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.502501 -0.539759 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.404771 -0.538038 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.427756 -0.532513 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410297 -0.515053 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396041 -0.529309 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401567 -0.506323 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410297 -0.515053 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4135 -0.546768 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.427756 -0.532513 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436486 -0.541242 -0.222222 RAD 0.00617284 + txt002 + +END_SCENE diff --git a/examples/parallel_for/tachyon/dat/balls3.dat b/examples/parallel_for/tachyon/dat/balls3.dat new file mode 100644 index 0000000..2837425 --- /dev/null +++ b/examples/parallel_for/tachyon/dat/balls3.dat @@ -0,0 +1,14804 @@ +BEGIN_SCENE + OUTFILE /dev/null + RESOLUTION 1024 768 + VERBOSE 0 + +CAMERA + ZOOM 1.20711 +ASPECTRATIO 1.0 + ANTIALIASING 0 + RAYDEPTH 5 + CENTER 2.1 1.3 1.7 + VIEWDIR -0.700389 -0.433574 -0.566982 + UPDIR -0.482085 -0.298433 0.82373 + +END_CAMERA + +BACKGROUND 0.078 0.361 0.753 + +LIGHT CENTER 4 3 2 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 1 -4 4 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER -3 1 5 RAD 0.002 COLOR 0.5 0.5 0.5 + +TEXDEF txt001 AMBIENT 0.2 DIFFUSE 0.8 SPECULAR 0 OPACITY 1 +PHONG PLASTIC 0 PHONG_SIZE 100000 + COLOR 1 0.75 0.33 + TEXFUNC 0 + +TRI + V0 12 12 -0.5 V1 -12 -12 -0.5 V2 12 -12 -0.5 + txt001 +TRI + V0 12 12 -0.5 V1 -12 12 -0.5 V2 -12 -12 -0.5 + txt001 +TEXDEF txt002 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 +PHONG PLASTIC 0.5 PHONG_SIZE 45.2776 + COLOR 1 0.9 0.7 + TEXFUNC 0 + + SPHERE CENTER 0 0 0 RAD 0.5 + txt002 + SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER 0.481689 0.481689 0.57904 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475329 0.45787 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45787 0.475329 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.477074 0.494534 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.453255 0.488174 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4661 0.48356 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.494534 0.477074 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48356 0.4661 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488174 0.453255 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.47044 0.419664 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447954 0.425689 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.468014 0.433095 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484109 0.40322 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481683 0.416651 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475292 0.392801 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.464049 0.395814 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455233 0.385395 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.441563 0.401839 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.419664 0.47044 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433095 0.468014 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.425689 0.447954 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.395814 0.464049 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401839 0.441563 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385395 0.455233 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40322 0.484109 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.392801 0.475292 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416651 0.481683 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.441197 0.503434 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452601 0.483752 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434161 0.494577 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418001 0.501466 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410965 0.492609 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.406209 0.479816 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436441 0.490641 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42465 0.46899 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447846 0.470958 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.36376 0.497028 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383056 0.487812 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383056 0.487812 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34864 0.481907 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352815 0.457572 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34864 0.481907 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352815 0.457572 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.376578 0.444814 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399064 0.438789 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385395 0.455233 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356518 0.437408 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.365335 0.447826 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.358944 0.423976 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.370187 0.420964 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372614 0.407532 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.392673 0.414939 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.503434 0.441197 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.494577 0.434161 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.483752 0.452601 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490641 0.436441 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.470958 0.447846 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46899 0.42465 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501466 0.418001 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.479816 0.406209 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.492609 0.410965 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.444814 0.376578 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455233 0.385395 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.438789 0.399064 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420964 0.370187 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.414939 0.392673 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407532 0.372614 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.437408 0.356518 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423976 0.358944 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447826 0.365335 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.497028 0.36376 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.487812 0.383056 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.487812 0.383056 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481907 0.34864 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457572 0.352815 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481907 0.34864 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457572 0.352815 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.492085 0.33495 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488469 0.313874 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471009 0.331334 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495701 0.356025 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.474625 0.352409 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495701 0.356025 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51316 0.338566 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51316 0.338566 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.509544 0.31749 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.40568 0.315605 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403931 0.312107 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419383 0.329161 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426095 0.30867 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.439797 0.322225 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.444759 0.298235 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410643 0.291616 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429307 0.281181 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408893 0.288117 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.440864 0.389015 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457301 0.37895 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.451857 0.367697 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418755 0.378463 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429748 0.357145 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.413085 0.357845 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4242 0.389715 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418529 0.369098 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440637 0.37965 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.546497 0.347572 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532117 0.331508 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522481 0.352406 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.543964 0.350552 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519948 0.355387 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.52705 0.337468 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5536 0.329654 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536686 0.31657 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.53922 0.313589 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.48474 0.389488 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495668 0.369235 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.477004 0.379669 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.461764 0.388188 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.454027 0.37837 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449715 0.366636 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480429 0.377754 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46838 0.356202 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.491357 0.357501 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.518259 0.314219 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519922 0.310678 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504895 0.328108 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.49768 0.307788 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484316 0.321677 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478764 0.297816 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER 0.512708 0.290358 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493791 0.280387 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51437 0.286818 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.539811 0.274878 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.520873 0.290418 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.533373 0.290264 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.537674 0.255722 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531235 0.271108 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER 0.516598 0.252106 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.525174 0.255876 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504099 0.25226 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506236 0.271416 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.50716 0.230587 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51153 0.24936 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499694 0.253381 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484125 0.222248 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER 0.476659 0.245042 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46546 0.232683 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495961 0.218227 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.477296 0.228661 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER 0.500331 0.237 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.455172 0.217147 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472226 0.232599 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45115 0.228983 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433942 0.226031 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429921 0.237867 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429767 0.250367 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455018 0.229647 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.450842 0.253983 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472072 0.245099 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.33495 0.492085 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331334 0.471009 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313874 0.488469 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338566 0.51316 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31749 0.509544 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338566 0.51316 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356025 0.495701 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356025 0.495701 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352409 0.474625 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389015 0.440864 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367697 0.451857 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37895 0.457301 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389715 0.4242 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37965 0.440637 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369098 0.418529 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378463 0.418755 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357845 0.413085 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357145 0.429748 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.315605 0.40568 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329161 0.419383 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312107 0.403931 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291616 0.410643 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288117 0.408893 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281181 0.429307 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30867 0.426095 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298235 0.444759 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322225 0.439797 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.274878 0.539811 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290264 0.533373 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290418 0.520873 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.255876 0.525174 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271416 0.506236 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.25226 0.504099 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.255722 0.537674 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.252106 0.516598 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271108 0.531235 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.217147 0.455172 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228983 0.45115 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.232599 0.472226 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229647 0.455018 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245099 0.472072 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253983 0.450842 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.226031 0.433942 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250367 0.429767 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237867 0.429921 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.230587 0.50716 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253381 0.499694 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER 0.24936 0.51153 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218227 0.495961 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237 0.500331 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228661 0.477296 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER 0.222248 0.484125 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER 0.232683 0.46546 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245042 0.476659 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.347572 0.546497 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352406 0.522481 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331508 0.532117 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329654 0.5536 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313589 0.53922 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31657 0.536686 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350552 0.543964 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337468 0.52705 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355387 0.519948 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.314219 0.518259 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328108 0.504895 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310678 0.519922 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290358 0.512708 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286818 0.51437 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280387 0.493791 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307788 0.49768 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297816 0.478764 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321677 0.484316 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389488 0.48474 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379669 0.477004 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369235 0.495668 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.377754 0.480429 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357501 0.491357 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356202 0.46838 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388188 0.461764 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366636 0.449715 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37837 0.454027 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.264242 0.467193 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER 0.272442 0.447086 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253384 0.459832 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2424 0.46672 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.231541 0.459359 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228758 0.446141 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261459 0.453974 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247817 0.433396 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269659 0.433868 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.319874 0.420236 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.303021 0.407886 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.296625 0.428474 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318692 0.420256 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295442 0.428494 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.300656 0.407926 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325088 0.399668 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307053 0.387338 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308235 0.387318 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.263032 0.459076 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.270029 0.436804 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247378 0.440021 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.246239 0.472047 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230585 0.452992 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236443 0.462746 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26889 0.468829 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259094 0.459528 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275887 0.446557 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.174744 0.447688 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.197172 0.437457 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.1895 0.447523 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156968 0.436708 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171724 0.436544 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161621 0.415499 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164641 0.426642 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.169293 0.405432 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187069 0.416412 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.177682 0.45215 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.190087 0.449636 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200611 0.44299 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER 0.169628 0.432153 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER 0.192556 0.422992 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173978 0.409641 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159104 0.438799 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.163454 0.416288 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171508 0.436286 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.13761 0.368692 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.158434 0.366998 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153102 0.387887 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138607 0.369329 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER 0.154099 0.388523 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160429 0.36827 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER 0.14394 0.34844 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165761 0.347381 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164764 0.346745 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.237348 0.393812 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251829 0.390976 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234368 0.408432 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.213518 0.387445 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER 0.210538 0.402066 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.204169 0.378242 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23098 0.369989 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221631 0.360786 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245461 0.367152 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.209548 0.312342 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229235 0.324887 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209827 0.337 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188347 0.31322 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188626 0.337878 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.186834 0.326643 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207755 0.301107 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206242 0.31453 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227442 0.313652 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.302145 0.344931 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297823 0.356827 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.289691 0.366251 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28356 0.334005 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271106 0.355325 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.260653 0.334975 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291692 0.324581 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268785 0.325551 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28737 0.336477 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.110567 0.524146 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER 0.126738 0.506465 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.112687 0.504055 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0863343 0.519988 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0884544 0.499897 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0782715 0.49815 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100385 0.522399 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0923218 0.500561 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER 0.116555 0.504718 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.177777 0.492047 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176681 0.473492 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159222 0.490951 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161488 0.493217 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.142932 0.492121 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144102 0.475831 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.178947 0.475757 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161561 0.458371 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177851 0.457202 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.167697 0.481967 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161561 0.458371 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144102 0.475831 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166528 0.498257 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.142932 0.492121 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159222 0.490951 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183987 0.480797 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176681 0.473492 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177851 0.457202 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0450372 0.477623 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.055591 0.475469 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696413 0.47788 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0465898 0.4591 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER 0.071194 0.459357 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0586963 0.438424 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325396 0.45669 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0446461 0.436013 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0430934 0.454536 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.10495 0.439381 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0911807 0.435691 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10864 0.45315 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128801 0.43299 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13249 0.44676 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138881 0.42291 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111341 0.415531 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.121421 0.40545 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0975713 0.411841 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.052284 0.366554 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0708393 0.36765 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0533799 0.385109 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511144 0.382844 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0522103 0.401399 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0685002 0.400229 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0685739 0.365384 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0859596 0.38277 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0871292 0.36648 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0493251 0.475575 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0725262 0.467381 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.06557 0.479825 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0339426 0.465141 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0501875 0.46939 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0417612 0.446512 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0408988 0.452697 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0487174 0.434069 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0640999 0.444504 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0623642 0.376634 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0859596 0.38277 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0685002 0.400229 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0460743 0.377803 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0522103 0.401399 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0533799 0.385109 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0635337 0.360344 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0708393 0.36765 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0871292 0.36648 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.125111 0.439381 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138881 0.435691 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.121421 0.45315 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101261 0.43299 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0975713 0.44676 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0911807 0.42291 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11872 0.415531 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10864 0.40545 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13249 0.411841 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0426858 0.273525 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.064638 0.265928 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0510334 0.281546 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0219434 0.26565 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.030291 0.273671 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0231533 0.250178 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0355481 0.250032 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.036758 0.23456 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0575003 0.242434 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.135677 0.265544 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138361 0.25778 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12224 0.275732 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.115003 0.26032 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101567 0.270508 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.097014 0.247334 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER 0.131123 0.242369 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER 0.113134 0.229382 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER 0.133808 0.234605 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0971427 0.330622 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER 0.109956 0.310023 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER 0.091905 0.317013 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0735708 0.329151 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0683331 0.315541 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0628126 0.30708 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0916222 0.322161 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.080864 0.30009 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.104436 0.301561 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0110117 0.257416 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00823377 0.253319 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0102865 0.269325 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0105502 0.249215 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.010748 0.261124 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00915679 0.236916 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0126029 0.233209 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00710408 0.22091 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00664257 0.229111 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0555846 0.315856 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0705987 0.309941 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0705297 0.296292 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.03617 0.301531 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511152 0.281968 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0317696 0.281291 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.036239 0.31518 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0318385 0.29494 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.051253 0.309265 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.025169 0.224935 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0281502 0.217281 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0288111 0.241399 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0443054 0.234341 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0479475 0.250805 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.066423 0.236092 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0436445 0.210223 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0657621 0.211974 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0466257 0.202569 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0335228 0.179527 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0567332 0.187058 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0385291 0.203632 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0167878 0.181593 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER 0.021794 0.205698 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0232631 0.191189 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0349919 0.165018 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0414672 0.174615 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0582023 0.172549 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0867911 0.147549 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101845 0.166573 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER 0.083121 0.161663 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0635354 0.151669 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0598652 0.165782 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0553337 0.174812 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822597 0.156579 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.074058 0.179722 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0973138 0.175603 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.133336 0.176775 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136161 0.192663 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.124499 0.199753 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.110965 0.167739 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102127 0.190718 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0914184 0.174592 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.122627 0.160649 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.103081 0.167502 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.125452 0.176537 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.467193 0.264242 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459832 0.253384 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447086 0.272442 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER 0.453974 0.261459 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433868 0.269659 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433396 0.247817 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46672 0.2424 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446141 0.228758 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459359 0.231541 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.459076 0.263032 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440021 0.247378 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436804 0.270029 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.468829 0.26889 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446557 0.275887 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459528 0.259094 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472047 0.246239 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER 0.462746 0.236443 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452992 0.230585 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.420236 0.319874 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428474 0.296625 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407886 0.303021 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399668 0.325088 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387318 0.308235 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387338 0.307053 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420256 0.318692 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407926 0.300656 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428494 0.295442 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.393812 0.237348 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408432 0.234368 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.390976 0.251829 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369989 0.23098 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367152 0.245461 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.360786 0.221631 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387445 0.213518 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378242 0.204169 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402066 0.210538 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.344931 0.302145 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366251 0.289691 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356827 0.297823 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324581 0.291692 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336477 0.28737 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325551 0.268785 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334005 0.28356 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334975 0.260653 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355325 0.271106 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.312342 0.209548 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337 0.209827 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324887 0.229235 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301107 0.207755 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313652 0.227442 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31453 0.206242 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31322 0.188347 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.326643 0.186834 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337878 0.188626 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.447688 0.174744 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447523 0.1895 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER 0.437457 0.197172 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426642 0.164641 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416412 0.187069 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405432 0.169293 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436708 0.156968 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER 0.415499 0.161621 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436544 0.171724 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.368692 0.13761 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387887 0.153102 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366998 0.158434 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34844 0.14394 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER 0.346745 0.164764 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347381 0.165761 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369329 0.138607 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36827 0.160429 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388523 0.154099 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.45215 0.177682 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44299 0.200611 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449636 0.190087 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER 0.438799 0.159104 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436286 0.171508 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416288 0.163454 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.432153 0.169628 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409641 0.173978 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.422992 0.192556 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.273525 0.0426858 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281546 0.0510334 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER 0.265928 0.064638 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250032 0.0355481 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242434 0.0575003 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23456 0.036758 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26565 0.0219434 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250178 0.0231533 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273671 0.030291 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.330622 0.0971427 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317013 0.091905 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310023 0.109956 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322161 0.0916222 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301561 0.104436 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30009 0.080864 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329151 0.0735708 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30708 0.0628126 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315541 0.0683331 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.265544 0.135677 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275732 0.12224 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.25778 0.138361 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242369 0.131123 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234605 0.133808 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229382 0.113134 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26032 0.115003 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247334 0.097014 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER 0.270508 0.101567 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.179527 0.0335228 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203632 0.0385291 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187058 0.0567332 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165018 0.0349919 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172549 0.0582023 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174615 0.0414672 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181593 0.0167878 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191189 0.0232631 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205698 0.021794 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.176775 0.133336 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.199753 0.124499 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.192663 0.136161 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160649 0.122627 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176537 0.125452 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167502 0.103081 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167739 0.110965 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174592 0.0914184 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.190718 0.102127 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.147549 0.0867911 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161663 0.083121 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166573 0.101845 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156579 0.0822597 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.175603 0.0973138 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179722 0.074058 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.151669 0.0635354 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174812 0.0553337 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165782 0.0598652 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER 0.257416 -0.0110117 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269325 0.0102865 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253319 0.00823377 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233209 -0.0126029 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229111 0.00664257 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22091 0.00710408 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249215 -0.0105502 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236916 0.00915679 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261124 0.010748 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.224935 0.025169 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241399 0.0288111 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217281 0.0281502 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.210223 0.0436445 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.202569 0.0466257 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211974 0.0657621 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234341 0.0443054 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236092 0.066423 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250805 0.0479475 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.315856 0.0555846 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.296292 0.0705297 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.309941 0.0705987 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31518 0.036239 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.309265 0.051253 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29494 0.0318385 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301531 0.03617 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281291 0.0317696 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281968 0.0511152 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.524146 0.110567 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504055 0.112687 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506465 0.126738 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522399 0.100385 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504718 0.116555 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER 0.500561 0.0923218 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519988 0.0863343 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER 0.49815 0.0782715 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499897 0.0884544 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.481967 0.167697 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475831 0.144102 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.458371 0.161561 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480797 0.183987 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457202 0.177851 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.473492 0.176681 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498257 0.166528 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490951 0.159222 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.492121 0.142932 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.492047 0.177777 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490951 0.159222 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.473492 0.176681 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475757 0.178947 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.457202 0.177851 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.458371 0.161561 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493217 0.161488 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475831 0.144102 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.492121 0.142932 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.475575 0.0493251 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER 0.479825 0.06557 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER 0.467381 0.0725262 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452697 0.0408988 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER 0.444504 0.0640999 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434069 0.0487174 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.465141 0.0339426 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446512 0.0417612 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46939 0.0501875 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.439381 0.125111 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45315 0.121421 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435691 0.138881 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.415531 0.11872 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.411841 0.13249 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40545 0.10864 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.43299 0.101261 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42291 0.0911807 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44676 0.0975713 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.376634 0.0623642 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400229 0.0685002 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38277 0.0859596 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.360344 0.0635337 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36648 0.0871292 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36765 0.0708393 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.377803 0.0460743 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385109 0.0533799 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401399 0.0522103 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.477623 0.0450372 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.47788 0.0696413 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475469 0.055591 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45669 0.0325396 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.454536 0.0430934 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436013 0.0446461 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4591 0.0465898 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER 0.438424 0.0586963 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.459357 0.071194 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.366554 0.052284 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385109 0.0533799 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36765 0.0708393 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.365384 0.0685739 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36648 0.0871292 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38277 0.0859596 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382844 0.0511144 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400229 0.0685002 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401399 0.0522103 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.41922 0.125111 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40545 0.121421 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42291 0.138881 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44307 0.11872 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44676 0.13249 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45315 0.10864 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.425611 0.101261 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435691 0.0911807 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.411841 0.0975713 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.822021 0.302088 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.821938 0.282758 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.802598 0.298094 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER 0.824119 0.32499 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.804695 0.320997 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER 0.826132 0.328563 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843459 0.309654 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845472 0.313227 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843375 0.290324 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.785699 0.218449 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.802677 0.22345 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER 0.778718 0.223304 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770818 0.236351 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER 0.763837 0.241205 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER 0.772915 0.259253 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER 0.794777 0.236497 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.796874 0.2594 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER 0.811756 0.241498 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.741263 0.325175 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER 0.747715 0.32493 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.765112 0.325981 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745704 0.305466 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.769553 0.306272 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER 0.756597 0.285513 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.728307 0.304415 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7392 0.284462 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.734759 0.304171 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.851488 0.360404 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853509 0.335865 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.832518 0.347059 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER 0.836826 0.370319 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817857 0.356973 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.824185 0.355695 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857816 0.359125 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845176 0.344501 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.859838 0.334587 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.768944 0.369945 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER 0.788341 0.356172 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER 0.780624 0.356171 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.747572 0.359113 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759252 0.34534 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745596 0.33451 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755289 0.359115 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER 0.753313 0.334511 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774685 0.345342 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.83071 0.340361 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.840365 0.325527 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.822249 0.341208 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER 0.807766 0.336425 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.799305 0.337272 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER 0.794477 0.317654 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER 0.825882 0.320744 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.812593 0.301973 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.835537 0.30591 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.891539 0.292033 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER 0.868678 0.28812 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.872763 0.305711 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER 0.897348 0.285824 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER 0.878572 0.299501 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.880296 0.275701 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER 0.893263 0.268233 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876212 0.25811 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER 0.870402 0.264319 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.87538 0.26204 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.87108 0.266856 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER 0.860805 0.280934 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857361 0.252905 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842785 0.271799 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.835041 0.248586 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER 0.867636 0.238827 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845317 0.234508 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER 0.863337 0.243643 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.860225 0.206363 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER 0.858689 0.230102 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER 0.854636 0.223536 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.839784 0.193863 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.834196 0.211035 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817808 0.205101 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843837 0.200429 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER 0.821861 0.211667 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842301 0.224168 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.61556 0.221097 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621702 0.225035 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.635958 0.210779 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607567 0.198849 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627965 0.188531 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605717 0.180539 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593312 0.213105 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591462 0.194794 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.599454 0.217042 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.556122 0.208861 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575596 0.203643 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.578791 0.215568 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.552927 0.196936 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575596 0.203643 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569205 0.179793 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549732 0.185011 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.56601 0.167868 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569205 0.179793 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.631486 0.266765 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648629 0.250487 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.636704 0.247291 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607636 0.260374 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.612854 0.240901 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600929 0.237705 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.619561 0.26357 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.612854 0.240901 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.636704 0.247291 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684921 0.190903 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665787 0.178397 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669989 0.201661 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704395 0.196121 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.689462 0.206879 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704733 0.188833 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700193 0.172858 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700531 0.165569 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681058 0.160351 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.710584 0.23918 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705059 0.216195 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687599 0.233654 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701855 0.24791 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678869 0.242384 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687599 0.233654 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.719314 0.23045 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705059 0.216195 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.713788 0.207465 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.738169 0.160081 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718696 0.165299 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721891 0.177224 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.734974 0.148156 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718696 0.165299 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712305 0.141449 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.731779 0.136231 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.70911 0.129524 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712305 0.141449 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.634145 0.108412 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.650927 0.115965 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627664 0.111763 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616099 0.123683 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609618 0.127034 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.614836 0.146508 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639363 0.127886 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.6381 0.15071 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656145 0.135439 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.680265 0.0847178 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.686972 0.107387 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675047 0.104191 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656415 0.0783272 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651197 0.0978007 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639272 0.0946054 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.66834 0.0815225 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651197 0.0978007 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675047 0.104191 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.577317 0.105912 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600302 0.111438 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582843 0.128897 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.568587 0.114642 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.574113 0.137627 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582843 0.128897 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586046 0.0971825 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600302 0.111438 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609032 0.102708 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.625955 0.411883 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630791 0.390369 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607547 0.396287 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61429 0.429805 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.595882 0.414208 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607462 0.426212 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.637535 0.423887 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630706 0.420295 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642371 0.402373 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.68332 0.389713 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68332 0.389713 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688854 0.369058 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.652948 0.344865 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.632683 0.357697 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651954 0.357326 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.658482 0.324211 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.657489 0.336672 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643752 0.316388 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639211 0.324581 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624481 0.316758 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.618946 0.337413 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.541008 0.410169 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548718 0.410472 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.564748 0.405866 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539866 0.388816 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563607 0.384513 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546435 0.367766 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523836 0.393422 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530405 0.372372 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531546 0.393725 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.555534 0.296626 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572202 0.297216 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.550163 0.307914 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549999 0.31728 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.544629 0.328569 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.561133 0.338525 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572037 0.306582 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.583171 0.327827 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588706 0.307172 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.501272 0.340934 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501272 0.340934 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506807 0.320279 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.58161 0.452905 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5989 0.436077 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586467 0.434777 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.55776 0.446515 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562617 0.428387 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5512 0.423296 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570193 0.447815 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563633 0.424596 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587483 0.430987 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.547099 0.396248 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569716 0.388263 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.557504 0.403175 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527447 0.387819 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.537852 0.394747 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530412 0.371406 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539659 0.372907 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542624 0.356494 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562276 0.364922 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.637209 0.41723 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642848 0.401533 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624734 0.418027 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.615976 0.414703 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603501 0.4155 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600381 0.39648 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634089 0.39821 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.618494 0.379986 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639728 0.382513 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.872345 0.34259 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.86421 0.32016 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848329 0.338969 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER 0.866833 0.351888 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842817 0.348268 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853186 0.338757 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882715 0.333079 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.869068 0.319948 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER 0.87458 0.310649 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.849036 0.291048 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER 0.826067 0.287867 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER 0.840755 0.304882 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER 0.868341 0.28406 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.86006 0.297894 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER 0.864676 0.273891 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853652 0.267046 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER 0.849987 0.256877 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.830683 0.263865 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.808673 0.346884 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER 0.82298 0.335792 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER 0.807762 0.322361 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.784265 0.34818 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER 0.783355 0.323657 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774164 0.338384 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.799483 0.361611 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.789382 0.351815 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.81379 0.350519 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.828769 0.350165 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838905 0.333232 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER 0.820583 0.347547 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER 0.805799 0.346984 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER 0.797614 0.344366 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.792966 0.32687 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER 0.824121 0.332668 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER 0.811288 0.312554 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER 0.834258 0.315735 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.753851 0.362219 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774086 0.350765 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76987 0.352319 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.735575 0.349134 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751594 0.339233 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737534 0.324595 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.739791 0.347581 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER 0.74175 0.323042 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760026 0.336127 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.756464 0.29233 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.779336 0.288514 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.765125 0.305929 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER 0.736973 0.285879 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745634 0.299478 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.740355 0.275612 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751185 0.268464 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.754567 0.258198 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774058 0.264649 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.885497 0.282313 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876946 0.281455 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER 0.867718 0.29787 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.871286 0.274699 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.853506 0.290257 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848523 0.266228 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.880514 0.258284 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857752 0.249813 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER 0.871963 0.257427 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.818054 0.21762 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER 0.83061 0.230661 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER 0.813612 0.241754 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.794089 0.212813 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER 0.789647 0.236948 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.78268 0.221048 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.811087 0.20172 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER 0.799677 0.209955 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.823642 0.214761 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.873186 0.21889 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.865588 0.240865 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER 0.866351 0.236437 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857005 0.203288 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.850171 0.220835 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.833227 0.20966 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.856242 0.207715 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER 0.832464 0.214088 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848644 0.22969 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.626191 0.448155 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634643 0.42519 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.614455 0.43276 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.60514 0.45191 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593404 0.436515 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.592541 0.4327 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625328 0.44434 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.612729 0.42513 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.63378 0.421375 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.68332 0.389713 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68332 0.389713 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660156 0.398265 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665691 0.37761 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688854 0.369058 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671225 0.356956 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.625435 0.399844 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627149 0.378352 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.60511 0.38905 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.619901 0.420499 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.599576 0.409705 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61608 0.419661 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.641939 0.409801 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638118 0.408963 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643653 0.388308 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.53788 0.433888 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.558395 0.423551 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.55574 0.426423 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.521526 0.42011 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539387 0.412646 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.525689 0.395996 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.524182 0.417238 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528344 0.393124 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.544697 0.406901 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.540802 0.399304 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.54453 0.400489 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563801 0.400119 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546337 0.37865 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569335 0.379464 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555599 0.35918 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527065 0.37902 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536327 0.359551 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530793 0.380205 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.501272 0.340934 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501272 0.340934 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517056 0.359921 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522591 0.339267 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506807 0.320279 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.528125 0.318612 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.594185 0.405974 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609969 0.394768 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593017 0.410332 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570335 0.399584 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569167 0.403942 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562269 0.381987 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587286 0.384019 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57922 0.366422 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.60307 0.372813 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.567308 0.314012 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587901 0.320398 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569787 0.336891 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546074 0.311485 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548554 0.334364 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.545434 0.315344 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.564188 0.294991 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563547 0.29885 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.584781 0.301377 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.659244 0.341809 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65787 0.345471 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645657 0.360383 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639592 0.33338 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626005 0.351955 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.618565 0.328614 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651804 0.318468 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630777 0.313702 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65043 0.32213 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.690652 0.219248 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.695267 0.206403 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677807 0.223862 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669577 0.215632 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656732 0.220246 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.653116 0.199171 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687036 0.198172 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.670575 0.181711 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.691651 0.185327 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.733129 0.203821 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.191718 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.709966 0.212373 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.733129 0.203821 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.709966 0.212373 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715501 0.191718 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.738664 0.183166 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721035 0.171063 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721035 0.171063 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.675225 0.261725 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683777 0.238562 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.244096 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65457 0.267259 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642468 0.249631 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642468 0.249631 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675225 0.261725 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663122 0.244096 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683777 0.238562 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.600215 0.197046 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.622701 0.191021 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609032 0.207465 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.580155 0.18964 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588972 0.200059 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582581 0.176209 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593824 0.173196 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.596251 0.159765 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61631 0.167171 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.587397 0.24926 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606693 0.240045 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606693 0.240045 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572277 0.23414 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.224924 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.576452 0.209804 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.572277 0.23414 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.576452 0.209804 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591572 0.224924 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.551082 0.155041 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.153374 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566866 0.174029 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.551082 0.155041 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566866 0.174029 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.5724 0.153374 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.556617 0.134387 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.577935 0.13272 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.577935 0.13272 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.668451 0.12881 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678869 0.137627 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.662426 0.151296 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644601 0.12242 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638576 0.144906 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.631169 0.124846 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661044 0.108751 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647613 0.111177 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671463 0.117567 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.626446 0.0796777 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645433 0.0954616 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.100996 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605791 0.0852121 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604124 0.10653 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604124 0.10653 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626446 0.0796777 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624779 0.100996 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645433 0.0954616 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.720665 0.115992 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.711449 0.135288 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.711449 0.135288 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705544 0.100872 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.120168 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681209 0.105047 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705544 0.100872 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681209 0.105047 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.696329 0.120168 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.852418 0.0955788 1.89979e-16 RAD 0.0555556 + txt002 + SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.937225 0.122151 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.916553 0.11086 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.915202 0.131874 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER 0.943281 0.12236 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER 0.921258 0.132084 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER 0.928665 0.111279 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER 0.944632 0.101346 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER 0.930016 0.0902645 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.92396 0.090055 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.873196 0.134634 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882112 0.117797 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.858152 0.11765 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.858315 0.152536 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.843271 0.135552 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.852349 0.1536 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882275 0.152682 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876309 0.153747 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.89119 0.135845 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.890926 0.182656 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.897331 0.159019 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.876622 0.167676 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.871561 0.188412 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857256 0.173431 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.8586 0.17053 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.89227 0.179755 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.87931 0.161874 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.898675 0.156118 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.930963 0.0752104 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER 0.924191 0.0806562 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER 0.915684 0.0941344 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.914568 0.0655041 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.899289 0.0844281 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.891402 0.0612436 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.923076 0.0520258 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER 0.89991 0.0477654 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER 0.916304 0.0574717 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.875744 0.141535 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.88655 0.129819 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.868763 0.146389 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.852347 0.136371 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.845366 0.141225 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.839756 0.119492 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.870135 0.119801 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.857544 0.102922 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.880941 0.108085 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.842832 0.0523913 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.86055 0.0593957 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.842434 0.0750766 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.819888 0.0484547 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.81949 0.07114 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.814662 0.0515226 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.838004 0.0327739 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.832778 0.0358417 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.855722 0.0397783 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.920407 0.0359958 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER 0.912106 0.0588574 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.915603 0.0511067 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER 0.905363 0.0190117 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER 0.900559 0.0341227 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.882018 0.0248894 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.901866 0.0267625 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.878521 0.0326401 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER 0.893565 0.0496241 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.825102 0.00436945 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.84533 0.018173 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.823964 0.025051 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.806642 0.0125791 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.805505 0.0332607 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.808411 0.0345923 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.828008 0.00570109 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.829777 0.0277143 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.848237 0.0195047 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.840284 0.0454909 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.856111 0.0473735 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.831823 0.0463379 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.825856 0.0646197 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.817395 0.0654667 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.827255 0.0856311 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.850144 0.0656554 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.851543 0.0866667 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.865971 0.0675379 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.762259 -0.0417568 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759495 -0.0345526 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.748937 -0.0216407 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743089 -0.051231 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.729767 -0.0311149 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721155 -0.053501 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.753646 -0.0641429 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.731712 -0.0664129 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.750882 -0.0569387 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.782939 0.0179281 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.782939 0.0179281 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.788473 -0.00272662 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.736829 0.0454452 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.742467 0.0297485 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.724354 0.046242 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715595 0.0429182 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.70312 0.043715 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7 0.0246945 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.733709 0.0264247 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718114 0.00820099 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.739347 0.010728 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.669983 -0.0708196 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.690113 -0.0618185 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671462 -0.0467378 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648644 -0.0721997 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.650123 -0.0481178 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647436 -0.0645786 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.667296 -0.0872804 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666087 -0.0796593 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687426 -0.0782793 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.646718 0.0244627 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669336 0.016478 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.657124 0.0313903 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627066 0.0160343 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.637471 0.022962 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630031 -0.000378614 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639278 0.00112207 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642244 -0.0152909 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661896 -0.00686255 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.600892 -0.0308513 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600892 -0.0308513 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606426 -0.051506 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.730141 -0.101422 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.736701 -0.0782041 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.725284 -0.0832945 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.706291 -0.107813 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701434 -0.0896851 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.689001 -0.0909853 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.717709 -0.102723 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700418 -0.0858949 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.724268 -0.0795043 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.655153 -0.0751594 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671821 -0.0745692 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649783 -0.0638711 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649619 -0.0545047 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644249 -0.0432164 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660752 -0.0332597 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671657 -0.0652028 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682791 -0.0439578 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688325 -0.0646126 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.752567 -0.0269197 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.732303 -0.014088 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751574 -0.0144587 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.758102 -0.0475745 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.757108 -0.0351134 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743371 -0.0553974 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.73883 -0.0472037 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7241 -0.0550267 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718566 -0.0343719 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.770032 -0.0684873 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759394 -0.0481266 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.762305 -0.0507391 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.756497 -0.0850422 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.74877 -0.067294 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.732325 -0.0812364 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.753586 -0.0824297 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.729413 -0.0786239 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.742948 -0.062069 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.782939 0.0179281 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.782939 0.0179281 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759776 0.02648 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.76531 0.0058253 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.788473 -0.00272662 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.770845 -0.0148294 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.758864 -0.0299763 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.757489 -0.0263144 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745277 -0.0114021 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.739212 -0.0384047 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.725625 -0.0198304 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718185 -0.043171 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751424 -0.0533169 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.730397 -0.0580833 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.750049 -0.0496549 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.675276 -0.106805 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.694308 -0.091423 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.673094 -0.0875713 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.655278 -0.0992356 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.653095 -0.0800016 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65431 -0.0762835 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.676491 -0.103087 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675524 -0.0801352 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.695522 -0.0877049 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.666927 -0.0577732 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.68752 -0.0513875 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669407 -0.034894 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645694 -0.0603001 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648173 -0.0374209 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645053 -0.0564414 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663807 -0.0767937 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663167 -0.072935 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.6844 -0.070408 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.600892 -0.0308513 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.600892 -0.0308513 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616676 -0.0118635 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62221 -0.0325183 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606426 -0.051506 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627745 -0.053173 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.717566 -0.0544915 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.725632 -0.0368947 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.718734 -0.0588496 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.693716 -0.0608821 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.694884 -0.0652402 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677932 -0.0496759 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700615 -0.0389272 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.684831 -0.027721 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.708681 -0.0213304 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.640422 0.0275193 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644149 0.0287044 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.66342 0.0283337 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.645956 0.00686453 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.668955 0.00767898 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.655218 -0.012605 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626685 0.00723527 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.635947 -0.0122343 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630413 0.00842045 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.725055 0.0280589 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.726768 0.00656677 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.70473 0.0172649 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.71952 0.0487136 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.699195 0.0379196 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.715699 0.0478762 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.741558 0.0380155 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.737738 0.0371781 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743272 0.0165234 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.302088 0.822021 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298094 0.802598 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282758 0.821938 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.309654 0.843459 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290324 0.843375 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313227 0.845472 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32499 0.824119 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328563 0.826132 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320997 0.804695 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.325175 0.741263 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325981 0.765112 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32493 0.747715 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304415 0.728307 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304171 0.734759 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER 0.284462 0.7392 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305466 0.745704 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285513 0.756597 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306272 0.769553 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.218449 0.785699 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223304 0.778718 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22345 0.802677 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236497 0.794777 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241498 0.811756 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2594 0.796874 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236351 0.770818 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259253 0.772915 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241205 0.763837 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.292033 0.891539 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305711 0.872763 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28812 0.868678 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268233 0.893263 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER 0.264319 0.870402 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.25811 0.876212 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285824 0.897348 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275701 0.880296 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299501 0.878572 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.206363 0.860225 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223536 0.854636 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230102 0.858689 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200429 0.843837 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224168 0.842301 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211667 0.821861 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193863 0.839784 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205101 0.817808 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211035 0.834196 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.26204 0.87538 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280934 0.860805 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266856 0.87108 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238827 0.867636 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.243643 0.863337 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234508 0.845317 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER 0.252905 0.857361 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248586 0.835041 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271799 0.842785 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.360404 0.851488 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347059 0.832518 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335865 0.853509 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359125 0.857816 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334587 0.859838 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.344501 0.845176 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.370319 0.836826 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355695 0.824185 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356973 0.817857 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340361 0.83071 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.341208 0.822249 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325527 0.840365 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320744 0.825882 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30591 0.835537 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301973 0.812593 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336425 0.807766 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317654 0.794477 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337272 0.799305 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.369945 0.768944 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356171 0.780624 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356172 0.788341 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359115 0.755289 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345342 0.774685 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334511 0.753313 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359113 0.747572 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33451 0.745596 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34534 0.759252 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.411883 0.625955 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396287 0.607547 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.390369 0.630791 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423887 0.637535 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402373 0.642371 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420295 0.630706 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429805 0.61429 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426212 0.607462 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.414208 0.595882 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.344865 0.652948 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357326 0.651954 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.357697 0.632683 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324581 0.639211 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337413 0.618946 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316758 0.624481 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324211 0.658482 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316388 0.643752 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336672 0.657489 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389713 0.68332 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369058 0.688854 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389713 0.68332 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.452905 0.58161 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434777 0.586467 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436077 0.5989 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447815 0.570193 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.430987 0.587483 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.424596 0.563633 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.446515 0.55776 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423296 0.5512 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428387 0.562617 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.41723 0.637209 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418027 0.624734 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401533 0.642848 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39821 0.634089 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382513 0.639728 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379986 0.618494 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.414703 0.615976 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39648 0.600381 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4155 0.603501 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.396248 0.547099 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403175 0.557504 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388263 0.569716 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372907 0.539659 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.364922 0.562276 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356494 0.542624 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387819 0.527447 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.371406 0.530412 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.394747 0.537852 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.410169 0.541008 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405866 0.564748 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410472 0.548718 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393422 0.523836 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393725 0.531546 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372372 0.530405 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388816 0.539866 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367766 0.546435 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384513 0.563607 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340934 0.501272 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320279 0.506807 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340934 0.501272 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.296626 0.555534 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307914 0.550163 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297216 0.572202 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306582 0.572037 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307172 0.588706 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.327827 0.583171 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31728 0.549999 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338525 0.561133 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328569 0.544629 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.144155 0.692502 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.150298 0.696439 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164554 0.682184 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136163 0.670254 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156561 0.659936 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.134313 0.651943 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.121907 0.684509 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120057 0.666199 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12805 0.688447 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0847178 0.680265 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.104191 0.675047 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.107387 0.686972 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0815225 0.66834 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.104191 0.675047 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0978007 0.651197 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0783272 0.656415 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0946054 0.639272 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0978007 0.651197 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.160081 0.738169 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177224 0.721891 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165299 0.718696 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136231 0.731779 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141449 0.712305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.129524 0.70911 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.148156 0.734974 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141449 0.712305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165299 0.718696 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.213517 0.662308 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.194382 0.649801 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198584 0.673065 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23299 0.667526 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218058 0.678283 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233329 0.660237 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228788 0.644262 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229127 0.636974 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209653 0.631756 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.23918 0.710584 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233654 0.687599 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.216195 0.705059 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23045 0.719314 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207465 0.713788 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.216195 0.705059 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.24791 0.701855 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233654 0.687599 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242384 0.678869 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.266765 0.631486 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247291 0.636704 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250487 0.648629 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26357 0.619561 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247291 0.636704 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240901 0.612854 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.260374 0.607636 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237705 0.600929 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240901 0.612854 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.162741 0.579817 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179523 0.58737 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156259 0.583168 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144695 0.595088 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138214 0.598439 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.143431 0.617912 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167958 0.59929 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166695 0.622115 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.184741 0.606843 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.208861 0.556122 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215568 0.578791 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203643 0.575596 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.185011 0.549732 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179793 0.569205 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167868 0.56601 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.196936 0.552927 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179793 0.569205 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203643 0.575596 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.105912 0.577317 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128897 0.582843 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111438 0.600302 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0971825 0.586046 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102708 0.609032 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111438 0.600302 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.114642 0.568587 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128897 0.582843 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.137627 0.574113 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0955788 0.852418 9.1293e-17 RAD 0.0555556 + txt002 + SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.122151 0.937225 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.131874 0.915202 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11086 0.916553 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101346 0.944632 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER 0.090055 0.92396 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0902645 0.930016 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12236 0.943281 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111279 0.928665 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER 0.132084 0.921258 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.182656 0.890926 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167676 0.876622 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159019 0.897331 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179755 0.89227 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156118 0.898675 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161874 0.87931 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188412 0.871561 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.17053 0.8586 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173431 0.857256 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.134634 0.873196 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11765 0.858152 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.117797 0.882112 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152682 0.882275 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135845 0.89119 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153747 0.876309 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152536 0.858315 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.1536 0.852349 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135552 0.843271 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0359958 0.920407 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511067 0.915603 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0588574 0.912106 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0267625 0.901866 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0496241 0.893565 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0326401 0.878521 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0190117 0.905363 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0248894 0.882018 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0341227 0.900559 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0454909 0.840284 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0463379 0.831823 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0473735 0.856111 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0656554 0.850144 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0675379 0.865971 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0866667 0.851543 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0646197 0.825856 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0856311 0.827255 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0654667 0.817395 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.00436945 0.825102 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.025051 0.823964 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.018173 0.84533 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00570109 0.828008 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0195047 0.848237 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0277143 0.829777 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0125791 0.806642 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0345923 0.808411 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0332607 0.805505 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0752104 0.930963 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0941344 0.915684 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0806562 0.924191 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0520258 0.923076 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0574717 0.916304 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0477654 0.89991 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0655041 0.914568 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0612436 0.891402 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0844281 0.899289 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0523913 0.842832 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0750766 0.842434 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0593957 0.86055 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0327739 0.838004 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0397783 0.855722 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0358417 0.832778 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0484547 0.819888 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0515226 0.814662 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.07114 0.81949 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.141535 0.875744 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.146389 0.868763 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.129819 0.88655 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.119801 0.870135 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108085 0.880941 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102922 0.857544 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.136371 0.852347 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.119492 0.839756 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141225 0.845366 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0684873 0.770032 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0507391 0.762305 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0481266 0.759394 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0824297 0.753586 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.062069 0.742948 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0786239 0.729413 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0850422 0.756497 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0812364 0.732325 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.067294 0.74877 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0299763 0.758864 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0114021 0.745277 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0263144 0.757489 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0533169 0.751424 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0496549 0.750049 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0580833 0.730397 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0384047 0.739212 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.043171 0.718185 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0198304 0.725625 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0179281 0.782939 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00272662 0.788473 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0179281 0.782939 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0544915 0.717566 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0588496 0.718734 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0368947 0.725632 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0389272 0.700615 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0213304 0.708681 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.027721 0.684831 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0608821 0.693716 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0496759 0.677932 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0652402 0.694884 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0280589 0.725055 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0172649 0.70473 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00656677 0.726768 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0380155 0.741558 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0165234 0.743272 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0371781 0.737738 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0487136 0.71952 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0478762 0.715699 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0379196 0.699195 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0275193 0.640422 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0283337 0.66342 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0287044 0.644149 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00723527 0.626685 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00842045 0.630413 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0122343 0.635947 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00686453 0.645956 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.012605 0.655218 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00767898 0.668955 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.106805 0.675276 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0875713 0.673094 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.091423 0.694308 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103087 0.676491 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0877049 0.695522 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0801352 0.675524 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0992356 0.655278 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0762835 0.65431 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0800016 0.653095 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0308513 0.600892 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.051506 0.606426 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0308513 0.600892 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0577732 0.666927 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.034894 0.669407 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0513875 0.68752 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0767937 0.663807 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.070408 0.6844 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.072935 0.663167 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0603001 0.645694 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0564414 0.645053 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0374209 0.648173 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0417568 0.762259 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0216407 0.748937 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0345526 0.759495 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0641429 0.753646 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0569387 0.750882 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0664129 0.731712 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.051231 0.743089 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053501 0.721155 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0311149 0.729767 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0454452 0.736829 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.046242 0.724354 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0297485 0.742467 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0264247 0.733709 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.010728 0.739347 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00820099 0.718114 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0429182 0.715595 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0246945 0.7 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.043715 0.70312 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0179281 0.782939 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00272662 0.788473 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0148294 0.770845 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0179281 0.782939 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058253 0.76531 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02648 0.759776 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.101422 0.730141 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0832945 0.725284 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0782041 0.736701 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.102723 0.717709 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0795043 0.724268 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0858949 0.700418 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107813 0.706291 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0909853 0.689001 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0896851 0.701434 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0269197 0.752567 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0144587 0.751574 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.014088 0.732303 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0472037 0.73883 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0343719 0.718566 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0550267 0.7241 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0475745 0.758102 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0553974 0.743371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0351134 0.757108 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0751594 0.655153 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0638711 0.649783 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0745692 0.671821 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0652028 0.671657 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0646126 0.688325 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0439578 0.682791 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0545047 0.649619 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0332597 0.660752 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0432164 0.644249 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0708196 0.669983 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0467378 0.671462 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0618185 0.690113 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0872804 0.667296 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0782793 0.687426 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0796593 0.666087 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0721997 0.648644 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0645786 0.647436 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0481178 0.650123 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0308513 0.600892 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.051506 0.606426 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.053173 0.627745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0308513 0.600892 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0325183 0.62221 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0118635 0.616676 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0244627 0.646718 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0313903 0.657124 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.016478 0.669336 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00112207 0.639278 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00686255 0.661896 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0152909 0.642244 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0160343 0.627066 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.000378614 0.630031 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.022962 0.637471 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.34259 0.872345 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338969 0.848329 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32016 0.86421 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.333079 0.882715 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310649 0.87458 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER 0.319948 0.869068 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351888 0.866833 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338757 0.853186 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.348268 0.842817 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.346884 0.808673 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322361 0.807762 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335792 0.82298 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER 0.361611 0.799483 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350519 0.81379 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351815 0.789382 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.34818 0.784265 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338384 0.774164 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.323657 0.783355 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.291048 0.849036 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304882 0.840755 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287867 0.826067 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267046 0.853652 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263865 0.830683 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.256877 0.849987 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28406 0.868341 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273891 0.864676 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297894 0.86006 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.282313 0.885497 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29787 0.867718 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281455 0.876946 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258284 0.880514 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257427 0.871963 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249813 0.857752 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER 0.274699 0.871286 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266228 0.848523 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290257 0.853506 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.21889 0.873186 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236437 0.866351 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240865 0.865588 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207715 0.856242 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22969 0.848644 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214088 0.832464 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203288 0.857005 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20966 0.833227 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.220835 0.850171 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.21762 0.818054 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER 0.241754 0.813612 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230661 0.83061 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20172 0.811087 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214761 0.823642 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209955 0.799677 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212813 0.794089 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221048 0.78268 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236948 0.789647 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.350165 0.828769 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347547 0.820583 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER 0.333232 0.838905 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332668 0.824121 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315735 0.834258 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312554 0.811288 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER 0.346984 0.805799 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32687 0.792966 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER 0.344366 0.797614 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.29233 0.756464 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305929 0.765125 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288514 0.779336 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268464 0.751185 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.264649 0.774058 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258198 0.754567 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285879 0.736973 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275612 0.740355 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299478 0.745634 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.362219 0.753851 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352319 0.76987 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350765 0.774086 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER 0.347581 0.739791 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336127 0.760026 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER 0.323042 0.74175 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER 0.349134 0.735575 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324595 0.737534 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339233 0.751594 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.219248 0.690652 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223862 0.677807 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206403 0.695267 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198172 0.687036 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.185327 0.691651 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181711 0.670575 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215632 0.669577 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.199171 0.653116 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.220246 0.656732 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.261725 0.675225 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.663122 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238562 0.683777 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261725 0.675225 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238562 0.683777 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244096 0.663122 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267259 0.65457 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249631 0.642468 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.249631 0.642468 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.203821 0.733129 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212373 0.709966 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.715501 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183166 0.738664 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171063 0.721035 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171063 0.721035 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203821 0.733129 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191718 0.715501 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212373 0.709966 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.12881 0.668451 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.151296 0.662426 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.137627 0.678869 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108751 0.661044 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.117567 0.671463 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111177 0.647613 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.12242 0.644601 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.124846 0.631169 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144906 0.638576 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.115992 0.720665 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135288 0.711449 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.135288 0.711449 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100872 0.705544 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.696329 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.105047 0.681209 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100872 0.705544 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.105047 0.681209 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120168 0.696329 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0796777 0.626446 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.624779 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0954616 0.645433 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0796777 0.626446 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0954616 0.645433 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100996 0.624779 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0852121 0.605791 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10653 0.604124 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10653 0.604124 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.197046 0.600215 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207465 0.609032 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191021 0.622701 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173196 0.593824 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167171 0.61631 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159765 0.596251 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.18964 0.580155 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.176209 0.582581 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200059 0.588972 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.155041 0.551082 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174029 0.566866 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.5724 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.134387 0.556617 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13272 0.577935 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13272 0.577935 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.155041 0.551082 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153374 0.5724 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174029 0.566866 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.24926 0.587397 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240045 0.606693 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240045 0.606693 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23414 0.572277 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.591572 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209804 0.576452 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23414 0.572277 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.209804 0.576452 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224924 0.591572 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.448155 0.626191 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.43276 0.614455 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42519 0.634643 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44434 0.625328 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.421375 0.63378 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42513 0.612729 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.45191 0.60514 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4327 0.592541 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436515 0.593404 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399844 0.625435 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38905 0.60511 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378352 0.627149 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409801 0.641939 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388308 0.643653 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408963 0.638118 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420499 0.619901 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419661 0.61608 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409705 0.599576 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.389713 0.68332 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369058 0.688854 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356956 0.671225 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389713 0.68332 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37761 0.665691 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.398265 0.660156 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.405974 0.594185 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410332 0.593017 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.394768 0.609969 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384019 0.587286 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372813 0.60307 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366422 0.57922 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399584 0.570335 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.381987 0.562269 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403942 0.569167 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.341809 0.659244 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.360383 0.645657 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345471 0.65787 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318468 0.651804 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32213 0.65043 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.313702 0.630777 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33338 0.639592 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328614 0.618565 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351955 0.626005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.314012 0.567308 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336891 0.569787 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320398 0.587901 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294991 0.564188 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301377 0.584781 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29885 0.563547 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.311485 0.546074 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315344 0.545434 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334364 0.548554 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.433888 0.53788 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426423 0.55574 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423551 0.558395 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.417238 0.524182 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.406901 0.544697 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393124 0.528344 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.42011 0.521526 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.395996 0.525689 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.412646 0.539387 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340934 0.501272 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.320279 0.506807 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318612 0.528125 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340934 0.501272 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.339267 0.522591 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359921 0.517056 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.399304 0.540802 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400119 0.563801 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400489 0.54453 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37902 0.527065 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.380205 0.530793 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.359551 0.536327 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37865 0.546337 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.35918 0.555599 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379464 0.569335 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.354293 0.299716 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER -0.347717 0.279022 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366989 0.292196 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375177 0.300337 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.387873 0.292817 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389485 0.280263 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355904 0.287162 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.370213 0.267088 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349329 0.266468 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.304702 0.250544 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32307 0.238717 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327715 0.259421 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.30352 0.250492 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.326533 0.259369 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320707 0.238612 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298875 0.229788 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316063 0.217908 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317244 0.21796 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.362978 0.289441 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER -0.35549 0.267771 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378255 0.270044 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379952 0.302733 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.395229 0.283335 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389438 0.294353 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357187 0.30046 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366673 0.29208 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349699 0.278789 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.443285 0.282991 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.421181 0.271991 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4302 0.282046 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462437 0.27248 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER -0.449353 0.271534 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459485 0.250967 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453417 0.262424 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.450466 0.240911 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431313 0.251423 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.449273 0.285685 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436139 0.282528 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER -0.426189 0.27701 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45733 0.266055 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434246 0.257381 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452254 0.243269 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46728 0.271573 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462204 0.248787 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.454146 0.268416 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.486123 0.204606 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464339 0.202946 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470107 0.223366 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.487137 0.203998 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471122 0.222757 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466367 0.201729 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.481368 0.183578 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.460599 0.18131 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459584 0.181918 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER -0.378635 0.228779 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER -0.365937 0.225483 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383364 0.24293 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.402455 0.222377 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407185 0.236529 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER -0.413578 0.21268 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385029 0.20493 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396152 0.195233 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER -0.372331 0.201634 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER -0.412573 0.147477 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39322 0.15977 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER -0.412448 0.172167 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434131 0.147647 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434006 0.172338 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436336 0.16011 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414903 0.13525 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.417108 0.147713 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39555 0.147543 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER -0.319723 0.177083 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.325124 0.189464 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.332294 0.198298 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337645 0.165722 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER -0.350216 0.186938 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360967 0.166743 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330475 0.156889 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353797 0.157909 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335876 0.16927 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.115471 0.221102 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.126388 0.200597 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13987 0.220766 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119172 0.228435 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143571 0.228099 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13379 0.215264 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10569 0.208266 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120308 0.195095 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116607 0.187762 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.15554 0.180792 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER -0.17557 0.171251 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166926 0.19323 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134265 0.182215 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.145651 0.194652 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER -0.133019 0.174096 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.142909 0.160236 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141663 0.152117 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.162939 0.150694 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.18209 0.243049 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168159 0.227721 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.185251 0.218634 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER -0.206066 0.245747 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209227 0.221332 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216111 0.233117 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188974 0.254834 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.199019 0.242204 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER -0.175043 0.239506 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.151829 0.219088 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14514 0.205084 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163068 0.221861 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173729 0.215537 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.184969 0.218309 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188942 0.197981 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155801 0.19876 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171014 0.181204 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149113 0.184756 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.22829 0.248268 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207937 0.234532 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216949 0.2391 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.249439 0.237756 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238098 0.228589 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.250236 0.213509 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240428 0.233189 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241225 0.208942 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220075 0.219453 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.229756 0.167942 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207683 0.16569 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223214 0.183484 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.250271 0.162129 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.243729 0.177671 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248714 0.154064 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER -0.234741 0.144336 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233184 0.13627 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212668 0.142084 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.105335 0.14887 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115741 0.153943 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121723 0.167242 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER -0.118795 0.138714 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135183 0.157086 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER -0.142661 0.13363 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.112813 0.125414 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.136679 0.120331 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.123219 0.130487 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.179968 0.0897843 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166467 0.105492 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.183804 0.114103 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER -0.20386 0.0864233 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207696 0.110742 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER -0.214251 0.0987702 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.186523 0.0778128 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196914 0.0901597 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173022 0.0935207 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.130858 0.0995811 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135326 0.123725 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134736 0.113639 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER -0.148938 0.0843858 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.152816 0.0984435 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171487 0.0933338 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149528 0.0944715 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172078 0.10342 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153997 0.118615 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.269898 0.374298 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER -0.270045 0.350338 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.291334 0.362218 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277815 0.391115 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299251 0.379036 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.285878 0.383973 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER -0.256525 0.379235 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.264588 0.372093 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER -0.256671 0.355276 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.235688 0.305995 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259438 0.312359 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245915 0.321516 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228556 0.291303 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238783 0.306824 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245173 0.282974 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.242079 0.282145 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.258696 0.273816 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265828 0.288509 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.32435 0.32435 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33812 0.32066 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32066 0.33812 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3005 0.317959 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29681 0.331729 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29042 0.307879 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317959 0.3005 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307879 0.29042 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331729 0.29681 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.334762 0.407156 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31686 0.392275 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.326552 0.388696 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357827 0.39864 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349618 0.380181 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362991 0.375243 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348135 0.402218 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353299 0.378821 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330233 0.387337 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.393346 0.348239 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383366 0.345565 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369843 0.354723 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386213 0.333547 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362711 0.340031 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369102 0.316181 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399736 0.324389 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382624 0.307023 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389757 0.321715 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.386461 0.346394 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362711 0.340031 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369843 0.354723 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399983 0.337237 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383366 0.345565 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389757 0.321715 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392851 0.322544 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382624 0.307023 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369102 0.316181 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.261966 0.385852 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259422 0.36581 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER -0.278159 0.38141 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER -0.280504 0.387198 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296698 0.382755 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER -0.2965 0.368501 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.261768 0.371598 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277764 0.352901 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259225 0.351556 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.304189 0.32435 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29042 0.32066 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307879 0.33812 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328039 0.317959 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331729 0.331729 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33812 0.307879 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.31058 0.3005 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32066 0.29042 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29681 0.29681 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.228803 0.30415 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238783 0.306824 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245915 0.321516 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.242326 0.294992 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259438 0.312359 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265828 0.288509 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.235194 0.2803 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.258696 0.273816 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245173 0.282974 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER -0.612732 0.225282 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591695 0.212428 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60221 0.22113 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633805 0.215388 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623283 0.211236 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER -0.63384 0.192641 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62329 0.206686 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623325 0.183939 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602253 0.193832 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER -0.527458 0.200547 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522843 0.187702 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.540303 0.205161 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548533 0.196931 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561378 0.201546 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.564994 0.18047 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531074 0.179472 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.547535 0.163011 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.526459 0.166627 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.542885 0.243024 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534333 0.219861 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563539 0.248559 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575642 0.23093 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575642 0.23093 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542885 0.243024 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534333 0.219861 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER -0.660425 0.189742 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645434 0.185725 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636618 0.196144 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657999 0.17631 0.57904 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634191 0.182712 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640582 0.158862 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666816 0.165892 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649399 0.148444 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651825 0.161875 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER -0.574809 0.203972 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561378 0.201546 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.568784 0.181486 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598659 0.197581 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.592634 0.175095 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609078 0.188764 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591253 0.217641 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601672 0.208824 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577822 0.215215 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER -0.620861 0.107144 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608016 0.102529 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625475 0.119989 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617245 0.128219 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621859 0.141064 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600784 0.14468 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599785 0.11076 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583324 0.127221 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58694 0.106145 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER -0.643128 0.132649 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618482 0.133263 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631785 0.152367 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656585 0.130371 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645242 0.150088 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645397 0.128706 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643283 0.111266 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632094 0.109601 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618637 0.11188 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.591664 0.0609772 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572676 0.076761 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612319 0.0665116 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613986 0.0878298 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613986 0.0878298 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591664 0.0609772 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572676 0.076761 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549659 0.11011 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53924 0.118927 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555684 0.132596 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.573509 0.103719 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579534 0.126205 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58694 0.106145 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557065 0.09005 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570497 0.0924762 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.546646 0.0988668 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.484182 0.326876 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470513 0.310432 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.488171 0.302705 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507957 0.330051 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511946 0.305881 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.518062 0.316783 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490299 0.337778 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500404 0.324509 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476629 0.321334 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.436971 0.320401 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436675 0.29902 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER -0.455413 0.3148 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453274 0.32392 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471717 0.318318 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469281 0.306057 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434535 0.30814 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER -0.450543 0.290278 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434239 0.286759 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.426389 0.279233 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.445377 0.263449 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448298 0.286276 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415641 0.285616 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER -0.43755 0.29266 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42388 0.276216 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41272 0.262789 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420959 0.253389 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431707 0.247006 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549787 0.275127 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549787 0.275127 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529727 0.282533 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536117 0.258683 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.516058 0.266089 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522448 0.242239 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556177 0.251277 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542508 0.234833 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556177 0.251277 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER -0.457868 0.209819 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER -0.458164 0.2312 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453963 0.210053 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476163 0.193527 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER -0.472258 0.193761 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.494753 0.198616 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER -0.480363 0.214674 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER -0.498954 0.219763 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.480659 0.236055 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549603 0.17251 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528912 0.177908 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549105 0.191778 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557329 0.187292 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556831 0.20656 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544363 0.207471 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.537136 0.173421 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.524171 0.193601 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.516445 0.178819 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER -0.562288 0.314604 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542501 0.306499 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541186 0.310183 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574255 0.299494 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.553152 0.295073 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566433 0.276279 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575569 0.29581 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567748 0.272595 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555781 0.287705 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.567359 0.227186 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54267 0.227528 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555283 0.246777 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579676 0.225054 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567601 0.244644 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567305 0.223263 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567063 0.205805 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554691 0.204014 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542374 0.206147 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER -0.507811 0.298839 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.489718 0.287442 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505577 0.302049 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531251 0.291716 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529016 0.294927 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536597 0.273198 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515392 0.27711 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER -0.520738 0.258591 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497299 0.265714 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER -0.646362 0.0316054 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625173 0.0287309 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627981 0.0478 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647066 0.0277577 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628685 0.0439523 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62658 0.0210355 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644258 0.00868865 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623773 0.00196644 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623069 0.00581415 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER -0.584898 0.0177119 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56353 0.0185345 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER -0.580268 0.0364224 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.605935 0.0129918 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601305 0.0317022 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.605605 0.00909422 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER -0.589197 -0.00489609 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.588867 -0.00879364 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567829 -0.00407348 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.593994 0.105299 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572783 0.0926585 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582384 0.100664 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.614541 0.0949359 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602932 0.090301 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613879 0.0719323 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604941 0.0869303 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604278 0.0639267 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58373 0.0742898 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER -0.607302 0.0604766 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607302 0.0604766 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587242 0.0678827 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593633 0.0440327 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER -0.573573 0.0514389 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579964 0.0275889 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613693 0.0366265 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600023 0.0201827 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613693 0.0366265 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER -0.551884 0.118381 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536664 0.103361 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550745 0.0944221 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576307 0.116465 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575168 0.0925065 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58551 0.0995293 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562225 0.125404 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571428 0.108468 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER -0.547006 0.110383 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER -0.523344 0.0542684 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534291 0.0358996 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541988 0.0591566 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509132 0.0704822 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER -0.527777 0.0753703 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505868 0.0683272 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.501435 0.0472252 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49817 0.0450702 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.512382 0.0288565 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.5935 -0.0473753 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57344 -0.0399691 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.595617 -0.0308315 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604929 -0.0318545 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607046 -0.0153107 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.596298 -0.00892756 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582752 -0.0409921 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574121 -0.0180651 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562692 -0.0335859 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.48882 -0.0212225 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497372 0.00194055 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491256 -0.00896145 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502764 -0.0395307 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505199 -0.0272696 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER -0.525259 -0.0346758 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER -0.50888 -0.0286287 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531375 -0.0237738 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517432 -0.00546563 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.530389 -0.0495897 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER -0.519442 -0.031221 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53532 -0.0261165 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554507 -0.0538859 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER -0.559438 -0.0304127 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER -0.567678 -0.0398133 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538628 -0.0589904 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.551799 -0.0449178 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER -0.527681 -0.0406217 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER -0.435909 0.01504 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423265 0.0115452 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440694 0.0289993 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459725 0.00864346 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46451 0.0226028 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470897 -0.0012478 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER -0.442297 -0.00881065 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER -0.453468 -0.0187019 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.429652 -0.0123054 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER -0.364644 0.0293677 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375512 0.0213457 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385352 0.0401449 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37527 0.0253024 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER -0.395978 0.0360796 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396764 0.0132151 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER -0.36543 0.0065032 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386924 -0.00558411 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376298 -0.00151881 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER -0.426942 0.0903221 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.416328 0.0699989 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435083 0.0806307 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER -0.449792 0.0891998 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.457933 0.0795084 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462029 0.0677542 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431037 0.078568 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER -0.443274 0.0571224 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420423 0.0582447 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.523883 -0.000557006 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49924 -0.00208214 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.51057 0.0165974 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536722 -0.00475566 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523409 0.0123987 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER -0.524918 -0.0104794 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.525392 -0.0234352 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.513588 -0.029159 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500749 -0.0249603 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.508666 0.0817008 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER -0.488971 0.0722467 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.489545 0.0732807 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523872 0.0669012 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504751 0.058481 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.519382 0.0426474 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523298 0.0658672 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER -0.518808 0.0416134 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.503602 0.0564131 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.540463 -0.00154892 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.52751 -0.00538221 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER -0.524673 0.0156462 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529087 -0.00174531 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.513298 0.0154498 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504759 -0.00577498 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531924 -0.0227737 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507596 -0.0268034 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER -0.518971 -0.026607 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.451803 -0.0707378 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435761 -0.0561039 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER -0.454158 -0.0461991 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER -0.475081 -0.0725109 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477435 -0.0479721 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.482316 -0.05965 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER -0.456685 -0.0824157 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46392 -0.0695548 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440643 -0.0677817 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.459563 -0.081612 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.442243 -0.0665888 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.463589 -0.0696122 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER -0.480415 -0.0721979 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.48444 -0.0601982 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER -0.483946 -0.0477607 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459069 -0.0691745 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4626 -0.0447373 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.441749 -0.0541513 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.373728 -0.0495643 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383722 -0.030137 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382672 -0.0306825 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388102 -0.0651725 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.397047 -0.0462908 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41247 -0.0613535 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389151 -0.064627 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41352 -0.060808 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399146 -0.0451997 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.412497 -0.190929 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400273 -0.174844 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.417001 -0.16674 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436523 -0.195071 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER -0.441027 -0.170881 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448325 -0.183127 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419795 -0.203175 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431597 -0.191231 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407571 -0.18709 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.343834 -0.12515 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353814 -0.122476 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360946 -0.107784 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357357 -0.134308 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374468 -0.116942 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380859 -0.140792 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.350225 -0.149 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.373727 -0.155484 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360204 -0.146326 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.41922 -0.10495 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40545 -0.10864 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42291 -0.0911807 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44307 -0.111341 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44676 -0.0975713 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45315 -0.121421 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425611 -0.128801 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435691 -0.138881 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.411841 -0.13249 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.502603 -0.174264 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.479659 -0.170327 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER -0.495376 -0.15142 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509207 -0.166319 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER -0.501981 -0.143475 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.492868 -0.154437 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49349 -0.185226 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477151 -0.173345 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470546 -0.18129 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.501491 -0.082906 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477742 -0.0892696 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484874 -0.0745774 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515014 -0.0920638 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER -0.498397 -0.0837352 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504787 -0.107585 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507882 -0.106756 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497655 -0.122277 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484132 -0.11312 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.508376 -0.0810612 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.498397 -0.0837352 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484874 -0.0745774 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.501244 -0.0957534 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477742 -0.0892696 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484132 -0.11312 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.514767 -0.104911 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.497655 -0.122277 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504787 -0.107585 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.411775 -0.200165 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399922 -0.179342 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415187 -0.189948 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436152 -0.199808 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.439564 -0.189591 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448677 -0.178629 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420888 -0.189202 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER -0.433412 -0.168023 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409035 -0.168379 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.439381 -0.10495 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45315 -0.10864 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.435691 -0.0911807 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415531 -0.111341 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.411841 -0.0975713 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40545 -0.121421 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.43299 -0.128801 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42291 -0.138881 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44676 -0.13249 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.350719 -0.123305 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374468 -0.116942 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360946 -0.107784 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343587 -0.137998 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353814 -0.122476 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360204 -0.146326 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357109 -0.147155 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.373727 -0.155484 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380859 -0.140792 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.160406 -0.0522053 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171954 -0.0513956 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178533 -0.0358698 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172236 -0.0607319 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER -0.190363 -0.0443964 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195615 -0.0684488 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165658 -0.0762577 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189036 -0.0839747 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177206 -0.075448 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.176731 -0.00705049 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192673 -0.025725 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200733 -0.00352517 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171177 0.00138875 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195179 0.00491406 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER -0.181564 -0.00884647 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163117 -0.020811 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173504 -0.0310463 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179058 -0.0394855 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.20044 0.0258737 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196602 0.00551963 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215612 0.0203763 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER -0.21976 0.0270852 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.234932 0.0215878 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.235241 0.00794264 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200749 0.0122285 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER -0.21623 -0.00691403 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196911 -0.00812553 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.234308 -0.0942304 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.221514 -0.0854464 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238704 -0.0714204 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER -0.258223 -0.0997955 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.262619 -0.0769856 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.269343 -0.0965768 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241032 -0.113822 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.252152 -0.110603 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228237 -0.105038 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.275459 -0.0076281 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER -0.255218 -0.0167139 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER -0.270078 -0.00142185 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER -0.297806 -0.0152725 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.292425 -0.00906621 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299911 -0.0320026 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282946 -0.0305645 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.285051 -0.0472946 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.262704 -0.0396503 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.324811 -0.0817333 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.300317 -0.0800146 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.313378 -0.0603366 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER -0.334899 -0.0811832 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER -0.323466 -0.0597864 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320493 -0.0789143 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.321838 -0.100861 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307433 -0.0985923 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.297345 -0.0991425 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.195663 -0.127519 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194866 -0.104303 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER -0.201738 -0.108803 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER -0.217423 -0.138245 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223497 -0.119529 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238386 -0.125754 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210551 -0.133744 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.231514 -0.121254 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209754 -0.110528 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.291073 -0.126206 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.271345 -0.119897 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293457 -0.110246 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER -0.301332 -0.10979 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.303716 -0.0938302 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER -0.291862 -0.0870656 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.279219 -0.119442 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.269749 -0.0967168 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER -0.25949 -0.113132 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.20388 -0.0673141 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216456 -0.0490355 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER -0.198742 -0.0609052 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207384 -0.0906706 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.202246 -0.0842617 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223463 -0.0957484 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225098 -0.0788008 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241177 -0.0838786 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.237674 -0.0605222 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.508983 0.690426 8.51251e-17 RAD 0.0555556 + txt002 + SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.47411 0.767658 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.467528 0.744501 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER -0.489758 0.749038 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491377 0.779098 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507025 0.760478 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502061 0.767382 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469146 0.774562 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER -0.47983 0.762845 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462564 0.751405 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.418941 0.714226 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.43889 0.704751 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44101 0.724842 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.416335 0.712374 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.438403 0.722991 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.433677 0.701048 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414215 0.692283 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431557 0.680957 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434163 0.682808 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.481931 0.703418 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500827 0.694124 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491475 0.716184 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.459538 0.704962 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469082 0.717727 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.456041 0.697211 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46889 0.682902 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.465393 0.675152 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.487786 0.673608 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.560084 0.767402 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543179 0.760285 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53997 0.755145 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574398 0.750585 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554284 0.738328 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571808 0.726651 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577608 0.755725 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575017 0.731791 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER -0.560703 0.748608 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.573364 0.687731 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571303 0.682033 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56324 0.703871 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.553195 0.688893 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543071 0.705033 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530964 0.684356 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561258 0.667055 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539027 0.662518 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.559196 0.661356 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.601808 0.682851 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579842 0.680568 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58454 0.700216 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603648 0.680237 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58638 0.697602 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583522 0.675339 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59895 0.660588 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.578824 0.65569 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576984 0.658304 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.506594 0.773394 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER -0.491321 0.755462 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507924 0.764807 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530616 0.768632 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531946 0.760045 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539365 0.745938 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.514012 0.759287 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522762 0.736593 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.49874 0.741355 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.538818 0.693658 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517905 0.691194 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534075 0.708875 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.560445 0.687649 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555702 0.702866 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561158 0.679176 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544274 0.669969 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544988 0.661495 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523361 0.667505 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.447385 0.709346 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.447429 0.703286 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.46231 0.721188 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466788 0.703718 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.481713 0.71556 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.486235 0.692031 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.451907 0.685816 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471354 0.674129 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.451951 0.679757 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.269894 0.672915 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.275822 0.649528 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293281 0.666987 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277236 0.683032 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.300624 0.677104 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.290507 0.669762 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.259777 0.665573 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273047 0.652302 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265705 0.642185 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.279361 0.614273 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.303327 0.613293 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.288206 0.628413 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.262487 0.604959 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.271332 0.619099 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.269578 0.594664 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.277607 0.589839 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.284698 0.579544 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.301572 0.588858 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.328536 0.663448 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314396 0.654603 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.329516 0.639482 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.35297 0.665202 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353951 0.641237 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.363265 0.658111 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33785 0.680322 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348145 0.673232 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32371 0.671477 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.321274 0.684748 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.308341 0.666888 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.326131 0.678752 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.344967 0.681014 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.349824 0.675018 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355727 0.659419 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327177 0.669149 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337937 0.647554 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314244 0.651289 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.391875 0.684201 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.389739 0.622198 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366159 0.617804 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378964 0.63493 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407771 0.61539 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396997 0.628121 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.402224 0.604188 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.394966 0.598265 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.389418 0.587062 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.371386 0.593871 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.258061 0.621535 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.264057 0.616678 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.275921 0.634468 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.27366 0.615632 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29152 0.628565 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.295255 0.604872 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.261795 0.597842 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.28339 0.587082 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267791 0.592985 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.320611 0.55307 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.30788 0.563845 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.325005 0.57665 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.344544 0.547843 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348938 0.571423 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355747 0.553391 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327419 0.535038 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338621 0.540585 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314688 0.545813 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.258608 0.550934 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.316595 0.626214 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318408 0.606941 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.335868 0.624401 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.311592 0.648676 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330864 0.646863 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.308402 0.651867 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.294133 0.631217 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.290942 0.634407 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.295946 0.611945 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.319608 0.539107 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307378 0.556863 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.322499 0.541743 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.344043 0.540862 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.346933 0.543497 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356248 0.560372 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328923 0.555982 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.341128 0.575492 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316693 0.573738 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.403702 0.623201 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401066 0.62031 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385946 0.635431 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386827 0.613886 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.369071 0.626116 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367317 0.601681 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401947 0.598766 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382437 0.586561 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399312 0.595876 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.305407 0.69384 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296616 0.671002 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317721 0.674446 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.325704 0.701111 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338018 0.681717 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337211 0.685545 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3046 0.697667 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316107 0.682101 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.295809 0.67483 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.391875 0.684201 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37258 0.674986 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406996 0.669081 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40282 0.644745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.3877 0.659866 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.329538 0.677411 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314897 0.661584 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.332022 0.674389 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.353472 0.672184 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.355956 0.669162 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362764 0.65113 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.336346 0.659378 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.345639 0.638325 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.321705 0.643552 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.248969 0.637402 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.268363 0.625088 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.271807 0.646193 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.245142 0.638209 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267979 0.647 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.260708 0.626702 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.241698 0.617105 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.257264 0.605598 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.261092 0.604791 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.265398 0.613271 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.26842 0.610787 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.281225 0.627912 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.283431 0.606463 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299257 0.621104 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.304484 0.59717 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.270625 0.589337 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.291679 0.580045 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273647 0.586853 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.258608 0.550934 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.267823 0.570229 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.273728 0.535813 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.298064 0.539989 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.282943 0.555109 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.678928 0.639472 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661636 0.629767 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER -0.664108 0.621631 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698678 0.626079 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683858 0.608237 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701135 0.602979 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696205 0.634214 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698662 0.611115 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678912 0.624508 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.640648 0.631982 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625749 0.614812 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64267 0.62585 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER -0.664623 0.627081 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666645 0.620949 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673698 0.605012 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647702 0.616044 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656777 0.593974 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632802 0.598874 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.595495 0.63057 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594239 0.605919 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615286 0.617371 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608828 0.641795 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628619 0.628595 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER -0.620906 0.628369 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587782 0.630343 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59986 0.616917 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586526 0.605692 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.689897 0.57563 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693998 0.575587 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673115 0.585222 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.672626 0.560848 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655844 0.57044 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659456 0.546023 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693509 0.551213 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680339 0.536388 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69761 0.55117 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.602201 0.570049 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623084 0.560414 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615021 0.582252 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582032 0.571211 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594852 0.583414 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582745 0.562738 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER -0.590095 0.549372 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER -0.590808 0.540899 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610978 0.539737 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.627785 0.478525 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615951 0.497935 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630799 0.484234 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER -0.652241 0.479365 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655255 0.485075 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.664864 0.499616 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637394 0.493066 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.650016 0.513317 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62556 0.512476 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.73992 0.563328 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.720935 0.559693 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719679 0.577348 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737863 0.557208 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717623 0.571228 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.716821 0.547453 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739118 0.539553 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718076 0.529798 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.720133 0.535918 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.688647 0.474542 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666351 0.485132 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER -0.686417 0.498226 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.704854 0.480953 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER -0.702624 0.504637 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698765 0.497955 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.684788 0.46786 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678699 0.484862 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER -0.662492 0.47845 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.690713 0.554862 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.667813 0.552739 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682694 0.570641 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER -0.710116 0.549235 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.702097 0.565014 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.706619 0.541484 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER -0.695235 0.531333 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691738 0.523582 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER -0.672335 0.52921 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.499795 0.519956 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.493653 0.523893 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.479397 0.509638 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507788 0.497708 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.48739 0.48739 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509638 0.479397 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522043 0.511963 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523893 0.493653 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515901 0.515901 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.559233 0.507719 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539759 0.502501 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536564 0.514426 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562428 0.495794 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539759 0.502501 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54615 0.478651 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.565623 0.483869 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549345 0.466726 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54615 0.478651 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.483869 0.565623 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.466726 0.549345 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.478651 0.54615 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.507719 0.559233 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502501 0.539759 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.514426 0.536564 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.495794 0.562428 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.502501 0.539759 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.478651 0.54615 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.430434 0.489762 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.449569 0.477255 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.445366 0.500519 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.41096 0.49498 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425893 0.505737 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410622 0.487691 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.415162 0.471716 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.414824 0.464428 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434297 0.45921 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.404771 0.538038 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410297 0.515053 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427756 0.532513 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4135 0.546768 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436486 0.541242 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427756 0.532513 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396041 0.529309 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410297 0.515053 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401567 0.506323 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.377186 0.45894 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396659 0.464158 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.393464 0.476083 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380381 0.447015 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396659 0.464158 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40305 0.440308 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383576 0.43509 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406245 0.428383 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40305 0.440308 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.48121 0.407271 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464428 0.414824 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.487691 0.410622 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499256 0.422542 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.505737 0.425893 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.500519 0.445366 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.475992 0.426744 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.477255 0.449569 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45921 0.434297 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.43509 0.383576 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428383 0.406245 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440308 0.40305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45894 0.377186 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464158 0.396659 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.476083 0.393464 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.447015 0.380381 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.464158 0.396659 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.440308 0.40305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.538038 0.404771 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515053 0.410297 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.532513 0.427756 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.546768 0.4135 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541242 0.436486 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.532513 0.427756 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529309 0.396041 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.515053 0.410297 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.506323 0.401567 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.672915 0.269894 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649528 0.275822 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666987 0.293281 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683032 0.277236 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.677104 0.300624 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669762 0.290507 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665573 0.259777 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.652302 0.273047 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642185 0.265705 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.592776 0.280905 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.580045 0.291679 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59717 0.304484 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.61671 0.275678 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621104 0.299257 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627912 0.281225 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599585 0.262872 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610787 0.26842 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586853 0.273647 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.661904 0.350033 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638325 0.345639 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65113 0.362764 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679937 0.343224 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669162 0.355956 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674389 0.332022 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.667131 0.326099 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661584 0.314897 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643552 0.321705 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.685865 0.340177 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679339 0.33606 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669651 0.355123 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669679 0.336151 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.653465 0.351097 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.646968 0.328008 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679367 0.317089 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656656 0.308945 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.672841 0.312971 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.664041 0.412036 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.600701 0.391282 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586561 0.382437 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601681 0.367317 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625136 0.393037 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626116 0.369071 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.635431 0.385946 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610016 0.408157 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62031 0.401066 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.595876 0.399312 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.602632 0.256944 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587686 0.273158 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606749 0.26347 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62572 0.263442 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.629838 0.269968 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633864 0.286153 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606658 0.27313 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.614801 0.295841 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591712 0.289344 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.551527 0.342108 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575492 0.341128 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.560372 0.356248 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534652 0.332793 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543497 0.346933 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.541743 0.322499 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549772 0.317673 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556863 0.307378 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.573738 0.316693 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.530773 0.278768 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.663938 0.633406 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64522 0.617928 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65892 0.626429 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687239 0.625707 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682221 0.61873 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691822 0.602531 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673539 0.617206 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678123 0.59403 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.654822 0.601728 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.580238 0.601562 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER -0.581665 0.587563 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.59781 0.605914 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER -0.597491 0.599646 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER -0.615063 0.603999 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616171 0.583732 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.581346 0.581295 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600026 0.565381 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582773 0.567297 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.608008 0.63767 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601637 0.613891 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER -0.623239 0.620102 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626157 0.646756 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.641389 0.629188 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637936 0.632063 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604555 0.640545 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616334 0.625852 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598184 0.616766 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.729812 0.597914 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711617 0.592661 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70632 0.602084 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732864 0.584178 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.709372 0.588348 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.71772 0.565189 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER -0.738161 0.574755 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER -0.723017 0.555767 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719965 0.569503 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.658095 0.605761 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647455 0.607672 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643855 0.58746 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.676573 0.589763 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER -0.662334 0.571461 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER -0.684413 0.575674 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680174 0.609975 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.688013 0.595887 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669535 0.611885 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.712906 0.511567 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.699372 0.507717 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.710453 0.529503 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.704747 0.526889 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER -0.702295 0.544826 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683054 0.538362 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693665 0.505104 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671972 0.516576 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680131 0.501254 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.70016 0.547376 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER -0.676324 0.546319 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690564 0.564621 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717636 0.542652 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70804 0.559898 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711276 0.536873 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER -0.703396 0.524351 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER -0.697037 0.518571 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679561 0.523294 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.67091 0.466887 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER -0.650637 0.480853 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671107 0.490138 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690617 0.471745 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690815 0.494995 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER -0.690052 0.490567 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.670147 0.46246 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669581 0.481283 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649874 0.476425 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.60809 0.516313 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60089 0.524375 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616221 0.538029 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631397 0.508952 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639529 0.530668 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647504 0.509653 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616065 0.495298 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632172 0.495999 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608865 0.50336 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.626214 0.316595 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606941 0.318408 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624401 0.335868 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648676 0.311592 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.646863 0.330864 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651867 0.308402 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631217 0.294133 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634407 0.290942 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.611945 0.295946 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.537564 0.341105 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.540585 0.338621 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.553391 0.355747 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555596 0.334297 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.571423 0.348938 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57665 0.325005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542791 0.317172 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563845 0.30788 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545813 0.314688 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.601704 0.405245 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587062 0.389418 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604188 0.402224 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625637 0.400018 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628121 0.396997 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.63493 0.378964 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.608512 0.387213 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617804 0.366159 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593871 0.371386 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.697473 0.31938 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674538 0.318074 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681812 0.338182 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701209 0.31822 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.685547 0.337022 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682009 0.315754 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.693935 0.298112 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674736 0.295646 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671 0.296805 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.664041 0.412036 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644745 0.40282 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.679161 0.396915 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674986 0.37258 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659866 0.3877 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.675867 0.351035 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673232 0.348145 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.658111 0.363265 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.658993 0.341721 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.641237 0.353951 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639482 0.329516 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.674113 0.3266 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.654603 0.314396 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671477 0.32371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.623429 0.245336 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604627 0.260997 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624736 0.268271 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644697 0.248874 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.646004 0.271809 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.647163 0.268073 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624589 0.2416 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627055 0.2608 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.605787 0.257262 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.591774 0.266942 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.579544 0.284698 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594664 0.269578 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616209 0.268696 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619099 0.271332 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.628413 0.288206 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.601088 0.283817 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613293 0.303327 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.588858 0.301572 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.530773 0.278768 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539989 0.298064 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545894 0.263648 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570229 0.267823 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555109 0.282943 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.424703 0.518106 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420089 0.505261 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.437548 0.522721 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.445778 0.51449 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.458623 0.519105 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.462239 0.498029 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428319 0.497031 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44478 0.48057 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423704 0.484186 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.382226 0.502679 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.490576 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405389 0.511231 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382226 0.502679 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405389 0.511231 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399854 0.490576 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376691 0.482024 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39432 0.469922 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39432 0.469922 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.44013 0.560583 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431578 0.53742 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.542955 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.460785 0.566118 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.472887 0.548489 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.472887 0.548489 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.44013 0.560583 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452233 0.542955 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.431578 0.53742 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.51514 0.495905 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.492654 0.48988 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.506323 0.506323 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5352 0.488498 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.526383 0.498917 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.532774 0.475067 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.521531 0.472055 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.519105 0.458623 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499045 0.46603 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.527958 0.548119 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.508662 0.538903 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.508662 0.538903 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543078 0.532998 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.523783 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538903 0.508662 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.543078 0.532998 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538903 0.508662 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.523783 0.523783 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.564273 0.4539 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.452233 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548489 0.472887 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.564273 0.4539 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548489 0.472887 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542955 0.452233 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558738 0.433245 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53742 0.431578 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.53742 0.431578 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.446904 0.427669 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436486 0.436486 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.45293 0.450155 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.470754 0.421278 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.47678 0.443764 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.484186 0.423704 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.454311 0.407609 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.467742 0.410035 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.443892 0.416426 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.488909 0.378536 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469922 0.39432 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.399854 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.509564 0.384071 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511231 0.405389 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.511231 0.405389 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.488909 0.378536 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.490576 0.399854 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.469922 0.39432 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.39469 0.414851 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403906 0.434147 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403906 0.434147 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409811 0.399731 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.419026 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434147 0.403906 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409811 0.399731 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434147 0.403906 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419026 0.419026 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.871334 -0.102403 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER -0.850164 -0.113406 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862937 -0.100577 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.892817 -0.111133 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER -0.884419 -0.109307 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER -0.893129 -0.130866 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880044 -0.123961 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880356 -0.143694 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER -0.858873 -0.134964 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.781177 -0.120908 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER -0.778973 -0.13149 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.795477 -0.113462 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.801282 -0.125067 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.815582 -0.11762 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819182 -0.139808 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.784778 -0.143095 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802678 -0.157836 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.782573 -0.153678 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.811594 -0.0654286 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER -0.80102 -0.0876595 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.820516 -0.0820122 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.833964 -0.0632344 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER -0.842886 -0.079818 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.845761 -0.083271 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER -0.814468 -0.0688817 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER -0.826265 -0.0889183 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803895 -0.0911125 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.926643 -0.128672 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER -0.90826 -0.133221 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.904034 -0.1198 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER -0.926768 -0.139481 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.904159 -0.130608 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER -0.908508 -0.154838 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.930993 -0.152902 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.912733 -0.16826 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER -0.912609 -0.157451 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.853284 -0.0905999 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER -0.839638 -0.0940331 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840233 -0.111382 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER -0.873773 -0.103926 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860723 -0.124708 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880618 -0.120685 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER -0.873178 -0.086577 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880022 -0.103336 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.859532 -0.0900102 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.894035 -0.188167 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.885777 -0.195141 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER -0.89378 -0.172046 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880811 -0.172463 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER -0.880556 -0.156342 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER -0.859328 -0.163733 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER -0.872807 -0.195558 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER -0.851325 -0.186828 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.864549 -0.202532 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.891905 -0.197746 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.867957 -0.193701 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.884286 -0.175383 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.908019 -0.198259 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER -0.900401 -0.175896 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.900186 -0.194726 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER -0.89169 -0.216576 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.883856 -0.213043 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.867741 -0.212531 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.843832 -0.25245 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.826426 -0.235043 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.846687 -0.233837 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.865646 -0.247028 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.868501 -0.228415 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER -0.870053 -0.224198 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER -0.845385 -0.248234 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER -0.849792 -0.225404 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.827978 -0.230827 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.794108 -0.212743 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER -0.788345 -0.199907 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802328 -0.189621 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.817265 -0.220563 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER -0.825486 -0.197441 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.83466 -0.215547 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803282 -0.230849 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER -0.820676 -0.225832 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER -0.797518 -0.218012 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.597249 -0.125845 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.592635 -0.138689 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.610094 -0.12123 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618324 -0.12946 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631169 -0.124846 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634785 -0.145921 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600865 -0.14692 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617326 -0.163381 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.596251 -0.159765 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.554772 -0.141271 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.153374 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577935 -0.13272 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554772 -0.141271 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.577935 -0.13272 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.153374 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549237 -0.161926 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566866 -0.174029 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566866 -0.174029 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.612676 -0.0833673 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604124 -0.10653 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.100996 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633331 -0.0778329 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645433 -0.0954616 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645433 -0.0954616 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612676 -0.0833673 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.100996 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604124 -0.10653 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.687686 -0.148046 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6652 -0.154071 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678869 -0.137627 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.707746 -0.155452 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.698929 -0.145033 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70532 -0.168883 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.694077 -0.171896 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.691651 -0.185327 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671591 -0.177921 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.700504 -0.095832 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681209 -0.105047 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681209 -0.105047 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715624 -0.110952 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.120168 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711449 -0.135288 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715624 -0.110952 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.711449 -0.135288 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.120168 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.736819 -0.190051 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.191718 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721035 -0.171063 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.736819 -0.190051 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721035 -0.171063 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.191718 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.731284 -0.210706 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.709966 -0.212373 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.709966 -0.212373 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.61945 -0.216282 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609032 -0.207465 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.625476 -0.193796 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6433 -0.222672 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649326 -0.200186 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.656732 -0.220246 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626857 -0.236341 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640288 -0.233915 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616438 -0.227525 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.661455 -0.265414 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642468 -0.249631 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.244096 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.68211 -0.25988 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683777 -0.238562 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.683777 -0.238562 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661455 -0.265414 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.244096 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642468 -0.249631 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.567237 -0.2291 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576452 -0.209804 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.576452 -0.209804 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582357 -0.24422 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.224924 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606693 -0.240045 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582357 -0.24422 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606693 -0.240045 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.224924 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.66171 0.103063 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.653258 0.0800983 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673446 0.0876683 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682761 0.106818 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.694497 0.0914233 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69536 0.0876083 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.662574 0.0992478 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.675172 0.0800382 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.654121 0.0762832 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.604582 0.0446211 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604582 0.0446211 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599047 0.0239663 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.662466 0.0547519 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660752 0.0332597 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682791 0.0439578 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.668 0.0754066 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.688325 0.0646126 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671821 0.0745692 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645962 0.0647085 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649783 0.0638711 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644249 0.0432164 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.750021 0.0887955 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.729506 0.078459 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732161 0.0813312 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.766375 0.075018 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.748514 0.0675537 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.762212 0.050904 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.763719 0.0721458 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759557 0.0480318 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743204 0.0618093 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.747099 0.0542122 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743371 0.0553974 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.7241 0.0550267 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741565 0.0335575 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718566 0.0343719 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732303 0.014088 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.760836 0.0339282 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.751574 0.0144587 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.757108 0.0351134 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.786629 -0.00415829 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786629 -0.00415829 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.781094 -0.024813 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.693716 0.0608821 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.677932 0.0496759 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.694884 0.0652402 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717566 0.0544915 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718734 0.0588496 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.725632 0.0368947 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.700615 0.0389272 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.708681 0.0213304 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.684831 0.027721 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.720593 -0.0310802 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.7 -0.0246945 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718114 -0.00820099 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741827 -0.0336072 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739347 -0.010728 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.742467 -0.0297485 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.723713 -0.0501007 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.724354 -0.046242 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70312 -0.043715 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.628657 -0.00328338 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630031 0.000378614 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642244 0.0152909 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648309 -0.0117117 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661896 0.00686255 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669336 -0.016478 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636097 -0.026624 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657124 -0.0313903 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637471 -0.022962 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.909872 -0.0977075 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER -0.891613 -0.104052 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER -0.886771 -0.0997803 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.917612 -0.113625 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER -0.894512 -0.115698 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER -0.907093 -0.135886 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.922453 -0.117896 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.911935 -0.140158 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.904194 -0.124241 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.867758 -0.11253 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.846864 -0.122142 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860854 -0.107566 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER -0.889596 -0.120593 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.882692 -0.115629 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER -0.890541 -0.138267 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.875606 -0.135168 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.876551 -0.152843 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER -0.854713 -0.14478 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.826973 -0.0627848 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER -0.81296 -0.083104 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER -0.830202 -0.0805529 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER -0.850898 -0.0640908 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER -0.854126 -0.0818589 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.860809 -0.0857161 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER -0.833656 -0.0666419 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER -0.843568 -0.0882673 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819643 -0.0869612 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.876203 -0.130609 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.879733 -0.128522 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.857385 -0.124356 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862935 -0.149395 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.844117 -0.143141 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER -0.853198 -0.166093 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.885283 -0.153561 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.875546 -0.170259 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.888813 -0.151474 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.798532 -0.108311 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.797989 -0.131037 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819589 -0.119537 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER -0.80454 -0.0890219 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER -0.825597 -0.100248 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.810005 -0.0924597 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.78294 -0.100522 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.788405 -0.10396 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER -0.782397 -0.123249 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.785723 -0.180723 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER -0.798991 -0.161937 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER -0.782104 -0.173028 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER -0.78966 -0.203667 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786041 -0.195972 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER -0.806864 -0.207825 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER -0.806546 -0.192576 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.82375 -0.196734 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819813 -0.17379 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.920038 -0.201143 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER -0.900209 -0.201384 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER -0.910616 -0.17991 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.918112 -0.192861 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER -0.90869 -0.171628 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER -0.896357 -0.18482 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.907705 -0.214335 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER -0.88595 -0.206294 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.887876 -0.214576 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.824206 -0.252002 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.810793 -0.231282 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.827952 -0.234336 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER -0.848158 -0.251396 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER -0.851905 -0.23373 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.858698 -0.23007 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER -0.830999 -0.248342 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER -0.841538 -0.227016 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.817586 -0.227621 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.868948 -0.209658 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER -0.84746 -0.202239 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER -0.865773 -0.186008 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.889121 -0.210757 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.885946 -0.187106 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.887806 -0.204436 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER -0.870808 -0.226988 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.869493 -0.220667 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER -0.84932 -0.219569 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.661946 0.0667914 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65711 0.0452771 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680354 0.0511945 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673611 0.0847128 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.692019 0.069116 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680439 0.08112 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.650366 0.0787954 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657195 0.0752026 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64553 0.0572811 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.604582 0.0446211 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.604582 0.0446211 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627745 0.053173 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.62221 0.0325183 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599047 0.0239663 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616676 0.0118635 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.634953 -0.000226782 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655218 0.012605 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.635947 0.0122343 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.629419 -0.0208815 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630413 -0.00842045 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.644149 -0.0287044 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.64869 -0.0205108 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.66342 -0.0283337 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.668955 -0.00767898 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.746894 0.0650768 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739183 0.0653796 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.723153 0.0607735 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.748035 0.0437239 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.724295 0.0394207 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741466 0.0226739 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.764065 0.04833 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.757496 0.02728 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.756355 0.0486329 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.732368 -0.0484665 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715699 -0.0478762 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737738 -0.0371781 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737902 -0.0278118 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743272 -0.0165234 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.726768 -0.00656677 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715864 -0.0385099 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70473 -0.0172649 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.699195 -0.0379196 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.786629 -0.00415829 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786629 -0.00415829 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.770845 0.0148294 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76531 -0.0058253 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.781094 -0.024813 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759776 -0.02648 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.706291 0.107813 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.689001 0.0909853 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701434 0.0896851 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.730141 0.101422 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.725284 0.0832945 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.736701 0.0782041 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717709 0.102723 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.724268 0.0795043 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.700418 0.0858949 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.740802 0.0511556 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718185 0.043171 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.730397 0.0580833 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.760455 0.0427273 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.750049 0.0496549 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.757489 0.0263144 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.748242 0.027815 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.745277 0.0114021 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.725625 0.0198304 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.650692 0.0721382 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645053 0.0564414 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663167 0.072935 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671925 0.0696112 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.6844 0.070408 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.68752 0.0513875 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.653812 0.0531177 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.669407 0.034894 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648173 0.0374209 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.672341 -0.123995 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.666199 -0.120057 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651943 -0.134313 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680334 -0.146243 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.659936 -0.156561 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.682184 -0.164554 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.69459 -0.131987 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696439 -0.150298 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.688447 -0.12805 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.731779 -0.136231 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.712305 -0.141449 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.70911 -0.129524 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.734974 -0.148156 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.712305 -0.141449 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718696 -0.165299 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.738169 -0.160081 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.721891 -0.177224 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.718696 -0.165299 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.656415 -0.0783272 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639272 -0.0946054 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651197 -0.0978007 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.680265 -0.0847178 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.675047 -0.104191 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.686972 -0.107387 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.66834 -0.0815225 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.675047 -0.104191 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651197 -0.0978007 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.60298 -0.154189 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.622115 -0.166695 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.617912 -0.143431 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583506 -0.148971 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.598439 -0.138214 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583168 -0.156259 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587708 -0.172234 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58737 -0.179523 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.606843 -0.184741 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.577317 -0.105912 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582843 -0.128897 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600302 -0.111438 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586046 -0.0971825 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609032 -0.102708 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600302 -0.111438 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.568587 -0.114642 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.582843 -0.128897 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.574113 -0.137627 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.549732 -0.185011 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569205 -0.179793 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.56601 -0.167868 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.552927 -0.196936 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569205 -0.179793 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575596 -0.203643 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556122 -0.208861 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.578791 -0.215568 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.575596 -0.203643 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.653756 -0.23668 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636974 -0.229127 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660237 -0.233329 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671802 -0.221409 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678283 -0.218058 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.673065 -0.198584 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648538 -0.217207 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.649801 -0.194382 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631756 -0.209653 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.607636 -0.260374 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600929 -0.237705 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612854 -0.240901 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.631486 -0.266765 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636704 -0.247291 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648629 -0.250487 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619561 -0.26357 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.636704 -0.247291 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612854 -0.240901 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.710584 -0.23918 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687599 -0.233654 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.705059 -0.216195 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719314 -0.23045 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.713788 -0.207465 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.705059 -0.216195 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.701855 -0.24791 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687599 -0.233654 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.678869 -0.242384 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786005 -0.343435 8.51251e-17 RAD 0.0555556 + txt002 + SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.824791 -0.400556 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802599 -0.392663 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.821021 -0.376528 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.843843 -0.400347 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840073 -0.376319 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840701 -0.392245 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER -0.82542 -0.416482 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER -0.822279 -0.40838 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER -0.803228 -0.408589 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.734271 -0.367981 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.731279 -0.362711 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.745269 -0.348136 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.756109 -0.376044 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.767107 -0.356199 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.774956 -0.378837 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.74212 -0.390619 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.760966 -0.393412 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.739128 -0.385349 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.80634 -0.308073 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.786996 -0.316395 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802721 -0.300378 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.829184 -0.315299 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.825565 -0.307605 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.832685 -0.330849 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.813459 -0.331317 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.81696 -0.346866 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.794116 -0.339639 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.878086 -0.365674 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER -0.859887 -0.367962 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER -0.863875 -0.346241 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER -0.872736 -0.362827 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.858526 -0.343394 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER -0.849188 -0.362269 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.868748 -0.384548 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER -0.8452 -0.38399 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.85055 -0.386837 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.848999 -0.272611 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.828835 -0.281616 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.829121 -0.278432 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862893 -0.287278 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.843015 -0.293099 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.856621 -0.310951 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.862606 -0.290462 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.856335 -0.314135 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.842441 -0.299468 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.819591 -0.297057 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.814956 -0.293153 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.79807 -0.304244 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.823527 -0.320001 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.802007 -0.327188 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.822829 -0.339041 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.840413 -0.30891 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.839716 -0.32795 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.835779 -0.305006 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.793573 -0.436217 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER -0.776294 -0.419454 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.796968 -0.420728 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.815094 -0.42903 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER -0.818489 -0.413542 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER -0.819335 -0.405081 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.79442 -0.427756 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.798662 -0.403807 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER -0.777141 -0.410993 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.747522 -0.356966 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.759239 -0.339469 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.740618 -0.352002 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.750453 -0.380746 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.743549 -0.375782 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.765101 -0.387029 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.769074 -0.368213 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.783722 -0.374496 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.780791 -0.350716 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.704862 -0.392427 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.717401 -0.374248 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.714218 -0.373948 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.716744 -0.408767 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.726099 -0.390287 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.741164 -0.406927 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.719927 -0.409067 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.744347 -0.407227 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.732465 -0.390887 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.517869 -0.413579 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528508 -0.393219 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.525596 -0.395831 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.531404 -0.430134 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.539131 -0.412386 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555577 -0.426328 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534315 -0.427522 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558488 -0.423716 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544953 -0.407161 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.504962 -0.327164 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504962 -0.327164 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499428 -0.347819 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.529037 -0.375068 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530412 -0.371406 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.542624 -0.356494 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548689 -0.383497 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562276 -0.364922 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569716 -0.388263 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536477 -0.398409 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.557504 -0.403175 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.537852 -0.394747 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.612625 -0.451897 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593593 -0.436515 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.614807 -0.432663 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632624 -0.444328 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.634806 -0.425094 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.633591 -0.421376 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.61141 -0.448179 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.612377 -0.425227 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.592379 -0.432797 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.620974 -0.402865 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600381 -0.39648 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618494 -0.379986 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642207 -0.405392 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639728 -0.382513 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.642848 -0.401533 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624094 -0.421886 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624734 -0.418027 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.603501 -0.4155 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.687009 -0.375943 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687009 -0.375943 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681475 -0.396598 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.570335 -0.399584 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562269 -0.381987 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569167 -0.403942 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594185 -0.405974 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.593017 -0.410332 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.609969 -0.394768 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587286 -0.384019 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60307 -0.372813 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57922 -0.366422 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.64748 -0.317573 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643752 -0.316388 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.624481 -0.316758 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.641945 -0.338228 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618946 -0.337413 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.632683 -0.357697 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.661216 -0.337857 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.651954 -0.357326 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.657489 -0.336672 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.562847 -0.317033 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.561133 -0.338525 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.583171 -0.327827 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.568381 -0.296378 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.588706 -0.307172 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572202 -0.297216 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.546343 -0.307077 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550163 -0.307914 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544629 -0.328569 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.525642 -0.386849 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528407 -0.379645 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.538964 -0.366733 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.544812 -0.396323 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.558134 -0.376207 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566746 -0.398593 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.534255 -0.409235 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.556189 -0.411505 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.537019 -0.402031 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.504962 -0.327164 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.504962 -0.327164 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.528125 -0.318612 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.522591 -0.339267 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.499428 -0.347819 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.517056 -0.359921 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.551072 -0.299647 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.545434 -0.315344 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563547 -0.29885 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.572306 -0.302174 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.584781 -0.301377 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587901 -0.320398 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.554192 -0.318667 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569787 -0.336891 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.548554 -0.334364 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.617918 -0.415912 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.597788 -0.406911 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616439 -0.39183 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.639257 -0.417292 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.637778 -0.39321 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.640465 -0.409671 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.620605 -0.432372 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621814 -0.424751 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.600475 -0.423371 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.641183 -0.320629 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.618565 -0.328614 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.630777 -0.313702 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660835 -0.329058 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65043 -0.32213 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.65787 -0.345471 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.648623 -0.34397 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.645657 -0.360383 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.626005 -0.351955 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.687009 -0.375943 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.687009 -0.375943 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.671225 -0.356956 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.665691 -0.37761 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.681475 -0.396598 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.660156 -0.398265 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.55776 -0.446515 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5512 -0.423296 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.562617 -0.428387 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.58161 -0.452905 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.586467 -0.434777 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.5989 -0.436077 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.570193 -0.447815 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.587483 -0.430987 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563633 -0.424596 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.632748 -0.420252 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.61608 -0.419661 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638118 -0.408963 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.638282 -0.399597 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.643653 -0.388308 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.627149 -0.378352 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.616244 -0.410295 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.60511 -0.38905 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.599576 -0.409705 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.535334 -0.372012 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.555599 -0.35918 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.536327 -0.359551 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.529799 -0.392667 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.530793 -0.380205 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.54453 -0.400489 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.549071 -0.392296 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.563801 -0.400119 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.569335 -0.379464 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667 + txt002 + SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER 0.299716 -0.354293 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER 0.292196 -0.366989 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER 0.279022 -0.347717 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287162 -0.355904 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266468 -0.349329 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267088 -0.370213 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER 0.300337 -0.375177 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.280263 -0.389485 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.292817 -0.387873 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.289441 -0.362978 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER 0.270044 -0.378255 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267771 -0.35549 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30046 -0.357187 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.278789 -0.349699 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29208 -0.366673 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302733 -0.379952 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294353 -0.389438 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER 0.283335 -0.395229 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER 0.250544 -0.304702 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259421 -0.327715 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238717 -0.32307 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER 0.229788 -0.298875 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER 0.21796 -0.317244 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217908 -0.316063 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250492 -0.30352 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.238612 -0.320707 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259369 -0.326533 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.228779 -0.378635 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER 0.24293 -0.383364 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225483 -0.365937 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20493 -0.385029 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201634 -0.372331 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.195233 -0.396152 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.222377 -0.402455 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER 0.21268 -0.413578 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236529 -0.407185 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.177083 -0.319723 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198298 -0.332294 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.189464 -0.325124 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.156889 -0.330475 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.16927 -0.335876 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.157909 -0.353797 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165722 -0.337645 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166743 -0.360967 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER 0.186938 -0.350216 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.147477 -0.412573 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172167 -0.412448 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.15977 -0.39322 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13525 -0.414903 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.147543 -0.39555 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.147713 -0.417108 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.147647 -0.434131 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.16011 -0.436336 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172338 -0.434006 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER 0.282991 -0.443285 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282046 -0.4302 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271991 -0.421181 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262424 -0.453417 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251423 -0.431313 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.240911 -0.450466 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27248 -0.462437 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER 0.250967 -0.459485 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271534 -0.449353 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.204606 -0.486123 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223366 -0.470107 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.202946 -0.464339 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183578 -0.481368 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181918 -0.459584 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.18131 -0.460599 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.203998 -0.487137 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201729 -0.466367 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.222757 -0.471122 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER 0.285685 -0.449273 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27701 -0.426189 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282528 -0.436139 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271573 -0.46728 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268416 -0.454146 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248787 -0.462204 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266055 -0.45733 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.243269 -0.452254 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257381 -0.434246 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.374298 -0.269898 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER 0.362218 -0.291334 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER 0.350338 -0.270045 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379235 -0.256525 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355276 -0.256671 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.372093 -0.264588 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER 0.391115 -0.277815 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383973 -0.285878 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER 0.379036 -0.299251 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.304189 -0.304189 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29042 -0.307879 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307879 -0.29042 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328039 -0.31058 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331729 -0.29681 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33812 -0.32066 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31058 -0.328039 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32066 -0.33812 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29681 -0.331729 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.305995 -0.235688 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321516 -0.245915 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312359 -0.259438 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282145 -0.242079 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288509 -0.265828 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273816 -0.258696 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291303 -0.228556 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282974 -0.245173 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306824 -0.238783 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.385852 -0.261966 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.38141 -0.278159 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER 0.36581 -0.259422 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER 0.371598 -0.261768 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351556 -0.259225 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.352901 -0.277764 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387198 -0.280504 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER 0.368501 -0.2965 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382755 -0.296698 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.30415 -0.228803 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321516 -0.245915 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306824 -0.238783 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2803 -0.235194 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282974 -0.245173 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273816 -0.258696 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294992 -0.242326 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288509 -0.265828 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312359 -0.259438 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.32435 -0.304189 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33812 -0.307879 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32066 -0.29042 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3005 -0.31058 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29681 -0.29681 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29042 -0.32066 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317959 -0.328039 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307879 -0.33812 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331729 -0.331729 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER 0.407156 -0.334762 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER 0.388696 -0.326552 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.392275 -0.31686 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402218 -0.348135 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387337 -0.330233 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378821 -0.353299 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39864 -0.357827 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER 0.375243 -0.362991 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.380181 -0.349618 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER 0.346394 -0.386461 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.354723 -0.369843 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340031 -0.362711 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322544 -0.392851 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316181 -0.369102 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307023 -0.382624 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337237 -0.399983 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321715 -0.389757 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345565 -0.383366 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER 0.348239 -0.393346 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.354723 -0.369843 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345565 -0.383366 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324389 -0.399736 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321715 -0.389757 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307023 -0.382624 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER 0.333547 -0.386213 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316181 -0.369102 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.340031 -0.362711 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER 0.221102 -0.115471 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.220766 -0.13987 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.200597 -0.126388 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208266 -0.10569 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187762 -0.116607 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER 0.195095 -0.120308 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228435 -0.119172 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215264 -0.13379 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228099 -0.143571 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.243049 -0.18209 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218634 -0.185251 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227721 -0.168159 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.254834 -0.188974 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.239506 -0.175043 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242204 -0.199019 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER 0.245747 -0.206066 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233117 -0.216111 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221332 -0.209227 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER 0.180792 -0.15554 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER 0.19323 -0.166926 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.171251 -0.17557 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.160236 -0.142909 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER 0.150694 -0.162939 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152117 -0.141663 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.182215 -0.134265 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.174096 -0.133019 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.194652 -0.145651 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER 0.14887 -0.105335 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER 0.167242 -0.121723 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153943 -0.115741 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER 0.125414 -0.112813 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER 0.130487 -0.123219 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER 0.120331 -0.136679 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER 0.138714 -0.118795 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13363 -0.142661 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.157086 -0.135183 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0995811 -0.130858 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER 0.113639 -0.134736 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.123725 -0.135326 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0944715 -0.149528 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.118615 -0.153997 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.10342 -0.172078 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0843858 -0.148938 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0933338 -0.171487 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0984435 -0.152816 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0897843 -0.179968 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER 0.114103 -0.183804 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.105492 -0.166467 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0778128 -0.186523 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0935207 -0.173022 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0901597 -0.196914 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0864233 -0.20386 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0987702 -0.214251 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER 0.110742 -0.207696 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER 0.219088 -0.151829 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.221861 -0.163068 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205084 -0.14514 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER 0.19876 -0.155801 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER 0.184756 -0.149113 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181204 -0.171014 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215537 -0.173729 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.197981 -0.188942 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER 0.218309 -0.184969 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER 0.167942 -0.229756 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183484 -0.223214 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.16569 -0.207683 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER 0.144336 -0.234741 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER 0.142084 -0.212668 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER 0.13627 -0.233184 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER 0.162129 -0.250271 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER 0.154064 -0.248714 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177671 -0.243729 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER 0.248268 -0.22829 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2391 -0.216949 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234532 -0.207937 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER 0.233189 -0.240428 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219453 -0.220075 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208942 -0.241225 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER 0.237756 -0.249439 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER 0.213509 -0.250236 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER 0.228589 -0.238098 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185 + txt002 + SPHERE CENTER 0.01504 -0.435909 0.823149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0289993 -0.440694 0.803352 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0115452 -0.423265 0.802231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00881065 -0.442297 0.823273 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0123054 -0.429652 0.802355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0187019 -0.453468 0.8036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00864346 -0.459725 0.824394 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0012478 -0.470897 0.804721 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0226028 -0.46451 0.804597 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0903221 -0.426942 0.766429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0806307 -0.435083 0.745229 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0699989 -0.416328 0.757266 RAD 0.00617284 + txt002 + SPHERE CENTER 0.078568 -0.431037 0.787754 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0582447 -0.420423 0.77859 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0571224 -0.443274 0.787878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0891998 -0.449792 0.775717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0677542 -0.462029 0.775841 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0795084 -0.457933 0.754517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0293677 -0.364644 0.76191 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0401449 -0.385352 0.753867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0213457 -0.375512 0.741241 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0065032 -0.36543 0.771198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00151881 -0.376298 0.750529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00558411 -0.386924 0.772443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0253024 -0.37527 0.783824 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0132151 -0.396764 0.785069 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0360796 -0.395978 0.775781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0707378 -0.451803 0.786236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0461991 -0.454158 0.787639 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0561039 -0.435761 0.774481 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0824157 -0.456685 0.765035 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0677817 -0.440643 0.753281 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0695548 -0.46392 0.745238 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0725109 -0.475081 0.778193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.05965 -0.482316 0.758396 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0479721 -0.477435 0.779597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0495643 -0.373728 0.724997 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0306825 -0.382672 0.738155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.030137 -0.383722 0.713492 RAD 0.00617284 + txt002 + SPHERE CENTER -0.064627 -0.389151 0.71296 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0451997 -0.399146 0.701455 RAD 0.00617284 + txt002 + SPHERE CENTER -0.060808 -0.41352 0.714081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0651725 -0.388102 0.737623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0613535 -0.41247 0.738744 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0462908 -0.397047 0.750781 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER -0.081612 -0.459563 0.692603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0696122 -0.463589 0.713804 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0665888 -0.442243 0.701767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0691745 -0.459069 0.671279 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0541513 -0.441749 0.680442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0447373 -0.4626 0.671155 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0721979 -0.480415 0.683315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0477607 -0.483946 0.683192 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0601982 -0.48444 0.704516 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185 + txt002 + SPHERE CENTER -0.000557006 -0.523883 0.790755 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0165974 -0.51057 0.779001 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00208214 -0.49924 0.790506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0234352 -0.525392 0.781591 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0249603 -0.500749 0.781342 RAD 0.00617284 + txt002 + SPHERE CENTER -0.029159 -0.513588 0.760673 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00475566 -0.536722 0.770086 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0104794 -0.524918 0.749168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0123987 -0.523409 0.758332 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00154892 -0.540463 0.697123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0156462 -0.524673 0.705165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00538221 -0.52751 0.717791 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0227737 -0.531924 0.687835 RAD 0.00617284 + txt002 + SPHERE CENTER -0.026607 -0.518971 0.708504 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0268034 -0.507596 0.68659 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00174531 -0.529087 0.675209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00577498 -0.504759 0.673964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0154498 -0.513298 0.683251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0817008 -0.508666 0.734036 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0732807 -0.489545 0.720878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0722467 -0.488971 0.745541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0658672 -0.523298 0.746073 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0564131 -0.503602 0.757577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0416134 -0.518808 0.744951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0669012 -0.523872 0.72141 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0426474 -0.519382 0.720288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.058481 -0.504751 0.708251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556 + txt002 + SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0522053 -0.160406 0.690965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0358698 -0.178533 0.687193 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0513956 -0.171954 0.669156 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0762577 -0.165658 0.692853 RAD 0.00617284 + txt002 + SPHERE CENTER -0.075448 -0.177206 0.671044 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0839747 -0.189036 0.690969 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0607319 -0.172236 0.71089 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0684488 -0.195615 0.709006 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0443964 -0.190363 0.707118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0258737 -0.20044 0.690591 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0203763 -0.215612 0.671903 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00551963 -0.196602 0.677151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0122285 -0.200749 0.711167 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00812553 -0.196911 0.697727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00691403 -0.21623 0.713055 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0270852 -0.21976 0.705919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00794264 -0.235241 0.707807 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0215878 -0.234932 0.687231 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00705049 -0.176731 0.608675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00352517 -0.200733 0.613272 RAD 0.00617284 + txt002 + SPHERE CENTER -0.025725 -0.192673 0.60607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.020811 -0.163117 0.624003 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0394855 -0.179058 0.621398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0310463 -0.173504 0.643928 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00138875 -0.171177 0.631205 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00884647 -0.181564 0.65113 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00491406 -0.195179 0.635801 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185 + txt002 + SPHERE CENTER -0.127519 -0.195663 0.655816 RAD 0.00617284 + txt002 + SPHERE CENTER -0.108803 -0.201738 0.670732 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104303 -0.194866 0.647447 RAD 0.00617284 + txt002 + SPHERE CENTER -0.133744 -0.210551 0.637128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110528 -0.209754 0.628759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121254 -0.231514 0.633356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138245 -0.217423 0.660413 RAD 0.00617284 + txt002 + SPHERE CENTER -0.125754 -0.238386 0.656641 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119529 -0.223497 0.675329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0673141 -0.20388 0.573526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0609052 -0.198742 0.596811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0490355 -0.216456 0.584361 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0788008 -0.225098 0.568278 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0605222 -0.237674 0.579113 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0838786 -0.241177 0.586315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0906706 -0.207384 0.580727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0957484 -0.223463 0.598764 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0842617 -0.202246 0.604012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.126206 -0.291073 0.620293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110246 -0.293457 0.638981 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119897 -0.271345 0.633733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119442 -0.279219 0.599717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113132 -0.25949 0.613157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0967168 -0.269749 0.597829 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10979 -0.301332 0.604965 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0870656 -0.291862 0.603077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0938302 -0.303716 0.623653 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0942304 -0.234308 0.737733 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0714204 -0.238704 0.729364 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0854464 -0.221514 0.718528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113822 -0.241032 0.724292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.105038 -0.228237 0.705088 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110603 -0.252152 0.702483 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0997955 -0.258223 0.735128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0965768 -0.269343 0.713318 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0769856 -0.262619 0.726759 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0817333 -0.324811 0.702209 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0603366 -0.313378 0.697613 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0800146 -0.300317 0.704814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100861 -0.321838 0.686881 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0991425 -0.297345 0.689486 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0985923 -0.307433 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0811832 -0.334899 0.67968 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0789143 -0.320493 0.659755 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0597864 -0.323466 0.675083 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0076281 -0.275459 0.737359 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00142185 -0.270078 0.714074 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0167139 -0.255218 0.726523 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0305645 -0.282946 0.742607 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0396503 -0.262704 0.731771 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0472946 -0.285051 0.72457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0152725 -0.297806 0.730157 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0320026 -0.299911 0.71212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00906621 -0.292425 0.706872 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556 + txt002 + SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.190929 -0.412497 0.599471 RAD 0.00617284 + txt002 + SPHERE CENTER -0.16674 -0.417001 0.601529 RAD 0.00617284 + txt002 + SPHERE CENTER -0.174844 -0.400273 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203175 -0.419795 0.57931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.18709 -0.407571 0.565115 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191231 -0.431597 0.561208 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195071 -0.436523 0.595564 RAD 0.00617284 + txt002 + SPHERE CENTER -0.183127 -0.448325 0.577461 RAD 0.00617284 + txt002 + SPHERE CENTER -0.170881 -0.441027 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER -0.10495 -0.41922 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0911807 -0.42291 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10864 -0.40545 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128801 -0.425611 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13249 -0.411841 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138881 -0.435691 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111341 -0.44307 0.638566 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121421 -0.45315 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0975713 -0.44676 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.12515 -0.343834 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107784 -0.360946 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122476 -0.353814 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149 -0.350225 0.585275 RAD 0.00617284 + txt002 + SPHERE CENTER -0.146326 -0.360204 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155484 -0.373727 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134308 -0.357357 0.603794 RAD 0.00617284 + txt002 + SPHERE CENTER -0.140792 -0.380859 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116942 -0.374468 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.200165 -0.411775 0.505236 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189948 -0.415187 0.527454 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179342 -0.399922 0.511201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189202 -0.420888 0.485076 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168379 -0.409035 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168023 -0.433412 0.487134 RAD 0.00617284 + txt002 + SPHERE CENTER -0.199808 -0.436152 0.501329 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178629 -0.448677 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189591 -0.439564 0.523547 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.123305 -0.350719 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107784 -0.360946 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116942 -0.374468 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.147155 -0.357109 0.491041 RAD 0.00617284 + txt002 + SPHERE CENTER -0.140792 -0.380859 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155484 -0.373727 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.137998 -0.343587 0.509559 RAD 0.00617284 + txt002 + SPHERE CENTER -0.146326 -0.360204 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122476 -0.353814 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER -0.125111 -0.41922 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138881 -0.42291 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.121421 -0.40545 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.101261 -0.425611 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0975713 -0.411841 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0911807 -0.435691 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11872 -0.44307 0.450097 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10864 -0.45315 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13249 -0.44676 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185 + txt002 + SPHERE CENTER -0.174264 -0.502603 0.558526 RAD 0.00617284 + txt002 + SPHERE CENTER -0.15142 -0.495376 0.564491 RAD 0.00617284 + txt002 + SPHERE CENTER -0.170327 -0.479659 0.566757 RAD 0.00617284 + txt002 + SPHERE CENTER -0.185226 -0.49349 0.538366 RAD 0.00617284 + txt002 + SPHERE CENTER -0.18129 -0.470546 0.546597 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173345 -0.477151 0.524171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166319 -0.509207 0.536101 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154437 -0.492868 0.521905 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143475 -0.501981 0.542066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0810612 -0.508376 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0745774 -0.484874 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0837352 -0.498397 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104911 -0.514767 0.503387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107585 -0.504787 0.525813 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122277 -0.497655 0.507294 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0957534 -0.501244 0.484868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11312 -0.484132 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0892696 -0.477742 0.488775 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185 + txt002 + SPHERE CENTER -0.082906 -0.501491 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0745774 -0.484874 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0892696 -0.477742 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.106756 -0.507882 0.597621 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11312 -0.484132 0.599887 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122277 -0.497655 0.581368 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0920638 -0.515014 0.579103 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107585 -0.504787 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0837352 -0.498397 0.56285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556 + txt002 + SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.225282 -0.612732 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.22113 -0.60221 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.212428 -0.591695 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206686 -0.62329 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193832 -0.602253 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.183939 -0.623325 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215388 -0.633805 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.192641 -0.63384 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.211236 -0.623283 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.243024 -0.542885 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219861 -0.534333 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.243024 -0.542885 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219861 -0.534333 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248559 -0.563539 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23093 -0.575642 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.23093 -0.575642 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.200547 -0.527458 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205161 -0.540303 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187702 -0.522843 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.179472 -0.531074 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.166627 -0.526459 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.163011 -0.547535 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.196931 -0.548533 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.18047 -0.564994 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201546 -0.561378 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185 + txt002 + SPHERE CENTER 0.132649 -0.643128 0.680674 RAD 0.00617284 + txt002 + SPHERE CENTER 0.152367 -0.631785 0.671072 RAD 0.00617284 + txt002 + SPHERE CENTER 0.133263 -0.618482 0.679302 RAD 0.00617284 + txt002 + SPHERE CENTER 0.111266 -0.643283 0.668328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11188 -0.618637 0.666956 RAD 0.00617284 + txt002 + SPHERE CENTER 0.109601 -0.632094 0.64638 RAD 0.00617284 + txt002 + SPHERE CENTER 0.130371 -0.656585 0.660098 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128706 -0.645397 0.63815 RAD 0.00617284 + txt002 + SPHERE CENTER 0.150088 -0.645242 0.650495 RAD 0.00617284 + txt002 + SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185 + txt002 + SPHERE CENTER 0.11011 -0.549659 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.132596 -0.555684 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.118927 -0.53924 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.09005 -0.557065 0.687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0988668 -0.546646 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0924762 -0.570497 0.666541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.103719 -0.573509 0.699462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.106145 -0.58694 0.678886 RAD 0.00617284 + txt002 + SPHERE CENTER 0.126205 -0.579534 0.691232 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0609772 -0.591664 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.643096 RAD 0.00617284 + txt002 + SPHERE CENTER 0.076761 -0.572676 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0609772 -0.591664 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.076761 -0.572676 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.593714 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0665116 -0.612319 0.618405 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0878298 -0.613986 0.606059 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0878298 -0.613986 0.630751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185 + txt002 + SPHERE CENTER 0.189742 -0.660425 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.196144 -0.636618 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.185725 -0.645434 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.165892 -0.666816 0.599616 RAD 0.00617284 + txt002 + SPHERE CENTER 0.161875 -0.651825 0.618821 RAD 0.00617284 + txt002 + SPHERE CENTER 0.148444 -0.649399 0.598245 RAD 0.00617284 + txt002 + SPHERE CENTER 0.17631 -0.657999 0.57904 RAD 0.00617284 + txt002 + SPHERE CENTER 0.158862 -0.640582 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.182712 -0.634191 0.577669 RAD 0.00617284 + txt002 + SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.107144 -0.620861 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.119989 -0.625475 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102529 -0.608016 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.11076 -0.599785 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.106145 -0.58694 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.127221 -0.583324 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.128219 -0.617245 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.14468 -0.600784 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.141064 -0.621859 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185 + txt002 + SPHERE CENTER 0.203972 -0.574809 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.181486 -0.568784 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.201546 -0.561378 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.217641 -0.591253 0.549693 RAD 0.00617284 + txt002 + SPHERE CENTER 0.215215 -0.577822 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.208824 -0.601672 0.57027 RAD 0.00617284 + txt002 + SPHERE CENTER 0.197581 -0.598659 0.537348 RAD 0.00617284 + txt002 + SPHERE CENTER 0.188764 -0.609078 0.557924 RAD 0.00617284 + txt002 + SPHERE CENTER 0.175095 -0.592634 0.545578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0316054 -0.646362 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0478 -0.627981 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0287309 -0.625173 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00868865 -0.644258 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00581415 -0.623069 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00196644 -0.623773 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0277577 -0.647066 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0210355 -0.62658 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0439523 -0.628685 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.105299 -0.593994 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.100664 -0.582384 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0926585 -0.572783 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0869303 -0.604941 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0742898 -0.58373 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0639267 -0.604278 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0949359 -0.614541 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0719323 -0.613879 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.090301 -0.602932 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0177119 -0.584898 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0364224 -0.580268 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0185345 -0.56353 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00489609 -0.589197 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00407348 -0.567829 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00879364 -0.588867 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0129918 -0.605935 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00909422 -0.605605 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0317022 -0.601305 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0473753 -0.5935 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0308315 -0.595617 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0399691 -0.57344 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0409921 -0.582752 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0335859 -0.562692 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0180651 -0.574121 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0318545 -0.604929 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00892756 -0.596298 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0153107 -0.607046 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0495897 -0.530389 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0261165 -0.53532 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER -0.031221 -0.519442 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0589904 -0.538628 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0406217 -0.527681 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0449178 -0.551799 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0538859 -0.554507 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0398133 -0.567678 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0304127 -0.559438 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0212225 -0.48882 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00896145 -0.491256 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00194055 -0.497372 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0286287 -0.50888 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00546563 -0.517432 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0237738 -0.531375 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0395307 -0.502764 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0346758 -0.525259 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0272696 -0.505199 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0604766 -0.607302 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0678827 -0.587242 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0604766 -0.607302 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0366265 -0.613693 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0366265 -0.613693 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0201827 -0.600023 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0440327 -0.593633 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0275889 -0.579964 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0514389 -0.573573 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0542684 -0.523344 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0591566 -0.541988 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0358996 -0.534291 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0472252 -0.501435 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0288565 -0.512382 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0450702 -0.49817 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0704822 -0.509132 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0683272 -0.505868 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0753703 -0.527777 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.118381 -0.551884 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0944221 -0.550745 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.103361 -0.536664 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.125404 -0.562225 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.110383 -0.547006 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.108468 -0.571428 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.116465 -0.576307 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0995293 -0.58551 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0925065 -0.575168 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556 + txt002 + SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185 + txt002 + SPHERE CENTER 0.326876 -0.484182 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302705 -0.488171 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310432 -0.470513 0.39372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337778 -0.490299 0.402668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321334 -0.476629 0.415013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.324509 -0.500404 0.420874 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330051 -0.507957 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316783 -0.518062 0.405442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.305881 -0.511946 0.384149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185 + txt002 + SPHERE CENTER 0.279233 -0.426389 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286276 -0.448298 0.383837 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263449 -0.445377 0.37489 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262789 -0.41272 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.247006 -0.431707 0.387235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.253389 -0.420959 0.408529 RAD 0.00617284 + txt002 + SPHERE CENTER 0.285616 -0.415641 0.396183 RAD 0.00617284 + txt002 + SPHERE CENTER 0.276216 -0.42388 0.417476 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29266 -0.43755 0.40513 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185 + txt002 + SPHERE CENTER 0.320401 -0.436971 0.454201 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3148 -0.455413 0.438769 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29902 -0.436675 0.441856 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30814 -0.434535 0.475494 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286759 -0.434239 0.463149 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290278 -0.450543 0.481355 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32392 -0.453274 0.472408 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306057 -0.469281 0.478269 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318318 -0.471717 0.456976 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185 + txt002 + SPHERE CENTER 0.314604 -0.562288 0.439705 RAD 0.00617284 + txt002 + SPHERE CENTER 0.310183 -0.541186 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.306499 -0.542501 0.45205 RAD 0.00617284 + txt002 + SPHERE CENTER 0.29581 -0.575569 0.448652 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287705 -0.555781 0.460998 RAD 0.00617284 + txt002 + SPHERE CENTER 0.272595 -0.567748 0.445566 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299494 -0.574255 0.424272 RAD 0.00617284 + txt002 + SPHERE CENTER 0.276279 -0.566433 0.421186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295073 -0.553152 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185 + txt002 + SPHERE CENTER 0.298839 -0.507811 0.512531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.302049 -0.505577 0.488152 RAD 0.00617284 + txt002 + SPHERE CENTER 0.287442 -0.489718 0.500186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27711 -0.515392 0.521479 RAD 0.00617284 + txt002 + SPHERE CENTER 0.265714 -0.497299 0.509133 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258591 -0.520738 0.506047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291716 -0.531251 0.509445 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273198 -0.536597 0.494013 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294927 -0.529016 0.485065 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185 + txt002 + SPHERE CENTER 0.227186 -0.567359 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.246777 -0.555283 0.482603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.227528 -0.54267 0.49155 RAD 0.00617284 + txt002 + SPHERE CENTER 0.205805 -0.567063 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.206147 -0.542374 0.479204 RAD 0.00617284 + txt002 + SPHERE CENTER 0.204014 -0.554691 0.457911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.225054 -0.579676 0.470257 RAD 0.00617284 + txt002 + SPHERE CENTER 0.223263 -0.567305 0.448964 RAD 0.00617284 + txt002 + SPHERE CENTER 0.244644 -0.567601 0.46131 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185 + txt002 + SPHERE CENTER 0.275127 -0.549787 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282533 -0.529727 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275127 -0.549787 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251277 -0.556177 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.251277 -0.556177 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.234833 -0.542508 0.372739 RAD 0.00617284 + txt002 + SPHERE CENTER 0.258683 -0.536117 0.348047 RAD 0.00617284 + txt002 + SPHERE CENTER 0.242239 -0.522448 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.266089 -0.516058 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185 + txt002 + SPHERE CENTER 0.17251 -0.549603 0.412239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.191778 -0.549105 0.427671 RAD 0.00617284 + txt002 + SPHERE CENTER 0.177908 -0.528912 0.424584 RAD 0.00617284 + txt002 + SPHERE CENTER 0.173421 -0.537136 0.390945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.178819 -0.516445 0.403291 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193601 -0.524171 0.385084 RAD 0.00617284 + txt002 + SPHERE CENTER 0.187292 -0.557329 0.394032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.207471 -0.544363 0.388171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.20656 -0.556831 0.409464 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185 + txt002 + SPHERE CENTER 0.209819 -0.457868 0.353908 RAD 0.00617284 + txt002 + SPHERE CENTER 0.210053 -0.453963 0.378288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2312 -0.458164 0.366254 RAD 0.00617284 + txt002 + SPHERE CENTER 0.214674 -0.480363 0.344961 RAD 0.00617284 + txt002 + SPHERE CENTER 0.236055 -0.480659 0.357307 RAD 0.00617284 + txt002 + SPHERE CENTER 0.219763 -0.498954 0.360393 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193527 -0.476163 0.356995 RAD 0.00617284 + txt002 + SPHERE CENTER 0.198616 -0.494753 0.372427 RAD 0.00617284 + txt002 + SPHERE CENTER 0.193761 -0.472258 0.381374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER -0.102403 -0.871334 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100577 -0.862937 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113406 -0.850164 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER -0.123961 -0.880044 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER -0.134964 -0.858873 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143694 -0.880356 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111133 -0.892817 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER -0.130866 -0.893129 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER -0.109307 -0.884419 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0654286 -0.811594 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0820122 -0.820516 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0876595 -0.80102 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0688817 -0.814468 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0911125 -0.803895 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0889183 -0.826265 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0632344 -0.833964 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER -0.083271 -0.845761 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER -0.079818 -0.842886 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.120908 -0.781177 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113462 -0.795477 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13149 -0.778973 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143095 -0.784778 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153678 -0.782573 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.157836 -0.802678 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER -0.125067 -0.801282 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.139808 -0.819182 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.11762 -0.815582 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER -0.197746 -0.891905 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.175383 -0.884286 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.193701 -0.867957 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216576 -0.89169 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212531 -0.867741 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER -0.213043 -0.883856 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER -0.198259 -0.908019 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194726 -0.900186 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER -0.175896 -0.900401 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.212743 -0.794108 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER -0.189621 -0.802328 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER -0.199907 -0.788345 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER -0.230849 -0.803282 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER -0.218012 -0.797518 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225832 -0.820676 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220563 -0.817265 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215547 -0.83466 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER -0.197441 -0.825486 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.25245 -0.843832 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233837 -0.846687 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.235043 -0.826426 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248234 -0.845385 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER -0.230827 -0.827978 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225404 -0.849792 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.247028 -0.865646 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224198 -0.870053 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER -0.228415 -0.868501 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER -0.128672 -0.926643 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER -0.1198 -0.904034 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER -0.133221 -0.90826 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.152902 -0.930993 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.157451 -0.912609 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER -0.16826 -0.912733 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER -0.139481 -0.926768 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154838 -0.908508 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER -0.130608 -0.904159 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.188167 -0.894035 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172046 -0.89378 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195141 -0.885777 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195558 -0.872807 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER -0.202532 -0.864549 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER -0.186828 -0.851325 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172463 -0.880811 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163733 -0.859328 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER -0.156342 -0.880556 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0905999 -0.853284 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111382 -0.840233 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0940331 -0.839638 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.086577 -0.873178 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0900102 -0.859532 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103336 -0.880022 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER -0.103926 -0.873773 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120685 -0.880618 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124708 -0.860723 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.103063 -0.66171 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0876683 -0.673446 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0800983 -0.653258 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0992478 -0.662574 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0762832 -0.654121 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0800382 -0.675172 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.106818 -0.682761 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0876083 -0.69536 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0914233 -0.694497 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0547519 -0.662466 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0439578 -0.682791 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0332597 -0.660752 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0647085 -0.645962 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0432164 -0.644249 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0638711 -0.649783 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0754066 -0.668 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0745692 -0.671821 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0646126 -0.688325 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0446211 -0.604582 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0239663 -0.599047 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0446211 -0.604582 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0608821 -0.693716 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0652402 -0.694884 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0496759 -0.677932 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0389272 -0.700615 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.027721 -0.684831 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0213304 -0.708681 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0544915 -0.717566 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0368947 -0.725632 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0588496 -0.718734 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00328338 -0.628657 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0152909 -0.642244 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.000378614 -0.630031 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.026624 -0.636097 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.022962 -0.637471 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0313903 -0.657124 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0117117 -0.648309 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.016478 -0.669336 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.00686255 -0.661896 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0310802 -0.720593 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00820099 -0.718114 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0246945 -0.7 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0501007 -0.723713 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.043715 -0.70312 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.046242 -0.724354 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0336072 -0.741827 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0297485 -0.742467 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.010728 -0.739347 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0887955 -0.750021 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0813312 -0.732161 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.078459 -0.729506 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0721458 -0.763719 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0618093 -0.743204 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0480318 -0.759557 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.075018 -0.766375 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.050904 -0.762212 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0675537 -0.748514 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00415829 -0.786629 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.024813 -0.781094 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00415829 -0.786629 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0542122 -0.747099 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0550267 -0.7241 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0553974 -0.743371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0339282 -0.760836 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0351134 -0.757108 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0144587 -0.751574 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0335575 -0.741565 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.014088 -0.732303 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0343719 -0.718566 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.125845 -0.597249 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.12123 -0.610094 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138689 -0.592635 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14692 -0.600865 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.159765 -0.596251 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.163381 -0.617326 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.12946 -0.618324 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.145921 -0.634785 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124846 -0.631169 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0833673 -0.612676 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.624779 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10653 -0.604124 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0833673 -0.612676 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10653 -0.604124 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.624779 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0778329 -0.633331 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0954616 -0.645433 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0954616 -0.645433 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.141271 -0.554772 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13272 -0.577935 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.5724 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.161926 -0.549237 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.174029 -0.566866 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.174029 -0.566866 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141271 -0.554772 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.5724 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.13272 -0.577935 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.216282 -0.61945 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.193796 -0.625476 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207465 -0.609032 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.236341 -0.626857 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.227525 -0.616438 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233915 -0.640288 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.222672 -0.6433 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220246 -0.656732 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200186 -0.649326 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.2291 -0.567237 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209804 -0.576452 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.209804 -0.576452 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.24422 -0.582357 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.591572 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240045 -0.606693 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.24422 -0.582357 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240045 -0.606693 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.591572 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.265414 -0.661455 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.663122 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.249631 -0.642468 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.265414 -0.661455 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.249631 -0.642468 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.663122 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.25988 -0.68211 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238562 -0.683777 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.238562 -0.683777 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.148046 -0.687686 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.137627 -0.678869 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.154071 -0.6652 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171896 -0.694077 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177921 -0.671591 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER -0.185327 -0.691651 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.155452 -0.707746 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER -0.168883 -0.70532 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.145033 -0.698929 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.190051 -0.736819 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171063 -0.721035 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.715501 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210706 -0.731284 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212373 -0.709966 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.212373 -0.709966 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.190051 -0.736819 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.715501 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171063 -0.721035 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.095832 -0.700504 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.105047 -0.681209 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.105047 -0.681209 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110952 -0.715624 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.696329 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135288 -0.711449 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER -0.110952 -0.715624 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135288 -0.711449 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.696329 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343435 -0.786005 8.51251e-17 RAD 0.0555556 + txt002 + SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER -0.400556 -0.824791 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376528 -0.821021 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392663 -0.802599 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.416482 -0.82542 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408589 -0.803228 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER -0.40838 -0.822279 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400347 -0.843843 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392245 -0.840701 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376319 -0.840073 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.308073 -0.80634 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.300378 -0.802721 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316395 -0.786996 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.331317 -0.813459 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339639 -0.794116 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.346866 -0.81696 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.315299 -0.829184 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.330849 -0.832685 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307605 -0.825565 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.367981 -0.734271 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.348136 -0.745269 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362711 -0.731279 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390619 -0.74212 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.385349 -0.739128 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.393412 -0.760966 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376044 -0.756109 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378837 -0.774956 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356199 -0.767107 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER -0.436217 -0.793573 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER -0.420728 -0.796968 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419454 -0.776294 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427756 -0.79442 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410993 -0.777141 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403807 -0.798662 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER -0.42903 -0.815094 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405081 -0.819335 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.413542 -0.818489 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.392427 -0.704862 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.373948 -0.714218 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374248 -0.717401 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409067 -0.719927 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390887 -0.732465 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407227 -0.744347 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408767 -0.716744 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406927 -0.741164 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.390287 -0.726099 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER -0.356966 -0.747522 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER -0.352002 -0.740618 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339469 -0.759239 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER -0.368213 -0.769074 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER -0.350716 -0.780791 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER -0.374496 -0.783722 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380746 -0.750453 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER -0.387029 -0.765101 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375782 -0.743549 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER -0.365674 -0.878086 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER -0.346241 -0.863875 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER -0.367962 -0.859887 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384548 -0.868748 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER -0.386837 -0.85055 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER -0.38399 -0.8452 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362827 -0.872736 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER -0.362269 -0.849188 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER -0.343394 -0.858526 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER -0.297057 -0.819591 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.304244 -0.79807 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293153 -0.814956 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER -0.30891 -0.840413 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.305006 -0.835779 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32795 -0.839716 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320001 -0.823527 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339041 -0.822829 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327188 -0.802007 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER -0.272611 -0.848999 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER -0.278432 -0.829121 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.281616 -0.828835 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER -0.290462 -0.862606 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER -0.299468 -0.842441 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.314135 -0.856335 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.287278 -0.862893 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER -0.310951 -0.856621 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER -0.293099 -0.843015 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.386849 -0.525642 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366733 -0.538964 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379645 -0.528407 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409235 -0.534255 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.402031 -0.537019 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.411505 -0.556189 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396323 -0.544812 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398593 -0.566746 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.376207 -0.558134 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.299647 -0.551072 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.29885 -0.563547 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.315344 -0.545434 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318667 -0.554192 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.334364 -0.548554 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.336891 -0.569787 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.302174 -0.572306 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.320398 -0.587901 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.301377 -0.584781 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.327164 -0.504962 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.347819 -0.499428 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327164 -0.504962 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER -0.446515 -0.55776 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428387 -0.562617 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423296 -0.5512 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.447815 -0.570193 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER -0.424596 -0.563633 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.430987 -0.587483 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER -0.452905 -0.58161 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436077 -0.5989 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER -0.434777 -0.586467 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.372012 -0.535334 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359551 -0.536327 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.35918 -0.555599 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392296 -0.549071 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379464 -0.569335 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400119 -0.563801 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.392667 -0.529799 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.400489 -0.54453 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.380205 -0.530793 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.420252 -0.632748 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408963 -0.638118 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.419661 -0.61608 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410295 -0.616244 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409705 -0.599576 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.38905 -0.60511 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399597 -0.638282 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.378352 -0.627149 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388308 -0.643653 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.415912 -0.617918 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39183 -0.616439 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.406911 -0.597788 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER -0.432372 -0.620605 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423371 -0.600475 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER -0.424751 -0.621814 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.417292 -0.639257 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER -0.409671 -0.640465 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39321 -0.637778 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.375943 -0.687009 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396598 -0.681475 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375943 -0.687009 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.320629 -0.641183 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.313702 -0.630777 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328614 -0.618565 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.34397 -0.648623 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.351955 -0.626005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.360383 -0.645657 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.329058 -0.660835 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.345471 -0.65787 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.32213 -0.65043 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.413579 -0.517869 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.395831 -0.525596 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.393219 -0.528508 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.427522 -0.534315 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.407161 -0.544953 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.423716 -0.558488 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.430134 -0.531404 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.426328 -0.555577 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.412386 -0.539131 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.375068 -0.529037 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356494 -0.542624 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.371406 -0.530412 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398409 -0.536477 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.394747 -0.537852 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403175 -0.557504 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.383497 -0.548689 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388263 -0.569716 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.364922 -0.562276 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.327164 -0.504962 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.347819 -0.499428 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.359921 -0.517056 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327164 -0.504962 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.339267 -0.522591 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.318612 -0.528125 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.399584 -0.570335 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.403942 -0.569167 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.381987 -0.562269 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.384019 -0.587286 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER -0.366422 -0.57922 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.372813 -0.60307 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405974 -0.594185 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER -0.394768 -0.609969 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER -0.410332 -0.593017 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.317033 -0.562847 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.327827 -0.583171 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338525 -0.561133 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307077 -0.546343 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.328569 -0.544629 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307914 -0.550163 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.296378 -0.568381 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.297216 -0.572202 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.307172 -0.588706 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.317573 -0.64748 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316758 -0.624481 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.316388 -0.643752 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337857 -0.661216 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER -0.336672 -0.657489 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357326 -0.651954 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER -0.338228 -0.641945 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER -0.357697 -0.632683 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.337413 -0.618946 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.451897 -0.612625 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER -0.432663 -0.614807 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER -0.436515 -0.593593 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.448179 -0.61141 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER -0.432797 -0.592379 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425227 -0.612377 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.444328 -0.632624 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER -0.421376 -0.633591 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER -0.425094 -0.634806 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.375943 -0.687009 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.396598 -0.681475 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.398265 -0.660156 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.375943 -0.687009 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.37761 -0.665691 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER -0.356956 -0.671225 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER -0.402865 -0.620974 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER -0.379986 -0.618494 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.39648 -0.600381 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.421886 -0.624094 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER -0.4155 -0.603501 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER -0.418027 -0.624734 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER -0.405392 -0.642207 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.401533 -0.642848 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.382513 -0.639728 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0977075 -0.909872 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0997803 -0.886771 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104052 -0.891613 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER -0.117896 -0.922453 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124241 -0.904194 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER -0.140158 -0.911935 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER -0.113625 -0.917612 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135886 -0.907093 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115698 -0.894512 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0627848 -0.826973 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0805529 -0.830202 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER -0.083104 -0.81296 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0666419 -0.833656 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0869612 -0.819643 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0882673 -0.843568 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0640908 -0.850898 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0857161 -0.860809 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0818589 -0.854126 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER -0.11253 -0.867758 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107566 -0.860854 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER -0.122142 -0.846864 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135168 -0.875606 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER -0.14478 -0.854713 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER -0.152843 -0.876551 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120593 -0.889596 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER -0.138267 -0.890541 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115629 -0.882692 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER -0.201143 -0.920038 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER -0.17991 -0.910616 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER -0.201384 -0.900209 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER -0.214335 -0.907705 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER -0.214576 -0.887876 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER -0.206294 -0.88595 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192861 -0.918112 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER -0.18482 -0.896357 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER -0.171628 -0.90869 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER -0.209658 -0.868948 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER -0.186008 -0.865773 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER -0.202239 -0.84746 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER -0.226988 -0.870808 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.219569 -0.84932 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER -0.220667 -0.869493 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210757 -0.889121 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER -0.204436 -0.887806 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER -0.187106 -0.885946 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER -0.252002 -0.824206 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER -0.234336 -0.827952 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER -0.231282 -0.810793 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER -0.248342 -0.830999 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER -0.227621 -0.817586 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER -0.227016 -0.841538 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER -0.251396 -0.848158 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER -0.23007 -0.858698 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER -0.23373 -0.851905 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER -0.130609 -0.876203 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.124356 -0.857385 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128522 -0.879733 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153561 -0.885283 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER -0.151474 -0.888813 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER -0.170259 -0.875546 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.149395 -0.862935 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER -0.166093 -0.853198 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER -0.143141 -0.844117 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER -0.180723 -0.785723 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER -0.173028 -0.782104 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER -0.161937 -0.798991 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER -0.192576 -0.806546 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER -0.17379 -0.819813 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196734 -0.82375 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203667 -0.78966 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207825 -0.806864 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER -0.195972 -0.786041 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER -0.108311 -0.798532 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER -0.119537 -0.819589 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131037 -0.797989 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100522 -0.78294 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER -0.123249 -0.782397 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.10396 -0.788405 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0890219 -0.80454 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0924597 -0.810005 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100248 -0.825597 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.200937 -0.595399 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.194794 -0.591462 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.180539 -0.605717 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.208929 -0.617647 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188531 -0.627965 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.210779 -0.635958 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.223185 -0.603392 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.225035 -0.621702 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.217042 -0.599454 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.260374 -0.607636 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240901 -0.612854 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.237705 -0.600929 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.26357 -0.619561 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.240901 -0.612854 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.247291 -0.636704 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.266765 -0.631486 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.250487 -0.648629 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.247291 -0.636704 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.185011 -0.549732 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.167868 -0.56601 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179793 -0.569205 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.208861 -0.556122 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203643 -0.575596 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.215568 -0.578791 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.196936 -0.552927 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.203643 -0.575596 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.179793 -0.569205 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.131575 -0.625593 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.15071 -0.6381 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.146508 -0.614836 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.112102 -0.620375 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.127034 -0.609618 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111763 -0.627664 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.116304 -0.643639 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.115965 -0.650927 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.135439 -0.656145 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.105912 -0.577317 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111438 -0.600302 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128897 -0.582843 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.114642 -0.568587 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.137627 -0.574113 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.128897 -0.582843 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0971825 -0.586046 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.111438 -0.600302 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.102708 -0.609032 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0783272 -0.656415 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0978007 -0.651197 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0946054 -0.639272 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0815225 -0.66834 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0978007 -0.651197 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104191 -0.675047 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0847178 -0.680265 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.107387 -0.686972 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.104191 -0.675047 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER -0.182351 -0.708085 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165569 -0.700531 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.188833 -0.704733 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER -0.200397 -0.692813 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER -0.206879 -0.689462 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER -0.201661 -0.669989 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177134 -0.688611 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER -0.178397 -0.665787 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER -0.160351 -0.681058 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.136231 -0.731779 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.129524 -0.70911 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141449 -0.712305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.160081 -0.738169 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165299 -0.718696 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.177224 -0.721891 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.148156 -0.734974 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER -0.165299 -0.718696 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.141449 -0.712305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER -0.23918 -0.710584 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216195 -0.705059 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233654 -0.687599 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER -0.24791 -0.701855 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.242384 -0.678869 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER -0.233654 -0.687599 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.23045 -0.719314 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER -0.216195 -0.705059 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER -0.207465 -0.713788 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0667914 -0.661946 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0511945 -0.680354 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0452771 -0.65711 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0787954 -0.650366 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0572811 -0.64553 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0752026 -0.657195 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0847128 -0.673611 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.08112 -0.680439 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.069116 -0.692019 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.000226782 -0.634953 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0122343 -0.635947 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.012605 -0.655218 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0205108 -0.64869 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00767898 -0.668955 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0283337 -0.66342 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0208815 -0.629419 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0287044 -0.644149 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00842045 -0.630413 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0446211 -0.604582 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0239663 -0.599047 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0118635 -0.616676 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0446211 -0.604582 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0325183 -0.62221 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.053173 -0.627745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.107813 -0.706291 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0896851 -0.701434 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0909853 -0.689001 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.102723 -0.717709 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0858949 -0.700418 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0795043 -0.724268 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.101422 -0.730141 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0782041 -0.736701 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0832945 -0.725284 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0721382 -0.650692 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.072935 -0.663167 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0564414 -0.645053 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0531177 -0.653812 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0374209 -0.648173 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.034894 -0.669407 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0696112 -0.671925 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0513875 -0.68752 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.070408 -0.6844 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0511556 -0.740802 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0580833 -0.730397 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.043171 -0.718185 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.027815 -0.748242 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0198304 -0.725625 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0114021 -0.745277 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0427273 -0.760455 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0263144 -0.757489 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0496549 -0.750049 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.0650768 -0.746894 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0607735 -0.723153 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0653796 -0.739183 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.04833 -0.764065 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0486329 -0.756355 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.02728 -0.757496 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0437239 -0.748035 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0226739 -0.741466 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0394207 -0.724295 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER -0.00415829 -0.786629 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER -0.024813 -0.781094 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER -0.02648 -0.759776 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00415829 -0.786629 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0058253 -0.76531 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.0148294 -0.770845 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER -0.0484665 -0.732368 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0371781 -0.737738 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0478762 -0.715699 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0385099 -0.715864 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0379196 -0.699195 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0172649 -0.70473 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0278118 -0.737902 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER -0.00656677 -0.726768 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER -0.0165234 -0.743272 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667 + txt002 + SPHERE CENTER 0.690426 -0.508983 1.83812e-16 RAD 0.0555556 + txt002 + SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185 + txt002 + SPHERE CENTER 0.767658 -0.47411 -0.0436186 RAD 0.00617284 + txt002 + SPHERE CENTER 0.749038 -0.489758 -0.0478724 RAD 0.00617284 + txt002 + SPHERE CENTER 0.744501 -0.467528 -0.0381316 RAD 0.00617284 + txt002 + SPHERE CENTER 0.774562 -0.469146 -0.0204376 RAD 0.00617284 + txt002 + SPHERE CENTER 0.751405 -0.462564 -0.0149506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.762845 -0.47983 -0.00151032 RAD 0.00617284 + txt002 + SPHERE CENTER 0.779098 -0.491377 -0.0301783 RAD 0.00617284 + txt002 + SPHERE CENTER 0.767382 -0.502061 -0.0112511 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760478 -0.507025 -0.0344321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.703418 -0.481931 -0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.716184 -0.491475 -0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.694124 -0.500827 -0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682902 -0.46889 -0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.673608 -0.487786 -0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675152 -0.465393 -0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704962 -0.459538 -0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697211 -0.456041 -0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.717727 -0.469082 -0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.714226 -0.418941 -0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.724842 -0.44101 -0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.704751 -0.43889 -0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.692283 -0.414215 -0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682808 -0.434163 -0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680957 -0.431557 0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.712374 -0.416335 0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701048 -0.433677 0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.722991 -0.438403 0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185 + txt002 + SPHERE CENTER 0.773394 -0.506594 0.0468401 RAD 0.00617284 + txt002 + SPHERE CENTER 0.764807 -0.507924 0.0237283 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755462 -0.491321 0.0394341 RAD 0.00617284 + txt002 + SPHERE CENTER 0.759287 -0.514012 0.065698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.741355 -0.49874 0.058292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.736593 -0.522762 0.0614442 RAD 0.00617284 + txt002 + SPHERE CENTER 0.768632 -0.530616 0.0499923 RAD 0.00617284 + txt002 + SPHERE CENTER 0.745938 -0.539365 0.0457385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760045 -0.531946 0.0268805 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.709346 -0.447385 0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.721188 -0.46231 0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.703286 -0.447429 0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.685816 -0.451907 0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.679757 -0.451951 0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674129 -0.471354 0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.703718 -0.466788 0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.692031 -0.486235 0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.71556 -0.481713 0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185 + txt002 + SPHERE CENTER 0.693658 -0.538818 0.0904587 RAD 0.00617284 + txt002 + SPHERE CENTER 0.708875 -0.534075 0.0716007 RAD 0.00617284 + txt002 + SPHERE CENTER 0.691194 -0.517905 0.0775657 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669969 -0.544274 0.0861356 RAD 0.00617284 + txt002 + SPHERE CENTER 0.667505 -0.523361 0.0732426 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661495 -0.544988 0.0629546 RAD 0.00617284 + txt002 + SPHERE CENTER 0.687649 -0.560445 0.0801706 RAD 0.00617284 + txt002 + SPHERE CENTER 0.679176 -0.561158 0.0569896 RAD 0.00617284 + txt002 + SPHERE CENTER 0.702866 -0.555702 0.0613127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185 + txt002 + SPHERE CENTER 0.767402 -0.560084 -0.0233819 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755145 -0.53997 -0.0307879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.760285 -0.543179 -0.00685171 RAD 0.00617284 + txt002 + SPHERE CENTER 0.755725 -0.577608 -0.0104889 RAD 0.00617284 + txt002 + SPHERE CENTER 0.748608 -0.560703 0.00604126 RAD 0.00617284 + txt002 + SPHERE CENTER 0.731791 -0.575017 -0.00500196 RAD 0.00617284 + txt002 + SPHERE CENTER 0.750585 -0.574398 -0.0344251 RAD 0.00617284 + txt002 + SPHERE CENTER 0.726651 -0.571808 -0.0289382 RAD 0.00617284 + txt002 + SPHERE CENTER 0.738328 -0.554284 -0.0418311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185 + txt002 + SPHERE CENTER 0.682851 -0.601808 0.0202367 RAD 0.00617284 + txt002 + SPHERE CENTER 0.700216 -0.58454 0.0170845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680568 -0.579842 0.0312799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.660588 -0.59895 0.00994863 RAD 0.00617284 + txt002 + SPHERE CENTER 0.658304 -0.576984 0.0209919 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65569 -0.578824 -0.00349164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680237 -0.603648 -0.0042468 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675339 -0.583522 -0.0176871 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697602 -0.58638 -0.00739901 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185 + txt002 + SPHERE CENTER 0.687731 -0.573364 -0.070222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.703871 -0.56324 -0.0545162 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682033 -0.571303 -0.0462858 RAD 0.00617284 + txt002 + SPHERE CENTER 0.667055 -0.561258 -0.076187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661356 -0.559196 -0.0522508 RAD 0.00617284 + txt002 + SPHERE CENTER 0.662518 -0.539027 -0.0664462 RAD 0.00617284 + txt002 + SPHERE CENTER 0.688893 -0.553195 -0.0844174 RAD 0.00617284 + txt002 + SPHERE CENTER 0.684356 -0.530964 -0.0746767 RAD 0.00617284 + txt002 + SPHERE CENTER 0.705033 -0.543071 -0.0687117 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.626214 -0.316595 -0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624401 -0.335868 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606941 -0.318408 -0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.631217 -0.294133 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.611945 -0.295946 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634407 -0.290942 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.648676 -0.311592 -0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651867 -0.308402 -0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.646863 -0.330864 -0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.623201 -0.403702 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.635431 -0.385946 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62031 -0.401066 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.598766 -0.401947 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.595876 -0.399312 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586561 -0.382437 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.613886 -0.386827 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.601681 -0.367317 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626116 -0.369071 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.539107 -0.319608 -0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541743 -0.322499 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.556863 -0.307378 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555982 -0.328923 -0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.573738 -0.316693 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575492 -0.341128 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.540862 -0.344043 -0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560372 -0.356248 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.543497 -0.346933 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.637402 -0.248969 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.646193 -0.271807 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625088 -0.268363 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617105 -0.241698 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604791 -0.261092 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605598 -0.257264 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638209 -0.245142 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626702 -0.260708 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647 -0.267979 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.550934 -0.258608 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.613271 -0.265398 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627912 -0.281225 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610787 -0.26842 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.589337 -0.270625 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.586853 -0.273647 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.580045 -0.291679 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.606463 -0.283431 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.59717 -0.304484 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621104 -0.299257 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.69384 -0.305407 -0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674446 -0.317721 -0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671002 -0.296616 -0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.697667 -0.3046 -0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.67483 -0.295809 -0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.682101 -0.316107 -0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.701111 -0.325704 -0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.685545 -0.337211 -0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681717 -0.338018 -0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.677411 -0.329538 -0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674389 -0.332022 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.661584 -0.314897 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659378 -0.336346 -0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.643552 -0.321705 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.638325 -0.345639 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.672184 -0.353472 -0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.65113 -0.362764 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669162 -0.355956 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684201 -0.391875 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.672915 -0.269894 0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666987 -0.293281 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.649528 -0.275822 0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665573 -0.259777 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.642185 -0.265705 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.652302 -0.273047 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.683032 -0.277236 0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669762 -0.290507 0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.677104 -0.300624 0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.663448 -0.328536 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.639482 -0.329516 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.654603 -0.314396 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.680322 -0.33785 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.671477 -0.32371 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.673232 -0.348145 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.665202 -0.35297 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.658111 -0.363265 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.641237 -0.353951 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.614273 -0.279361 0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628413 -0.288206 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.613293 -0.303327 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.589839 -0.277607 0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588858 -0.301572 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.579544 -0.284698 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604959 -0.262487 0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.594664 -0.269578 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.619099 -0.271332 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.621535 -0.258061 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634468 -0.275921 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616678 -0.264057 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.597842 -0.261795 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.592985 -0.267791 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587082 -0.28339 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.615632 -0.27366 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604872 -0.295255 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628565 -0.29152 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.550934 -0.258608 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570229 -0.267823 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535813 -0.273728 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539989 -0.298064 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555109 -0.282943 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.55307 -0.320611 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57665 -0.325005 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.563845 -0.30788 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535038 -0.327419 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.545813 -0.314688 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.540585 -0.338621 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547843 -0.344544 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.553391 -0.355747 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571423 -0.348938 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684748 -0.321274 0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.678752 -0.326131 0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.666888 -0.308341 0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669149 -0.327177 0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.651289 -0.314244 0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.647554 -0.337937 0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.681014 -0.344967 0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659419 -0.355727 0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.675018 -0.349824 0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.622198 -0.389739 0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.63493 -0.378964 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617804 -0.366159 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.598265 -0.394966 0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593871 -0.371386 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587062 -0.389418 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61539 -0.407771 0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.604188 -0.402224 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628121 -0.396997 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.684201 -0.391875 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.674986 -0.37258 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.669081 -0.406996 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.644745 -0.40282 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.659866 -0.3877 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185 + txt002 + SPHERE CENTER 0.633406 -0.663938 0.160875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626429 -0.65892 0.137727 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617928 -0.64522 0.156428 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617206 -0.673539 0.176845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.601728 -0.654822 0.172398 RAD 0.00617284 + txt002 + SPHERE CENTER 0.59403 -0.678123 0.169668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625707 -0.687239 0.158144 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602531 -0.691822 0.150967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.61873 -0.682221 0.134996 RAD 0.00617284 + txt002 + SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.63767 -0.608008 0.0834188 RAD 0.00617284 + txt002 + SPHERE CENTER 0.620102 -0.623239 0.0751099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.613891 -0.601637 0.0853287 RAD 0.00617284 + txt002 + SPHERE CENTER 0.640545 -0.604555 0.107698 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616766 -0.598184 0.109608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.625852 -0.616334 0.123668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.646756 -0.626157 0.0974792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.632063 -0.637936 0.113449 RAD 0.00617284 + txt002 + SPHERE CENTER 0.629188 -0.641389 0.0891702 RAD 0.00617284 + txt002 + SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.601562 -0.580238 0.162601 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605914 -0.59781 0.14581 RAD 0.00617284 + txt002 + SPHERE CENTER 0.587563 -0.581665 0.142311 RAD 0.00617284 + txt002 + SPHERE CENTER 0.581295 -0.581346 0.176661 RAD 0.00617284 + txt002 + SPHERE CENTER 0.567297 -0.582773 0.156372 RAD 0.00617284 + txt002 + SPHERE CENTER 0.565381 -0.600026 0.173931 RAD 0.00617284 + txt002 + SPHERE CENTER 0.599646 -0.597491 0.18016 RAD 0.00617284 + txt002 + SPHERE CENTER 0.583732 -0.616171 0.177429 RAD 0.00617284 + txt002 + SPHERE CENTER 0.603999 -0.615063 0.163369 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185 + txt002 + SPHERE CENTER 0.547376 -0.70016 0.188567 RAD 0.00617284 + txt002 + SPHERE CENTER 0.564621 -0.690564 0.173728 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546319 -0.676324 0.182211 RAD 0.00617284 + txt002 + SPHERE CENTER 0.524351 -0.703396 0.180258 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523294 -0.679561 0.173902 RAD 0.00617284 + txt002 + SPHERE CENTER 0.518571 -0.697037 0.157111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542652 -0.717636 0.171776 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536873 -0.711276 0.148628 RAD 0.00617284 + txt002 + SPHERE CENTER 0.559898 -0.70804 0.156937 RAD 0.00617284 + txt002 + SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.516313 -0.60809 0.190293 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538029 -0.616221 0.181811 RAD 0.00617284 + txt002 + SPHERE CENTER 0.524375 -0.60089 0.168094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495298 -0.616065 0.180075 RAD 0.00617284 + txt002 + SPHERE CENTER 0.50336 -0.608865 0.157875 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495999 -0.632172 0.161374 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508952 -0.631397 0.193792 RAD 0.00617284 + txt002 + SPHERE CENTER 0.509653 -0.647504 0.175091 RAD 0.00617284 + txt002 + SPHERE CENTER 0.530668 -0.639529 0.18531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.466887 -0.67091 0.138803 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490138 -0.671107 0.147112 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480853 -0.650637 0.136894 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46246 -0.670147 0.114524 RAD 0.00617284 + txt002 + SPHERE CENTER 0.476425 -0.649874 0.112614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.481283 -0.669581 0.0985541 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471745 -0.690617 0.124743 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490567 -0.690052 0.108773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.494995 -0.690815 0.133052 RAD 0.00617284 + txt002 + SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185 + txt002 + SPHERE CENTER 0.597914 -0.729812 0.109385 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602084 -0.70632 0.103028 RAD 0.00617284 + txt002 + SPHERE CENTER 0.592661 -0.711617 0.125228 RAD 0.00617284 + txt002 + SPHERE CENTER 0.574755 -0.738161 0.111295 RAD 0.00617284 + txt002 + SPHERE CENTER 0.569503 -0.719965 0.127138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.555767 -0.723017 0.106848 RAD 0.00617284 + txt002 + SPHERE CENTER 0.584178 -0.732864 0.0890951 RAD 0.00617284 + txt002 + SPHERE CENTER 0.565189 -0.71772 0.0846485 RAD 0.00617284 + txt002 + SPHERE CENTER 0.588348 -0.709372 0.0827387 RAD 0.00617284 + txt002 + SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.511567 -0.712906 0.0596212 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529503 -0.710453 0.0764123 RAD 0.00617284 + txt002 + SPHERE CENTER 0.507717 -0.699372 0.079911 RAD 0.00617284 + txt002 + SPHERE CENTER 0.505104 -0.693665 0.0455609 RAD 0.00617284 + txt002 + SPHERE CENTER 0.501254 -0.680131 0.0658506 RAD 0.00617284 + txt002 + SPHERE CENTER 0.516576 -0.671972 0.0482916 RAD 0.00617284 + txt002 + SPHERE CENTER 0.526889 -0.704747 0.0420622 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538362 -0.683054 0.044793 RAD 0.00617284 + txt002 + SPHERE CENTER 0.544826 -0.702295 0.0588533 RAD 0.00617284 + txt002 + SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.605761 -0.658095 0.0319289 RAD 0.00617284 + txt002 + SPHERE CENTER 0.58746 -0.643855 0.0404111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.607672 -0.647455 0.0541285 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609975 -0.680174 0.0421477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.611885 -0.669535 0.0643473 RAD 0.00617284 + txt002 + SPHERE CENTER 0.595887 -0.688013 0.0608487 RAD 0.00617284 + txt002 + SPHERE CENTER 0.589763 -0.676573 0.0284303 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575674 -0.684413 0.0471312 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571461 -0.662334 0.0369125 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.518106 -0.424703 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.522721 -0.437548 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.505261 -0.420089 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497031 -0.428319 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484186 -0.423704 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48057 -0.44478 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.51449 -0.445778 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498029 -0.462239 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.519105 -0.458623 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.560583 -0.44013 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.452233 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.53742 -0.431578 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560583 -0.44013 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.53742 -0.431578 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.452233 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.566118 -0.460785 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548489 -0.472887 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.548489 -0.472887 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.502679 -0.382226 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.511231 -0.405389 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.399854 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.482024 -0.376691 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.469922 -0.39432 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.469922 -0.39432 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.502679 -0.382226 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.399854 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.511231 -0.405389 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.427669 -0.446904 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.450155 -0.45293 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436486 -0.436486 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.407609 -0.454311 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.416426 -0.443892 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410035 -0.467742 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.421278 -0.470754 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.423704 -0.484186 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.443764 -0.47678 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.414851 -0.39469 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434147 -0.403906 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.434147 -0.403906 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399731 -0.409811 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.419026 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403906 -0.434147 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399731 -0.409811 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.403906 -0.434147 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.419026 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.378536 -0.488909 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.490576 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39432 -0.469922 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378536 -0.488909 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.39432 -0.469922 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.490576 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384071 -0.509564 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405389 -0.511231 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.405389 -0.511231 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.495905 -0.51514 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506323 -0.506323 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.48988 -0.492654 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472055 -0.521531 0.30328 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46603 -0.499045 0.295049 RAD 0.00617284 + txt002 + SPHERE CENTER 0.458623 -0.519105 0.282703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.488498 -0.5352 0.290934 RAD 0.00617284 + txt002 + SPHERE CENTER 0.475067 -0.532774 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498917 -0.526383 0.270358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.4539 -0.564273 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472887 -0.548489 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.542955 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433245 -0.558738 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.431578 -0.53742 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.431578 -0.53742 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4539 -0.564273 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.542955 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.472887 -0.548489 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.548119 -0.527958 0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538903 -0.508662 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.538903 -0.508662 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532998 -0.543078 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.523783 0.246914 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508662 -0.538903 0.234568 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532998 -0.543078 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508662 -0.538903 0.209877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.523783 0.197531 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.316595 -0.626214 0.202664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335868 -0.624401 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318408 -0.606941 0.187336 RAD 0.00617284 + txt002 + SPHERE CENTER 0.294133 -0.631217 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295946 -0.611945 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290942 -0.634407 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.311592 -0.648676 0.193717 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308402 -0.651867 0.169441 RAD 0.00617284 + txt002 + SPHERE CENTER 0.330864 -0.646863 0.178389 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.405245 -0.601704 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.402224 -0.604188 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.389418 -0.587062 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.387213 -0.608512 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.371386 -0.593871 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.366159 -0.617804 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.400018 -0.625637 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.378964 -0.63493 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396997 -0.628121 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.341105 -0.537564 0.175614 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355747 -0.553391 0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338621 -0.540585 0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317172 -0.542791 0.178701 RAD 0.00617284 + txt002 + SPHERE CENTER 0.314688 -0.545813 0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.30788 -0.563845 0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.334297 -0.555596 0.191046 RAD 0.00617284 + txt002 + SPHERE CENTER 0.325005 -0.57665 0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.348938 -0.571423 0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.245336 -0.623429 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268271 -0.624736 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.260997 -0.604627 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2416 -0.624589 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.257262 -0.605787 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.2608 -0.627055 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.248874 -0.644697 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268073 -0.647163 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271809 -0.646004 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.278768 -0.530773 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.266942 -0.591774 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269578 -0.594664 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.284698 -0.579544 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.283817 -0.601088 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.301572 -0.588858 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.303327 -0.613293 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.268696 -0.616209 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.288206 -0.628413 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.271332 -0.619099 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.31938 -0.697473 0.138161 RAD 0.00617284 + txt002 + SPHERE CENTER 0.338182 -0.681812 0.134867 RAD 0.00617284 + txt002 + SPHERE CENTER 0.318074 -0.674538 0.147213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298112 -0.693935 0.126127 RAD 0.00617284 + txt002 + SPHERE CENTER 0.296805 -0.671 0.135179 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295646 -0.674736 0.110799 RAD 0.00617284 + txt002 + SPHERE CENTER 0.31822 -0.701209 0.113782 RAD 0.00617284 + txt002 + SPHERE CENTER 0.315754 -0.682009 0.0984536 RAD 0.00617284 + txt002 + SPHERE CENTER 0.337022 -0.685547 0.110488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.351035 -0.675867 0.0466081 RAD 0.00617284 + txt002 + SPHERE CENTER 0.363265 -0.658111 0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.348145 -0.673232 0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3266 -0.674113 0.0435217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.32371 -0.671477 0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.314396 -0.654603 0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.341721 -0.658993 0.031176 RAD 0.00617284 + txt002 + SPHERE CENTER 0.329516 -0.639482 0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.353951 -0.641237 0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.412036 -0.664041 0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185 + txt002 + SPHERE CENTER 0.639472 -0.678928 -0.137375 RAD 0.00617284 + txt002 + SPHERE CENTER 0.621631 -0.664108 -0.145845 RAD 0.00617284 + txt002 + SPHERE CENTER 0.629767 -0.661636 -0.122663 RAD 0.00617284 + txt002 + SPHERE CENTER 0.634214 -0.696205 -0.120537 RAD 0.00617284 + txt002 + SPHERE CENTER 0.624508 -0.678912 -0.105825 RAD 0.00617284 + txt002 + SPHERE CENTER 0.611115 -0.698662 -0.112168 RAD 0.00617284 + txt002 + SPHERE CENTER 0.626079 -0.698678 -0.143718 RAD 0.00617284 + txt002 + SPHERE CENTER 0.602979 -0.701135 -0.135349 RAD 0.00617284 + txt002 + SPHERE CENTER 0.608237 -0.683858 -0.152187 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185 + txt002 + SPHERE CENTER 0.63057 -0.595495 -0.139672 RAD 0.00617284 + txt002 + SPHERE CENTER 0.617371 -0.615286 -0.146288 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605919 -0.594239 -0.140323 RAD 0.00617284 + txt002 + SPHERE CENTER 0.630343 -0.587782 -0.116217 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605692 -0.586526 -0.116868 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616917 -0.59986 -0.0993785 RAD 0.00617284 + txt002 + SPHERE CENTER 0.641795 -0.608828 -0.122182 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628369 -0.620906 -0.105343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.628595 -0.628619 -0.128798 RAD 0.00617284 + txt002 + SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185 + txt002 + SPHERE CENTER 0.631982 -0.640648 -0.0560094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.62585 -0.64267 -0.0798417 RAD 0.00617284 + txt002 + SPHERE CENTER 0.614812 -0.625749 -0.0656463 RAD 0.00617284 + txt002 + SPHERE CENTER 0.616044 -0.647702 -0.0385197 RAD 0.00617284 + txt002 + SPHERE CENTER 0.598874 -0.632802 -0.0481565 RAD 0.00617284 + txt002 + SPHERE CENTER 0.593974 -0.656777 -0.0448623 RAD 0.00617284 + txt002 + SPHERE CENTER 0.627081 -0.664623 -0.0527151 RAD 0.00617284 + txt002 + SPHERE CENTER 0.605012 -0.673698 -0.0590577 RAD 0.00617284 + txt002 + SPHERE CENTER 0.620949 -0.666645 -0.0765474 RAD 0.00617284 + txt002 + SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185 + txt002 + SPHERE CENTER 0.563328 -0.73992 -0.108814 RAD 0.00617284 + txt002 + SPHERE CENTER 0.577348 -0.719679 -0.110668 RAD 0.00617284 + txt002 + SPHERE CENTER 0.559693 -0.720935 -0.0934517 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539553 -0.739118 -0.115431 RAD 0.00617284 + txt002 + SPHERE CENTER 0.535918 -0.720133 -0.100068 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529798 -0.718076 -0.1239 RAD 0.00617284 + txt002 + SPHERE CENTER 0.557208 -0.737863 -0.132647 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547453 -0.716821 -0.141116 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571228 -0.717623 -0.1345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185 + txt002 + SPHERE CENTER 0.554862 -0.690713 -0.0274488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.570641 -0.682694 -0.0446649 RAD 0.00617284 + txt002 + SPHERE CENTER 0.552739 -0.667813 -0.0364345 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531333 -0.695235 -0.0334138 RAD 0.00617284 + txt002 + SPHERE CENTER 0.52921 -0.672335 -0.0423994 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523582 -0.691738 -0.0565949 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549235 -0.710116 -0.0416443 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541484 -0.706619 -0.0648253 RAD 0.00617284 + txt002 + SPHERE CENTER 0.565014 -0.702097 -0.0588603 RAD 0.00617284 + txt002 + SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185 + txt002 + SPHERE CENTER 0.474542 -0.688647 -0.0825505 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498226 -0.686417 -0.0759343 RAD 0.00617284 + txt002 + SPHERE CENTER 0.485132 -0.666351 -0.0818993 RAD 0.00617284 + txt002 + SPHERE CENTER 0.46786 -0.684788 -0.106005 RAD 0.00617284 + txt002 + SPHERE CENTER 0.47845 -0.662492 -0.105354 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484862 -0.678699 -0.122844 RAD 0.00617284 + txt002 + SPHERE CENTER 0.480953 -0.704854 -0.10004 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497955 -0.698765 -0.116879 RAD 0.00617284 + txt002 + SPHERE CENTER 0.504637 -0.702624 -0.093424 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185 + txt002 + SPHERE CENTER 0.57563 -0.689897 -0.192477 RAD 0.00617284 + txt002 + SPHERE CENTER 0.585222 -0.673115 -0.177114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.575587 -0.693998 -0.168128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.551213 -0.693509 -0.193128 RAD 0.00617284 + txt002 + SPHERE CENTER 0.55117 -0.69761 -0.16878 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536388 -0.680339 -0.178416 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560848 -0.672626 -0.202114 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546023 -0.659456 -0.187402 RAD 0.00617284 + txt002 + SPHERE CENTER 0.57044 -0.655844 -0.186751 RAD 0.00617284 + txt002 + SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.478525 -0.627785 -0.166213 RAD 0.00617284 + txt002 + SPHERE CENTER 0.484234 -0.630799 -0.142381 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497935 -0.615951 -0.156576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493066 -0.637394 -0.183703 RAD 0.00617284 + txt002 + SPHERE CENTER 0.512476 -0.62556 -0.174066 RAD 0.00617284 + txt002 + SPHERE CENTER 0.513317 -0.650016 -0.17736 RAD 0.00617284 + txt002 + SPHERE CENTER 0.479365 -0.652241 -0.169507 RAD 0.00617284 + txt002 + SPHERE CENTER 0.499616 -0.664864 -0.163165 RAD 0.00617284 + txt002 + SPHERE CENTER 0.485075 -0.655255 -0.145675 RAD 0.00617284 + txt002 + SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185 + txt002 + SPHERE CENTER 0.570049 -0.602201 -0.194773 RAD 0.00617284 + txt002 + SPHERE CENTER 0.582252 -0.615021 -0.177557 RAD 0.00617284 + txt002 + SPHERE CENTER 0.560414 -0.623084 -0.185788 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549372 -0.590095 -0.188808 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539737 -0.610978 -0.179823 RAD 0.00617284 + txt002 + SPHERE CENTER 0.540899 -0.590808 -0.165627 RAD 0.00617284 + txt002 + SPHERE CENTER 0.571211 -0.582032 -0.180578 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562738 -0.582745 -0.157397 RAD 0.00617284 + txt002 + SPHERE CENTER 0.583414 -0.594852 -0.163362 RAD 0.00617284 + txt002 + SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556 + txt002 + SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185 + txt002 + SPHERE CENTER 0.269894 -0.672915 -0.0882695 RAD 0.00617284 + txt002 + SPHERE CENTER 0.293281 -0.666987 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275822 -0.649528 -0.0830215 RAD 0.00617284 + txt002 + SPHERE CENTER 0.259777 -0.665573 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.265705 -0.642185 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273047 -0.652302 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.277236 -0.683032 -0.109563 RAD 0.00617284 + txt002 + SPHERE CENTER 0.290507 -0.669762 -0.125608 RAD 0.00617284 + txt002 + SPHERE CENTER 0.300624 -0.677104 -0.104315 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.350033 -0.661904 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.362764 -0.65113 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.345639 -0.638325 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.326099 -0.667131 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.321705 -0.643552 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.314897 -0.661584 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.343224 -0.679937 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332022 -0.674389 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355956 -0.669162 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185 + txt002 + SPHERE CENTER 0.280905 -0.592776 -0.0342624 RAD 0.00617284 + txt002 + SPHERE CENTER 0.304484 -0.59717 -0.0401235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.291679 -0.580045 -0.0524691 RAD 0.00617284 + txt002 + SPHERE CENTER 0.262872 -0.599585 -0.0496945 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273647 -0.586853 -0.0679012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26842 -0.610787 -0.0709877 RAD 0.00617284 + txt002 + SPHERE CENTER 0.275678 -0.61671 -0.0373488 RAD 0.00617284 + txt002 + SPHERE CENTER 0.281225 -0.627912 -0.058642 RAD 0.00617284 + txt002 + SPHERE CENTER 0.299257 -0.621104 -0.0432099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.256944 -0.602632 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.26347 -0.606749 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.273158 -0.587686 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.27313 -0.606658 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.289344 -0.591712 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.295841 -0.614801 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263442 -0.62572 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.286153 -0.633864 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.269968 -0.629838 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.278768 -0.530773 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.298064 -0.539989 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.263648 -0.545894 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.267823 -0.570229 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.282943 -0.555109 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.342108 -0.551527 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.356248 -0.560372 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.341128 -0.575492 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317673 -0.549772 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.316693 -0.573738 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.307378 -0.556863 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332793 -0.534652 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.322499 -0.541743 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.346933 -0.543497 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185 + txt002 + SPHERE CENTER 0.340177 -0.685865 -0.165118 RAD 0.00617284 + txt002 + SPHERE CENTER 0.355123 -0.669651 -0.154009 RAD 0.00617284 + txt002 + SPHERE CENTER 0.33606 -0.679339 -0.141664 RAD 0.00617284 + txt002 + SPHERE CENTER 0.317089 -0.679367 -0.170979 RAD 0.00617284 + txt002 + SPHERE CENTER 0.312971 -0.672841 -0.147525 RAD 0.00617284 + txt002 + SPHERE CENTER 0.308945 -0.656656 -0.165731 RAD 0.00617284 + txt002 + SPHERE CENTER 0.336151 -0.669679 -0.183325 RAD 0.00617284 + txt002 + SPHERE CENTER 0.328008 -0.646968 -0.178077 RAD 0.00617284 + txt002 + SPHERE CENTER 0.351097 -0.653465 -0.172216 RAD 0.00617284 + txt002 + SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185 + txt002 + SPHERE CENTER 0.391282 -0.600701 -0.18796 RAD 0.00617284 + txt002 + SPHERE CENTER 0.367317 -0.601681 -0.182099 RAD 0.00617284 + txt002 + SPHERE CENTER 0.382437 -0.586561 -0.169753 RAD 0.00617284 + txt002 + SPHERE CENTER 0.408157 -0.610016 -0.172528 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399312 -0.595876 -0.154321 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401066 -0.62031 -0.151235 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393037 -0.625136 -0.184873 RAD 0.00617284 + txt002 + SPHERE CENTER 0.385946 -0.635431 -0.16358 RAD 0.00617284 + txt002 + SPHERE CENTER 0.369071 -0.626116 -0.179012 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185 + txt002 + SPHERE CENTER 0.412036 -0.664041 -0.111111 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40282 -0.644745 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 -0.0864198 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 -0.0987654 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396915 -0.679161 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.37258 -0.674986 -0.123457 RAD 0.00617284 + txt002 + SPHERE CENTER 0.3877 -0.659866 -0.135802 RAD 0.00617284 + txt002 + SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556 + txt002 + SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.443014 -0.422853 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.449156 -0.418916 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.463412 -0.433171 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.435021 -0.445101 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455419 -0.455419 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.433171 -0.463412 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.420766 -0.430846 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.418916 -0.449156 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.426908 -0.426908 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.383576 -0.43509 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40305 -0.440308 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.406245 -0.428383 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.380381 -0.447015 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.40305 -0.440308 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396659 -0.464158 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.377186 -0.45894 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.393464 -0.476083 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396659 -0.464158 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.45894 -0.377186 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.476083 -0.393464 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.464158 -0.396659 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.43509 -0.383576 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440308 -0.40305 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.428383 -0.406245 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.447015 -0.380381 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.440308 -0.40305 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.464158 -0.396659 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.512375 -0.453047 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.493241 -0.465554 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.497443 -0.44229 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.531849 -0.447829 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.516916 -0.437072 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532187 -0.455118 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527647 -0.471093 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.527985 -0.478381 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.508512 -0.483599 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.538038 -0.404771 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532513 -0.427756 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.515053 -0.410297 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.529309 -0.396041 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.506323 -0.401567 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.515053 -0.410297 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.546768 -0.4135 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.532513 -0.427756 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.541242 -0.436486 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.565623 -0.483869 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.54615 -0.478651 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.549345 -0.466726 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.562428 -0.495794 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.54615 -0.478651 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539759 -0.502501 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.559233 -0.507719 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.536564 -0.514426 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.539759 -0.502501 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185 + txt002 + SPHERE CENTER 0.461599 -0.535539 -0.292037 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478381 -0.527985 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.455118 -0.532187 -0.268448 RAD 0.00617284 + txt002 + SPHERE CENTER 0.443553 -0.520267 -0.299164 RAD 0.00617284 + txt002 + SPHERE CENTER 0.437072 -0.516916 -0.275576 RAD 0.00617284 + txt002 + SPHERE CENTER 0.44229 -0.497443 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.466817 -0.516065 -0.306292 RAD 0.00617284 + txt002 + SPHERE CENTER 0.465554 -0.493241 -0.296959 RAD 0.00617284 + txt002 + SPHERE CENTER 0.483599 -0.508512 -0.289831 RAD 0.00617284 + txt002 + SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.507719 -0.559233 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.514426 -0.536564 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.502501 -0.539759 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.483869 -0.565623 -0.215094 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478651 -0.54615 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.466726 -0.549345 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.495794 -0.562428 -0.236478 RAD 0.00617284 + txt002 + SPHERE CENTER 0.478651 -0.54615 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.502501 -0.539759 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185 + txt002 + SPHERE CENTER 0.404771 -0.538038 -0.207967 RAD 0.00617284 + txt002 + SPHERE CENTER 0.427756 -0.532513 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410297 -0.515053 -0.200839 RAD 0.00617284 + txt002 + SPHERE CENTER 0.396041 -0.529309 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.401567 -0.506323 -0.222222 RAD 0.00617284 + txt002 + SPHERE CENTER 0.410297 -0.515053 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.4135 -0.546768 -0.22935 RAD 0.00617284 + txt002 + SPHERE CENTER 0.427756 -0.532513 -0.243606 RAD 0.00617284 + txt002 + SPHERE CENTER 0.436486 -0.541242 -0.222222 RAD 0.00617284 + txt002 + +END_SCENE diff --git a/examples/parallel_for/tachyon/dat/lattice.dat b/examples/parallel_for/tachyon/dat/lattice.dat new file mode 100644 index 0000000..fc40ed8 --- /dev/null +++ b/examples/parallel_for/tachyon/dat/lattice.dat @@ -0,0 +1,18012 @@ +BEGIN_SCENE + OUTFILE /dev/null + RESOLUTION 512 512 + VERBOSE 0 + +CAMERA + ZOOM 1.0 + ASPECTRATIO 1.0 + ANTIALIASING 0 + RAYDEPTH 8 + CENTER 0.5625 1 0.9375 + VIEWDIR 0 -0.707107 -0.707107 + UPDIR 0.272166 0.680414 -0.680414 + +END_CAMERA + +LIGHT CENTER 2 0.5 0.5 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER -1 0.5 0.5 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 0.5 2 0.5 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 0.5 -1 0.5 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 0.5 0.5 2 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 0.5 0.5 -1 RAD 0.002 COLOR 0.5 0.5 0.5 + +TEXDEF txt001 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0 RAD 0.03125 + txt001 +TEXDEF txt002 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0 APEX 0.109531 0 0 RAD 0.0078125 + txt002 +TEXDEF txt003 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0 APEX 0 0.109531 0 RAD 0.0078125 + txt003 +TEXDEF txt004 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.0154687 APEX 0 0 0.109531 RAD 0.0078125 + txt004 +TEXDEF txt005 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0.125 RAD 0.03125 + txt005 +TEXDEF txt006 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0.125 APEX 0.109531 0 0.125 RAD 0.0078125 + txt006 +TEXDEF txt007 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0.125 APEX 0 0.109531 0.125 RAD 0.0078125 + txt007 +TEXDEF txt008 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.140469 APEX 0 0 0.234531 RAD 0.0078125 + txt008 +TEXDEF txt009 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0.25 RAD 0.03125 + txt009 +TEXDEF txt010 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0.25 APEX 0.109531 0 0.25 RAD 0.0078125 + txt010 +TEXDEF txt011 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0.25 APEX 0 0.109531 0.25 RAD 0.0078125 + txt011 +TEXDEF txt012 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.265469 APEX 0 0 0.359531 RAD 0.0078125 + txt012 +TEXDEF txt013 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0.375 RAD 0.03125 + txt013 +TEXDEF txt014 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0.375 APEX 0.109531 0 0.375 RAD 0.0078125 + txt014 +TEXDEF txt015 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0.375 APEX 0 0.109531 0.375 RAD 0.0078125 + txt015 +TEXDEF txt016 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.390469 APEX 0 0 0.484531 RAD 0.0078125 + txt016 +TEXDEF txt017 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0.5 RAD 0.03125 + txt017 +TEXDEF txt018 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0.5 APEX 0.109531 0 0.5 RAD 0.0078125 + txt018 +TEXDEF txt019 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0.5 APEX 0 0.109531 0.5 RAD 0.0078125 + txt019 +TEXDEF txt020 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.515469 APEX 0 0 0.609531 RAD 0.0078125 + txt020 +TEXDEF txt021 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0.625 RAD 0.03125 + txt021 +TEXDEF txt022 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0.625 APEX 0.109531 0 0.625 RAD 0.0078125 + txt022 +TEXDEF txt023 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0.625 APEX 0 0.109531 0.625 RAD 0.0078125 + txt023 +TEXDEF txt024 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.640469 APEX 0 0 0.734531 RAD 0.0078125 + txt024 +TEXDEF txt025 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0.75 RAD 0.03125 + txt025 +TEXDEF txt026 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0.75 APEX 0.109531 0 0.75 RAD 0.0078125 + txt026 +TEXDEF txt027 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0.75 APEX 0 0.109531 0.75 RAD 0.0078125 + txt027 +TEXDEF txt028 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.765469 APEX 0 0 0.859531 RAD 0.0078125 + txt028 +TEXDEF txt029 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 0.875 RAD 0.03125 + txt029 +TEXDEF txt030 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 0.875 APEX 0.109531 0 0.875 RAD 0.0078125 + txt030 +TEXDEF txt031 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 0.875 APEX 0 0.109531 0.875 RAD 0.0078125 + txt031 +TEXDEF txt032 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0 0.890469 APEX 0 0 0.984531 RAD 0.0078125 + txt032 +TEXDEF txt033 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0 1 RAD 0.03125 + txt033 +TEXDEF txt034 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0 1 APEX 0.109531 0 1 RAD 0.0078125 + txt034 +TEXDEF txt035 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.0154687 1 APEX 0 0.109531 1 RAD 0.0078125 + txt035 +TEXDEF txt036 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0 RAD 0.03125 + txt036 +TEXDEF txt037 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0 APEX 0.109531 0.125 0 RAD 0.0078125 + txt037 +TEXDEF txt038 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0 APEX 0 0.234531 0 RAD 0.0078125 + txt038 +TEXDEF txt039 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.0154687 APEX 0 0.125 0.109531 RAD 0.0078125 + txt039 +TEXDEF txt040 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0.125 RAD 0.03125 + txt040 +TEXDEF txt041 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0.125 APEX 0.109531 0.125 0.125 RAD 0.0078125 + txt041 +TEXDEF txt042 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0.125 APEX 0 0.234531 0.125 RAD 0.0078125 + txt042 +TEXDEF txt043 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.140469 APEX 0 0.125 0.234531 RAD 0.0078125 + txt043 +TEXDEF txt044 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0.25 RAD 0.03125 + txt044 +TEXDEF txt045 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0.25 APEX 0.109531 0.125 0.25 RAD 0.0078125 + txt045 +TEXDEF txt046 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0.25 APEX 0 0.234531 0.25 RAD 0.0078125 + txt046 +TEXDEF txt047 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.265469 APEX 0 0.125 0.359531 RAD 0.0078125 + txt047 +TEXDEF txt048 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0.375 RAD 0.03125 + txt048 +TEXDEF txt049 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0.375 APEX 0.109531 0.125 0.375 RAD 0.0078125 + txt049 +TEXDEF txt050 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0.375 APEX 0 0.234531 0.375 RAD 0.0078125 + txt050 +TEXDEF txt051 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.390469 APEX 0 0.125 0.484531 RAD 0.0078125 + txt051 +TEXDEF txt052 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0.5 RAD 0.03125 + txt052 +TEXDEF txt053 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0.5 APEX 0.109531 0.125 0.5 RAD 0.0078125 + txt053 +TEXDEF txt054 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0.5 APEX 0 0.234531 0.5 RAD 0.0078125 + txt054 +TEXDEF txt055 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.515469 APEX 0 0.125 0.609531 RAD 0.0078125 + txt055 +TEXDEF txt056 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0.625 RAD 0.03125 + txt056 +TEXDEF txt057 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0.625 APEX 0.109531 0.125 0.625 RAD 0.0078125 + txt057 +TEXDEF txt058 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0.625 APEX 0 0.234531 0.625 RAD 0.0078125 + txt058 +TEXDEF txt059 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.640469 APEX 0 0.125 0.734531 RAD 0.0078125 + txt059 +TEXDEF txt060 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0.75 RAD 0.03125 + txt060 +TEXDEF txt061 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0.75 APEX 0.109531 0.125 0.75 RAD 0.0078125 + txt061 +TEXDEF txt062 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0.75 APEX 0 0.234531 0.75 RAD 0.0078125 + txt062 +TEXDEF txt063 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.765469 APEX 0 0.125 0.859531 RAD 0.0078125 + txt063 +TEXDEF txt064 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 0.875 RAD 0.03125 + txt064 +TEXDEF txt065 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 0.875 APEX 0.109531 0.125 0.875 RAD 0.0078125 + txt065 +TEXDEF txt066 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 0.875 APEX 0 0.234531 0.875 RAD 0.0078125 + txt066 +TEXDEF txt067 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.125 0.890469 APEX 0 0.125 0.984531 RAD 0.0078125 + txt067 +TEXDEF txt068 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.125 1 RAD 0.03125 + txt068 +TEXDEF txt069 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.125 1 APEX 0.109531 0.125 1 RAD 0.0078125 + txt069 +TEXDEF txt070 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.140469 1 APEX 0 0.234531 1 RAD 0.0078125 + txt070 +TEXDEF txt071 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0 RAD 0.03125 + txt071 +TEXDEF txt072 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0 APEX 0.109531 0.25 0 RAD 0.0078125 + txt072 +TEXDEF txt073 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0 APEX 0 0.359531 0 RAD 0.0078125 + txt073 +TEXDEF txt074 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.0154687 APEX 0 0.25 0.109531 RAD 0.0078125 + txt074 +TEXDEF txt075 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0.125 RAD 0.03125 + txt075 +TEXDEF txt076 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0.125 APEX 0.109531 0.25 0.125 RAD 0.0078125 + txt076 +TEXDEF txt077 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0.125 APEX 0 0.359531 0.125 RAD 0.0078125 + txt077 +TEXDEF txt078 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.140469 APEX 0 0.25 0.234531 RAD 0.0078125 + txt078 +TEXDEF txt079 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0.25 RAD 0.03125 + txt079 +TEXDEF txt080 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0.25 APEX 0.109531 0.25 0.25 RAD 0.0078125 + txt080 +TEXDEF txt081 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0.25 APEX 0 0.359531 0.25 RAD 0.0078125 + txt081 +TEXDEF txt082 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.265469 APEX 0 0.25 0.359531 RAD 0.0078125 + txt082 +TEXDEF txt083 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0.375 RAD 0.03125 + txt083 +TEXDEF txt084 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0.375 APEX 0.109531 0.25 0.375 RAD 0.0078125 + txt084 +TEXDEF txt085 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0.375 APEX 0 0.359531 0.375 RAD 0.0078125 + txt085 +TEXDEF txt086 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.390469 APEX 0 0.25 0.484531 RAD 0.0078125 + txt086 +TEXDEF txt087 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0.5 RAD 0.03125 + txt087 +TEXDEF txt088 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0.5 APEX 0.109531 0.25 0.5 RAD 0.0078125 + txt088 +TEXDEF txt089 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0.5 APEX 0 0.359531 0.5 RAD 0.0078125 + txt089 +TEXDEF txt090 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.515469 APEX 0 0.25 0.609531 RAD 0.0078125 + txt090 +TEXDEF txt091 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0.625 RAD 0.03125 + txt091 +TEXDEF txt092 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0.625 APEX 0.109531 0.25 0.625 RAD 0.0078125 + txt092 +TEXDEF txt093 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0.625 APEX 0 0.359531 0.625 RAD 0.0078125 + txt093 +TEXDEF txt094 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.640469 APEX 0 0.25 0.734531 RAD 0.0078125 + txt094 +TEXDEF txt095 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0.75 RAD 0.03125 + txt095 +TEXDEF txt096 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0.75 APEX 0.109531 0.25 0.75 RAD 0.0078125 + txt096 +TEXDEF txt097 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0.75 APEX 0 0.359531 0.75 RAD 0.0078125 + txt097 +TEXDEF txt098 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.765469 APEX 0 0.25 0.859531 RAD 0.0078125 + txt098 +TEXDEF txt099 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 0.875 RAD 0.03125 + txt099 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 0.875 APEX 0.109531 0.25 0.875 RAD 0.0078125 + txt100 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 0.875 APEX 0 0.359531 0.875 RAD 0.0078125 + txt101 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.25 0.890469 APEX 0 0.25 0.984531 RAD 0.0078125 + txt102 +TEXDEF txt103 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.25 1 RAD 0.03125 + txt103 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.25 1 APEX 0.109531 0.25 1 RAD 0.0078125 + txt104 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.265469 1 APEX 0 0.359531 1 RAD 0.0078125 + txt105 +TEXDEF txt106 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0 RAD 0.03125 + txt106 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0 APEX 0.109531 0.375 0 RAD 0.0078125 + txt107 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0 APEX 0 0.484531 0 RAD 0.0078125 + txt108 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.0154687 APEX 0 0.375 0.109531 RAD 0.0078125 + txt109 +TEXDEF txt110 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0.125 RAD 0.03125 + txt110 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0.125 APEX 0.109531 0.375 0.125 RAD 0.0078125 + txt111 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0.125 APEX 0 0.484531 0.125 RAD 0.0078125 + txt112 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.140469 APEX 0 0.375 0.234531 RAD 0.0078125 + txt113 +TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0.25 RAD 0.03125 + txt114 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0.25 APEX 0.109531 0.375 0.25 RAD 0.0078125 + txt115 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0.25 APEX 0 0.484531 0.25 RAD 0.0078125 + txt116 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.265469 APEX 0 0.375 0.359531 RAD 0.0078125 + txt117 +TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0.375 RAD 0.03125 + txt118 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0.375 APEX 0.109531 0.375 0.375 RAD 0.0078125 + txt119 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0.375 APEX 0 0.484531 0.375 RAD 0.0078125 + txt120 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.390469 APEX 0 0.375 0.484531 RAD 0.0078125 + txt121 +TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0.5 RAD 0.03125 + txt122 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0.5 APEX 0.109531 0.375 0.5 RAD 0.0078125 + txt123 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0.5 APEX 0 0.484531 0.5 RAD 0.0078125 + txt124 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.515469 APEX 0 0.375 0.609531 RAD 0.0078125 + txt125 +TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0.625 RAD 0.03125 + txt126 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0.625 APEX 0.109531 0.375 0.625 RAD 0.0078125 + txt127 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0.625 APEX 0 0.484531 0.625 RAD 0.0078125 + txt128 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.640469 APEX 0 0.375 0.734531 RAD 0.0078125 + txt129 +TEXDEF txt130 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0.75 RAD 0.03125 + txt130 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0.75 APEX 0.109531 0.375 0.75 RAD 0.0078125 + txt131 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0.75 APEX 0 0.484531 0.75 RAD 0.0078125 + txt132 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.765469 APEX 0 0.375 0.859531 RAD 0.0078125 + txt133 +TEXDEF txt134 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 0.875 RAD 0.03125 + txt134 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 0.875 APEX 0.109531 0.375 0.875 RAD 0.0078125 + txt135 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 0.875 APEX 0 0.484531 0.875 RAD 0.0078125 + txt136 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.375 0.890469 APEX 0 0.375 0.984531 RAD 0.0078125 + txt137 +TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.375 1 RAD 0.03125 + txt138 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.375 1 APEX 0.109531 0.375 1 RAD 0.0078125 + txt139 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.390469 1 APEX 0 0.484531 1 RAD 0.0078125 + txt140 +TEXDEF txt141 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0 RAD 0.03125 + txt141 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0 APEX 0.109531 0.5 0 RAD 0.0078125 + txt142 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0 APEX 0 0.609531 0 RAD 0.0078125 + txt143 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.0154687 APEX 0 0.5 0.109531 RAD 0.0078125 + txt144 +TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0.125 RAD 0.03125 + txt145 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0.125 APEX 0.109531 0.5 0.125 RAD 0.0078125 + txt146 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0.125 APEX 0 0.609531 0.125 RAD 0.0078125 + txt147 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.140469 APEX 0 0.5 0.234531 RAD 0.0078125 + txt148 +TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0.25 RAD 0.03125 + txt149 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0.25 APEX 0.109531 0.5 0.25 RAD 0.0078125 + txt150 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0.25 APEX 0 0.609531 0.25 RAD 0.0078125 + txt151 +TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.265469 APEX 0 0.5 0.359531 RAD 0.0078125 + txt152 +TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0.375 RAD 0.03125 + txt153 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0.375 APEX 0.109531 0.5 0.375 RAD 0.0078125 + txt154 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0.375 APEX 0 0.609531 0.375 RAD 0.0078125 + txt155 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.390469 APEX 0 0.5 0.484531 RAD 0.0078125 + txt156 +TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0.5 RAD 0.03125 + txt157 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0.5 APEX 0.109531 0.5 0.5 RAD 0.0078125 + txt158 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0.5 APEX 0 0.609531 0.5 RAD 0.0078125 + txt159 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.515469 APEX 0 0.5 0.609531 RAD 0.0078125 + txt160 +TEXDEF txt161 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0.625 RAD 0.03125 + txt161 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0.625 APEX 0.109531 0.5 0.625 RAD 0.0078125 + txt162 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0.625 APEX 0 0.609531 0.625 RAD 0.0078125 + txt163 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.640469 APEX 0 0.5 0.734531 RAD 0.0078125 + txt164 +TEXDEF txt165 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0.75 RAD 0.03125 + txt165 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0.75 APEX 0.109531 0.5 0.75 RAD 0.0078125 + txt166 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0.75 APEX 0 0.609531 0.75 RAD 0.0078125 + txt167 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.765469 APEX 0 0.5 0.859531 RAD 0.0078125 + txt168 +TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 0.875 RAD 0.03125 + txt169 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 0.875 APEX 0.109531 0.5 0.875 RAD 0.0078125 + txt170 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 0.875 APEX 0 0.609531 0.875 RAD 0.0078125 + txt171 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.5 0.890469 APEX 0 0.5 0.984531 RAD 0.0078125 + txt172 +TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.5 1 RAD 0.03125 + txt173 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.5 1 APEX 0.109531 0.5 1 RAD 0.0078125 + txt174 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.515469 1 APEX 0 0.609531 1 RAD 0.0078125 + txt175 +TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0 RAD 0.03125 + txt176 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0 APEX 0.109531 0.625 0 RAD 0.0078125 + txt177 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0 APEX 0 0.734531 0 RAD 0.0078125 + txt178 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.0154687 APEX 0 0.625 0.109531 RAD 0.0078125 + txt179 +TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0.125 RAD 0.03125 + txt180 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0.125 APEX 0.109531 0.625 0.125 RAD 0.0078125 + txt181 +TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0.125 APEX 0 0.734531 0.125 RAD 0.0078125 + txt182 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.140469 APEX 0 0.625 0.234531 RAD 0.0078125 + txt183 +TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0.25 RAD 0.03125 + txt184 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0.25 APEX 0.109531 0.625 0.25 RAD 0.0078125 + txt185 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0.25 APEX 0 0.734531 0.25 RAD 0.0078125 + txt186 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.265469 APEX 0 0.625 0.359531 RAD 0.0078125 + txt187 +TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0.375 RAD 0.03125 + txt188 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0.375 APEX 0.109531 0.625 0.375 RAD 0.0078125 + txt189 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0.375 APEX 0 0.734531 0.375 RAD 0.0078125 + txt190 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.390469 APEX 0 0.625 0.484531 RAD 0.0078125 + txt191 +TEXDEF txt192 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0.5 RAD 0.03125 + txt192 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0.5 APEX 0.109531 0.625 0.5 RAD 0.0078125 + txt193 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0.5 APEX 0 0.734531 0.5 RAD 0.0078125 + txt194 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.515469 APEX 0 0.625 0.609531 RAD 0.0078125 + txt195 +TEXDEF txt196 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0.625 RAD 0.03125 + txt196 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0.625 APEX 0.109531 0.625 0.625 RAD 0.0078125 + txt197 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0.625 APEX 0 0.734531 0.625 RAD 0.0078125 + txt198 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.640469 APEX 0 0.625 0.734531 RAD 0.0078125 + txt199 +TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0.75 RAD 0.03125 + txt200 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0.75 APEX 0.109531 0.625 0.75 RAD 0.0078125 + txt201 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0.75 APEX 0 0.734531 0.75 RAD 0.0078125 + txt202 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.765469 APEX 0 0.625 0.859531 RAD 0.0078125 + txt203 +TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 0.875 RAD 0.03125 + txt204 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 0.875 APEX 0.109531 0.625 0.875 RAD 0.0078125 + txt205 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 0.875 APEX 0 0.734531 0.875 RAD 0.0078125 + txt206 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.625 0.890469 APEX 0 0.625 0.984531 RAD 0.0078125 + txt207 +TEXDEF txt208 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.625 1 RAD 0.03125 + txt208 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.625 1 APEX 0.109531 0.625 1 RAD 0.0078125 + txt209 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.640469 1 APEX 0 0.734531 1 RAD 0.0078125 + txt210 +TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0 RAD 0.03125 + txt211 +TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0 APEX 0.109531 0.75 0 RAD 0.0078125 + txt212 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0 APEX 0 0.859531 0 RAD 0.0078125 + txt213 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.0154687 APEX 0 0.75 0.109531 RAD 0.0078125 + txt214 +TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0.125 RAD 0.03125 + txt215 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0.125 APEX 0.109531 0.75 0.125 RAD 0.0078125 + txt216 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0.125 APEX 0 0.859531 0.125 RAD 0.0078125 + txt217 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.140469 APEX 0 0.75 0.234531 RAD 0.0078125 + txt218 +TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0.25 RAD 0.03125 + txt219 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0.25 APEX 0.109531 0.75 0.25 RAD 0.0078125 + txt220 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0.25 APEX 0 0.859531 0.25 RAD 0.0078125 + txt221 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.265469 APEX 0 0.75 0.359531 RAD 0.0078125 + txt222 +TEXDEF txt223 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0.375 RAD 0.03125 + txt223 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0.375 APEX 0.109531 0.75 0.375 RAD 0.0078125 + txt224 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0.375 APEX 0 0.859531 0.375 RAD 0.0078125 + txt225 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.390469 APEX 0 0.75 0.484531 RAD 0.0078125 + txt226 +TEXDEF txt227 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0.5 RAD 0.03125 + txt227 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0.5 APEX 0.109531 0.75 0.5 RAD 0.0078125 + txt228 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0.5 APEX 0 0.859531 0.5 RAD 0.0078125 + txt229 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.515469 APEX 0 0.75 0.609531 RAD 0.0078125 + txt230 +TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0.625 RAD 0.03125 + txt231 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0.625 APEX 0.109531 0.75 0.625 RAD 0.0078125 + txt232 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0.625 APEX 0 0.859531 0.625 RAD 0.0078125 + txt233 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.640469 APEX 0 0.75 0.734531 RAD 0.0078125 + txt234 +TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0.75 RAD 0.03125 + txt235 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0.75 APEX 0.109531 0.75 0.75 RAD 0.0078125 + txt236 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0.75 APEX 0 0.859531 0.75 RAD 0.0078125 + txt237 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.765469 APEX 0 0.75 0.859531 RAD 0.0078125 + txt238 +TEXDEF txt239 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 0.875 RAD 0.03125 + txt239 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 0.875 APEX 0.109531 0.75 0.875 RAD 0.0078125 + txt240 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 0.875 APEX 0 0.859531 0.875 RAD 0.0078125 + txt241 +TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.75 0.890469 APEX 0 0.75 0.984531 RAD 0.0078125 + txt242 +TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.75 1 RAD 0.03125 + txt243 +TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.75 1 APEX 0.109531 0.75 1 RAD 0.0078125 + txt244 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.765469 1 APEX 0 0.859531 1 RAD 0.0078125 + txt245 +TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0 RAD 0.03125 + txt246 +TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0 APEX 0.109531 0.875 0 RAD 0.0078125 + txt247 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0 APEX 0 0.984531 0 RAD 0.0078125 + txt248 +TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.0154687 APEX 0 0.875 0.109531 RAD 0.0078125 + txt249 +TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0.125 RAD 0.03125 + txt250 +TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0.125 APEX 0.109531 0.875 0.125 RAD 0.0078125 + txt251 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0.125 APEX 0 0.984531 0.125 RAD 0.0078125 + txt252 +TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.140469 APEX 0 0.875 0.234531 RAD 0.0078125 + txt253 +TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0.25 RAD 0.03125 + txt254 +TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0.25 APEX 0.109531 0.875 0.25 RAD 0.0078125 + txt255 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0.25 APEX 0 0.984531 0.25 RAD 0.0078125 + txt256 +TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.265469 APEX 0 0.875 0.359531 RAD 0.0078125 + txt257 +TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0.375 RAD 0.03125 + txt258 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0.375 APEX 0.109531 0.875 0.375 RAD 0.0078125 + txt259 +TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0.375 APEX 0 0.984531 0.375 RAD 0.0078125 + txt260 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.390469 APEX 0 0.875 0.484531 RAD 0.0078125 + txt261 +TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0.5 RAD 0.03125 + txt262 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0.5 APEX 0.109531 0.875 0.5 RAD 0.0078125 + txt263 +TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0.5 APEX 0 0.984531 0.5 RAD 0.0078125 + txt264 +TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.515469 APEX 0 0.875 0.609531 RAD 0.0078125 + txt265 +TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0.625 RAD 0.03125 + txt266 +TEXDEF txt267 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0.625 APEX 0.109531 0.875 0.625 RAD 0.0078125 + txt267 +TEXDEF txt268 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0.625 APEX 0 0.984531 0.625 RAD 0.0078125 + txt268 +TEXDEF txt269 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.640469 APEX 0 0.875 0.734531 RAD 0.0078125 + txt269 +TEXDEF txt270 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0.75 RAD 0.03125 + txt270 +TEXDEF txt271 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0.75 APEX 0.109531 0.875 0.75 RAD 0.0078125 + txt271 +TEXDEF txt272 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0.75 APEX 0 0.984531 0.75 RAD 0.0078125 + txt272 +TEXDEF txt273 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.765469 APEX 0 0.875 0.859531 RAD 0.0078125 + txt273 +TEXDEF txt274 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 0.875 RAD 0.03125 + txt274 +TEXDEF txt275 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 0.875 APEX 0.109531 0.875 0.875 RAD 0.0078125 + txt275 +TEXDEF txt276 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 0.875 APEX 0 0.984531 0.875 RAD 0.0078125 + txt276 +TEXDEF txt277 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.875 0.890469 APEX 0 0.875 0.984531 RAD 0.0078125 + txt277 +TEXDEF txt278 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 0.875 1 RAD 0.03125 + txt278 +TEXDEF txt279 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 0.875 1 APEX 0.109531 0.875 1 RAD 0.0078125 + txt279 +TEXDEF txt280 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0 0.890469 1 APEX 0 0.984531 1 RAD 0.0078125 + txt280 +TEXDEF txt281 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0 RAD 0.03125 + txt281 +TEXDEF txt282 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0 APEX 0.109531 1 0 RAD 0.0078125 + txt282 +TEXDEF txt283 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.0154687 APEX 0 1 0.109531 RAD 0.0078125 + txt283 +TEXDEF txt284 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0.125 RAD 0.03125 + txt284 +TEXDEF txt285 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0.125 APEX 0.109531 1 0.125 RAD 0.0078125 + txt285 +TEXDEF txt286 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.140469 APEX 0 1 0.234531 RAD 0.0078125 + txt286 +TEXDEF txt287 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0.25 RAD 0.03125 + txt287 +TEXDEF txt288 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0.25 APEX 0.109531 1 0.25 RAD 0.0078125 + txt288 +TEXDEF txt289 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.265469 APEX 0 1 0.359531 RAD 0.0078125 + txt289 +TEXDEF txt290 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0.375 RAD 0.03125 + txt290 +TEXDEF txt291 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0.375 APEX 0.109531 1 0.375 RAD 0.0078125 + txt291 +TEXDEF txt292 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.390469 APEX 0 1 0.484531 RAD 0.0078125 + txt292 +TEXDEF txt293 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0.5 RAD 0.03125 + txt293 +TEXDEF txt294 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0.5 APEX 0.109531 1 0.5 RAD 0.0078125 + txt294 +TEXDEF txt295 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.515469 APEX 0 1 0.609531 RAD 0.0078125 + txt295 +TEXDEF txt296 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0.625 RAD 0.03125 + txt296 +TEXDEF txt297 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0.625 APEX 0.109531 1 0.625 RAD 0.0078125 + txt297 +TEXDEF txt298 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.640469 APEX 0 1 0.734531 RAD 0.0078125 + txt298 +TEXDEF txt299 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0.75 RAD 0.03125 + txt299 +TEXDEF txt300 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0.75 APEX 0.109531 1 0.75 RAD 0.0078125 + txt300 +TEXDEF txt301 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.765469 APEX 0 1 0.859531 RAD 0.0078125 + txt301 +TEXDEF txt302 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 0.875 RAD 0.03125 + txt302 +TEXDEF txt303 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 0.875 APEX 0.109531 1 0.875 RAD 0.0078125 + txt303 +TEXDEF txt304 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0 1 0.890469 APEX 0 1 0.984531 RAD 0.0078125 + txt304 +TEXDEF txt305 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0 1 1 RAD 0.03125 + txt305 +TEXDEF txt306 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.0154687 1 1 APEX 0.109531 1 1 RAD 0.0078125 + txt306 +TEXDEF txt307 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0 RAD 0.03125 + txt307 +TEXDEF txt308 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0 APEX 0.234531 0 0 RAD 0.0078125 + txt308 +TEXDEF txt309 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0 APEX 0.125 0.109531 0 RAD 0.0078125 + txt309 +TEXDEF txt310 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.0154687 APEX 0.125 0 0.109531 RAD 0.0078125 + txt310 +TEXDEF txt311 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0.125 RAD 0.03125 + txt311 +TEXDEF txt312 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0.125 APEX 0.234531 0 0.125 RAD 0.0078125 + txt312 +TEXDEF txt313 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0.125 APEX 0.125 0.109531 0.125 RAD 0.0078125 + txt313 +TEXDEF txt314 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.140469 APEX 0.125 0 0.234531 RAD 0.0078125 + txt314 +TEXDEF txt315 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0.25 RAD 0.03125 + txt315 +TEXDEF txt316 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0.25 APEX 0.234531 0 0.25 RAD 0.0078125 + txt316 +TEXDEF txt317 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0.25 APEX 0.125 0.109531 0.25 RAD 0.0078125 + txt317 +TEXDEF txt318 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.265469 APEX 0.125 0 0.359531 RAD 0.0078125 + txt318 +TEXDEF txt319 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0.375 RAD 0.03125 + txt319 +TEXDEF txt320 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0.375 APEX 0.234531 0 0.375 RAD 0.0078125 + txt320 +TEXDEF txt321 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0.375 APEX 0.125 0.109531 0.375 RAD 0.0078125 + txt321 +TEXDEF txt322 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.390469 APEX 0.125 0 0.484531 RAD 0.0078125 + txt322 +TEXDEF txt323 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0.5 RAD 0.03125 + txt323 +TEXDEF txt324 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0.5 APEX 0.234531 0 0.5 RAD 0.0078125 + txt324 +TEXDEF txt325 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0.5 APEX 0.125 0.109531 0.5 RAD 0.0078125 + txt325 +TEXDEF txt326 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.515469 APEX 0.125 0 0.609531 RAD 0.0078125 + txt326 +TEXDEF txt327 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0.625 RAD 0.03125 + txt327 +TEXDEF txt328 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0.625 APEX 0.234531 0 0.625 RAD 0.0078125 + txt328 +TEXDEF txt329 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0.625 APEX 0.125 0.109531 0.625 RAD 0.0078125 + txt329 +TEXDEF txt330 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.640469 APEX 0.125 0 0.734531 RAD 0.0078125 + txt330 +TEXDEF txt331 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0.75 RAD 0.03125 + txt331 +TEXDEF txt332 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0.75 APEX 0.234531 0 0.75 RAD 0.0078125 + txt332 +TEXDEF txt333 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0.75 APEX 0.125 0.109531 0.75 RAD 0.0078125 + txt333 +TEXDEF txt334 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.765469 APEX 0.125 0 0.859531 RAD 0.0078125 + txt334 +TEXDEF txt335 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 0.875 RAD 0.03125 + txt335 +TEXDEF txt336 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 0.875 APEX 0.234531 0 0.875 RAD 0.0078125 + txt336 +TEXDEF txt337 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 0.875 APEX 0.125 0.109531 0.875 RAD 0.0078125 + txt337 +TEXDEF txt338 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0 0.890469 APEX 0.125 0 0.984531 RAD 0.0078125 + txt338 +TEXDEF txt339 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0 1 RAD 0.03125 + txt339 +TEXDEF txt340 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0 1 APEX 0.234531 0 1 RAD 0.0078125 + txt340 +TEXDEF txt341 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.0154687 1 APEX 0.125 0.109531 1 RAD 0.0078125 + txt341 +TEXDEF txt342 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0 RAD 0.03125 + txt342 +TEXDEF txt343 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0 APEX 0.234531 0.125 0 RAD 0.0078125 + txt343 +TEXDEF txt344 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0 APEX 0.125 0.234531 0 RAD 0.0078125 + txt344 +TEXDEF txt345 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.0154687 APEX 0.125 0.125 0.109531 RAD 0.0078125 + txt345 +TEXDEF txt346 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0.125 RAD 0.03125 + txt346 +TEXDEF txt347 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0.125 APEX 0.234531 0.125 0.125 RAD 0.0078125 + txt347 +TEXDEF txt348 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0.125 APEX 0.125 0.234531 0.125 RAD 0.0078125 + txt348 +TEXDEF txt349 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.140469 APEX 0.125 0.125 0.234531 RAD 0.0078125 + txt349 +TEXDEF txt350 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0.25 RAD 0.03125 + txt350 +TEXDEF txt351 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0.25 APEX 0.234531 0.125 0.25 RAD 0.0078125 + txt351 +TEXDEF txt352 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0.25 APEX 0.125 0.234531 0.25 RAD 0.0078125 + txt352 +TEXDEF txt353 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.265469 APEX 0.125 0.125 0.359531 RAD 0.0078125 + txt353 +TEXDEF txt354 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0.375 RAD 0.03125 + txt354 +TEXDEF txt355 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0.375 APEX 0.234531 0.125 0.375 RAD 0.0078125 + txt355 +TEXDEF txt356 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0.375 APEX 0.125 0.234531 0.375 RAD 0.0078125 + txt356 +TEXDEF txt357 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.390469 APEX 0.125 0.125 0.484531 RAD 0.0078125 + txt357 +TEXDEF txt358 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0.5 RAD 0.03125 + txt358 +TEXDEF txt359 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0.5 APEX 0.234531 0.125 0.5 RAD 0.0078125 + txt359 +TEXDEF txt360 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0.5 APEX 0.125 0.234531 0.5 RAD 0.0078125 + txt360 +TEXDEF txt361 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.515469 APEX 0.125 0.125 0.609531 RAD 0.0078125 + txt361 +TEXDEF txt362 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0.625 RAD 0.03125 + txt362 +TEXDEF txt363 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0.625 APEX 0.234531 0.125 0.625 RAD 0.0078125 + txt363 +TEXDEF txt364 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0.625 APEX 0.125 0.234531 0.625 RAD 0.0078125 + txt364 +TEXDEF txt365 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.640469 APEX 0.125 0.125 0.734531 RAD 0.0078125 + txt365 +TEXDEF txt366 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0.75 RAD 0.03125 + txt366 +TEXDEF txt367 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0.75 APEX 0.234531 0.125 0.75 RAD 0.0078125 + txt367 +TEXDEF txt368 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0.75 APEX 0.125 0.234531 0.75 RAD 0.0078125 + txt368 +TEXDEF txt369 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.765469 APEX 0.125 0.125 0.859531 RAD 0.0078125 + txt369 +TEXDEF txt370 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 0.875 RAD 0.03125 + txt370 +TEXDEF txt371 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 0.875 APEX 0.234531 0.125 0.875 RAD 0.0078125 + txt371 +TEXDEF txt372 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 0.875 APEX 0.125 0.234531 0.875 RAD 0.0078125 + txt372 +TEXDEF txt373 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.125 0.890469 APEX 0.125 0.125 0.984531 RAD 0.0078125 + txt373 +TEXDEF txt374 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.125 1 RAD 0.03125 + txt374 +TEXDEF txt375 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.125 1 APEX 0.234531 0.125 1 RAD 0.0078125 + txt375 +TEXDEF txt376 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.140469 1 APEX 0.125 0.234531 1 RAD 0.0078125 + txt376 +TEXDEF txt377 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0 RAD 0.03125 + txt377 +TEXDEF txt378 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0 APEX 0.234531 0.25 0 RAD 0.0078125 + txt378 +TEXDEF txt379 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0 APEX 0.125 0.359531 0 RAD 0.0078125 + txt379 +TEXDEF txt380 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.0154687 APEX 0.125 0.25 0.109531 RAD 0.0078125 + txt380 +TEXDEF txt381 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0.125 RAD 0.03125 + txt381 +TEXDEF txt382 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0.125 APEX 0.234531 0.25 0.125 RAD 0.0078125 + txt382 +TEXDEF txt383 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0.125 APEX 0.125 0.359531 0.125 RAD 0.0078125 + txt383 +TEXDEF txt384 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.140469 APEX 0.125 0.25 0.234531 RAD 0.0078125 + txt384 +TEXDEF txt385 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0.25 RAD 0.03125 + txt385 +TEXDEF txt386 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0.25 APEX 0.234531 0.25 0.25 RAD 0.0078125 + txt386 +TEXDEF txt387 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0.25 APEX 0.125 0.359531 0.25 RAD 0.0078125 + txt387 +TEXDEF txt388 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.265469 APEX 0.125 0.25 0.359531 RAD 0.0078125 + txt388 +TEXDEF txt389 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0.375 RAD 0.03125 + txt389 +TEXDEF txt390 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0.375 APEX 0.234531 0.25 0.375 RAD 0.0078125 + txt390 +TEXDEF txt391 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0.375 APEX 0.125 0.359531 0.375 RAD 0.0078125 + txt391 +TEXDEF txt392 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.390469 APEX 0.125 0.25 0.484531 RAD 0.0078125 + txt392 +TEXDEF txt393 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0.5 RAD 0.03125 + txt393 +TEXDEF txt394 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0.5 APEX 0.234531 0.25 0.5 RAD 0.0078125 + txt394 +TEXDEF txt395 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0.5 APEX 0.125 0.359531 0.5 RAD 0.0078125 + txt395 +TEXDEF txt396 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.515469 APEX 0.125 0.25 0.609531 RAD 0.0078125 + txt396 +TEXDEF txt397 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0.625 RAD 0.03125 + txt397 +TEXDEF txt398 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0.625 APEX 0.234531 0.25 0.625 RAD 0.0078125 + txt398 +TEXDEF txt399 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0.625 APEX 0.125 0.359531 0.625 RAD 0.0078125 + txt399 +TEXDEF txt400 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.640469 APEX 0.125 0.25 0.734531 RAD 0.0078125 + txt400 +TEXDEF txt401 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0.75 RAD 0.03125 + txt401 +TEXDEF txt402 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0.75 APEX 0.234531 0.25 0.75 RAD 0.0078125 + txt402 +TEXDEF txt403 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0.75 APEX 0.125 0.359531 0.75 RAD 0.0078125 + txt403 +TEXDEF txt404 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.765469 APEX 0.125 0.25 0.859531 RAD 0.0078125 + txt404 +TEXDEF txt405 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 0.875 RAD 0.03125 + txt405 +TEXDEF txt406 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 0.875 APEX 0.234531 0.25 0.875 RAD 0.0078125 + txt406 +TEXDEF txt407 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 0.875 APEX 0.125 0.359531 0.875 RAD 0.0078125 + txt407 +TEXDEF txt408 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.25 0.890469 APEX 0.125 0.25 0.984531 RAD 0.0078125 + txt408 +TEXDEF txt409 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.25 1 RAD 0.03125 + txt409 +TEXDEF txt410 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.25 1 APEX 0.234531 0.25 1 RAD 0.0078125 + txt410 +TEXDEF txt411 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.265469 1 APEX 0.125 0.359531 1 RAD 0.0078125 + txt411 +TEXDEF txt412 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0 RAD 0.03125 + txt412 +TEXDEF txt413 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0 APEX 0.234531 0.375 0 RAD 0.0078125 + txt413 +TEXDEF txt414 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0 APEX 0.125 0.484531 0 RAD 0.0078125 + txt414 +TEXDEF txt415 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.0154687 APEX 0.125 0.375 0.109531 RAD 0.0078125 + txt415 +TEXDEF txt416 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0.125 RAD 0.03125 + txt416 +TEXDEF txt417 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0.125 APEX 0.234531 0.375 0.125 RAD 0.0078125 + txt417 +TEXDEF txt418 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0.125 APEX 0.125 0.484531 0.125 RAD 0.0078125 + txt418 +TEXDEF txt419 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.140469 APEX 0.125 0.375 0.234531 RAD 0.0078125 + txt419 +TEXDEF txt420 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0.25 RAD 0.03125 + txt420 +TEXDEF txt421 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0.25 APEX 0.234531 0.375 0.25 RAD 0.0078125 + txt421 +TEXDEF txt422 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0.25 APEX 0.125 0.484531 0.25 RAD 0.0078125 + txt422 +TEXDEF txt423 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.265469 APEX 0.125 0.375 0.359531 RAD 0.0078125 + txt423 +TEXDEF txt424 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0.375 RAD 0.03125 + txt424 +TEXDEF txt425 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0.375 APEX 0.234531 0.375 0.375 RAD 0.0078125 + txt425 +TEXDEF txt426 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0.375 APEX 0.125 0.484531 0.375 RAD 0.0078125 + txt426 +TEXDEF txt427 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.390469 APEX 0.125 0.375 0.484531 RAD 0.0078125 + txt427 +TEXDEF txt428 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0.5 RAD 0.03125 + txt428 +TEXDEF txt429 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0.5 APEX 0.234531 0.375 0.5 RAD 0.0078125 + txt429 +TEXDEF txt430 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0.5 APEX 0.125 0.484531 0.5 RAD 0.0078125 + txt430 +TEXDEF txt431 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.515469 APEX 0.125 0.375 0.609531 RAD 0.0078125 + txt431 +TEXDEF txt432 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0.625 RAD 0.03125 + txt432 +TEXDEF txt433 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0.625 APEX 0.234531 0.375 0.625 RAD 0.0078125 + txt433 +TEXDEF txt434 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0.625 APEX 0.125 0.484531 0.625 RAD 0.0078125 + txt434 +TEXDEF txt435 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.640469 APEX 0.125 0.375 0.734531 RAD 0.0078125 + txt435 +TEXDEF txt436 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0.75 RAD 0.03125 + txt436 +TEXDEF txt437 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0.75 APEX 0.234531 0.375 0.75 RAD 0.0078125 + txt437 +TEXDEF txt438 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0.75 APEX 0.125 0.484531 0.75 RAD 0.0078125 + txt438 +TEXDEF txt439 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.765469 APEX 0.125 0.375 0.859531 RAD 0.0078125 + txt439 +TEXDEF txt440 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 0.875 RAD 0.03125 + txt440 +TEXDEF txt441 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 0.875 APEX 0.234531 0.375 0.875 RAD 0.0078125 + txt441 +TEXDEF txt442 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 0.875 APEX 0.125 0.484531 0.875 RAD 0.0078125 + txt442 +TEXDEF txt443 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.375 0.890469 APEX 0.125 0.375 0.984531 RAD 0.0078125 + txt443 +TEXDEF txt444 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.375 1 RAD 0.03125 + txt444 +TEXDEF txt445 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.375 1 APEX 0.234531 0.375 1 RAD 0.0078125 + txt445 +TEXDEF txt446 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.390469 1 APEX 0.125 0.484531 1 RAD 0.0078125 + txt446 +TEXDEF txt447 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0 RAD 0.03125 + txt447 +TEXDEF txt448 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0 APEX 0.234531 0.5 0 RAD 0.0078125 + txt448 +TEXDEF txt449 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0 APEX 0.125 0.609531 0 RAD 0.0078125 + txt449 +TEXDEF txt450 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.0154687 APEX 0.125 0.5 0.109531 RAD 0.0078125 + txt450 +TEXDEF txt451 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0.125 RAD 0.03125 + txt451 +TEXDEF txt452 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0.125 APEX 0.234531 0.5 0.125 RAD 0.0078125 + txt452 +TEXDEF txt453 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0.125 APEX 0.125 0.609531 0.125 RAD 0.0078125 + txt453 +TEXDEF txt454 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.140469 APEX 0.125 0.5 0.234531 RAD 0.0078125 + txt454 +TEXDEF txt455 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0.25 RAD 0.03125 + txt455 +TEXDEF txt456 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0.25 APEX 0.234531 0.5 0.25 RAD 0.0078125 + txt456 +TEXDEF txt457 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0.25 APEX 0.125 0.609531 0.25 RAD 0.0078125 + txt457 +TEXDEF txt458 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.265469 APEX 0.125 0.5 0.359531 RAD 0.0078125 + txt458 +TEXDEF txt459 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0.375 RAD 0.03125 + txt459 +TEXDEF txt460 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0.375 APEX 0.234531 0.5 0.375 RAD 0.0078125 + txt460 +TEXDEF txt461 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0.375 APEX 0.125 0.609531 0.375 RAD 0.0078125 + txt461 +TEXDEF txt462 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.390469 APEX 0.125 0.5 0.484531 RAD 0.0078125 + txt462 +TEXDEF txt463 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0.5 RAD 0.03125 + txt463 +TEXDEF txt464 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0.5 APEX 0.234531 0.5 0.5 RAD 0.0078125 + txt464 +TEXDEF txt465 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0.5 APEX 0.125 0.609531 0.5 RAD 0.0078125 + txt465 +TEXDEF txt466 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.515469 APEX 0.125 0.5 0.609531 RAD 0.0078125 + txt466 +TEXDEF txt467 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0.625 RAD 0.03125 + txt467 +TEXDEF txt468 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0.625 APEX 0.234531 0.5 0.625 RAD 0.0078125 + txt468 +TEXDEF txt469 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0.625 APEX 0.125 0.609531 0.625 RAD 0.0078125 + txt469 +TEXDEF txt470 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.640469 APEX 0.125 0.5 0.734531 RAD 0.0078125 + txt470 +TEXDEF txt471 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0.75 RAD 0.03125 + txt471 +TEXDEF txt472 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0.75 APEX 0.234531 0.5 0.75 RAD 0.0078125 + txt472 +TEXDEF txt473 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0.75 APEX 0.125 0.609531 0.75 RAD 0.0078125 + txt473 +TEXDEF txt474 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.765469 APEX 0.125 0.5 0.859531 RAD 0.0078125 + txt474 +TEXDEF txt475 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 0.875 RAD 0.03125 + txt475 +TEXDEF txt476 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 0.875 APEX 0.234531 0.5 0.875 RAD 0.0078125 + txt476 +TEXDEF txt477 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 0.875 APEX 0.125 0.609531 0.875 RAD 0.0078125 + txt477 +TEXDEF txt478 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.5 0.890469 APEX 0.125 0.5 0.984531 RAD 0.0078125 + txt478 +TEXDEF txt479 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.5 1 RAD 0.03125 + txt479 +TEXDEF txt480 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.5 1 APEX 0.234531 0.5 1 RAD 0.0078125 + txt480 +TEXDEF txt481 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.515469 1 APEX 0.125 0.609531 1 RAD 0.0078125 + txt481 +TEXDEF txt482 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0 RAD 0.03125 + txt482 +TEXDEF txt483 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0 APEX 0.234531 0.625 0 RAD 0.0078125 + txt483 +TEXDEF txt484 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0 APEX 0.125 0.734531 0 RAD 0.0078125 + txt484 +TEXDEF txt485 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.0154687 APEX 0.125 0.625 0.109531 RAD 0.0078125 + txt485 +TEXDEF txt486 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0.125 RAD 0.03125 + txt486 +TEXDEF txt487 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0.125 APEX 0.234531 0.625 0.125 RAD 0.0078125 + txt487 +TEXDEF txt488 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0.125 APEX 0.125 0.734531 0.125 RAD 0.0078125 + txt488 +TEXDEF txt489 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.140469 APEX 0.125 0.625 0.234531 RAD 0.0078125 + txt489 +TEXDEF txt490 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0.25 RAD 0.03125 + txt490 +TEXDEF txt491 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0.25 APEX 0.234531 0.625 0.25 RAD 0.0078125 + txt491 +TEXDEF txt492 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0.25 APEX 0.125 0.734531 0.25 RAD 0.0078125 + txt492 +TEXDEF txt493 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.265469 APEX 0.125 0.625 0.359531 RAD 0.0078125 + txt493 +TEXDEF txt494 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0.375 RAD 0.03125 + txt494 +TEXDEF txt495 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0.375 APEX 0.234531 0.625 0.375 RAD 0.0078125 + txt495 +TEXDEF txt496 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0.375 APEX 0.125 0.734531 0.375 RAD 0.0078125 + txt496 +TEXDEF txt497 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.390469 APEX 0.125 0.625 0.484531 RAD 0.0078125 + txt497 +TEXDEF txt498 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0.5 RAD 0.03125 + txt498 +TEXDEF txt499 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0.5 APEX 0.234531 0.625 0.5 RAD 0.0078125 + txt499 +TEXDEF txt500 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0.5 APEX 0.125 0.734531 0.5 RAD 0.0078125 + txt500 +TEXDEF txt501 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.515469 APEX 0.125 0.625 0.609531 RAD 0.0078125 + txt501 +TEXDEF txt502 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0.625 RAD 0.03125 + txt502 +TEXDEF txt503 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0.625 APEX 0.234531 0.625 0.625 RAD 0.0078125 + txt503 +TEXDEF txt504 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0.625 APEX 0.125 0.734531 0.625 RAD 0.0078125 + txt504 +TEXDEF txt505 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.640469 APEX 0.125 0.625 0.734531 RAD 0.0078125 + txt505 +TEXDEF txt506 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0.75 RAD 0.03125 + txt506 +TEXDEF txt507 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0.75 APEX 0.234531 0.625 0.75 RAD 0.0078125 + txt507 +TEXDEF txt508 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0.75 APEX 0.125 0.734531 0.75 RAD 0.0078125 + txt508 +TEXDEF txt509 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.765469 APEX 0.125 0.625 0.859531 RAD 0.0078125 + txt509 +TEXDEF txt510 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 0.875 RAD 0.03125 + txt510 +TEXDEF txt511 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 0.875 APEX 0.234531 0.625 0.875 RAD 0.0078125 + txt511 +TEXDEF txt512 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 0.875 APEX 0.125 0.734531 0.875 RAD 0.0078125 + txt512 +TEXDEF txt513 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.625 0.890469 APEX 0.125 0.625 0.984531 RAD 0.0078125 + txt513 +TEXDEF txt514 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.625 1 RAD 0.03125 + txt514 +TEXDEF txt515 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.625 1 APEX 0.234531 0.625 1 RAD 0.0078125 + txt515 +TEXDEF txt516 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.640469 1 APEX 0.125 0.734531 1 RAD 0.0078125 + txt516 +TEXDEF txt517 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0 RAD 0.03125 + txt517 +TEXDEF txt518 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0 APEX 0.234531 0.75 0 RAD 0.0078125 + txt518 +TEXDEF txt519 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0 APEX 0.125 0.859531 0 RAD 0.0078125 + txt519 +TEXDEF txt520 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.0154687 APEX 0.125 0.75 0.109531 RAD 0.0078125 + txt520 +TEXDEF txt521 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0.125 RAD 0.03125 + txt521 +TEXDEF txt522 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0.125 APEX 0.234531 0.75 0.125 RAD 0.0078125 + txt522 +TEXDEF txt523 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0.125 APEX 0.125 0.859531 0.125 RAD 0.0078125 + txt523 +TEXDEF txt524 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.140469 APEX 0.125 0.75 0.234531 RAD 0.0078125 + txt524 +TEXDEF txt525 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0.25 RAD 0.03125 + txt525 +TEXDEF txt526 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0.25 APEX 0.234531 0.75 0.25 RAD 0.0078125 + txt526 +TEXDEF txt527 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0.25 APEX 0.125 0.859531 0.25 RAD 0.0078125 + txt527 +TEXDEF txt528 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.265469 APEX 0.125 0.75 0.359531 RAD 0.0078125 + txt528 +TEXDEF txt529 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0.375 RAD 0.03125 + txt529 +TEXDEF txt530 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0.375 APEX 0.234531 0.75 0.375 RAD 0.0078125 + txt530 +TEXDEF txt531 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0.375 APEX 0.125 0.859531 0.375 RAD 0.0078125 + txt531 +TEXDEF txt532 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.390469 APEX 0.125 0.75 0.484531 RAD 0.0078125 + txt532 +TEXDEF txt533 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0.5 RAD 0.03125 + txt533 +TEXDEF txt534 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0.5 APEX 0.234531 0.75 0.5 RAD 0.0078125 + txt534 +TEXDEF txt535 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0.5 APEX 0.125 0.859531 0.5 RAD 0.0078125 + txt535 +TEXDEF txt536 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.515469 APEX 0.125 0.75 0.609531 RAD 0.0078125 + txt536 +TEXDEF txt537 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0.625 RAD 0.03125 + txt537 +TEXDEF txt538 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0.625 APEX 0.234531 0.75 0.625 RAD 0.0078125 + txt538 +TEXDEF txt539 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0.625 APEX 0.125 0.859531 0.625 RAD 0.0078125 + txt539 +TEXDEF txt540 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.640469 APEX 0.125 0.75 0.734531 RAD 0.0078125 + txt540 +TEXDEF txt541 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0.75 RAD 0.03125 + txt541 +TEXDEF txt542 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0.75 APEX 0.234531 0.75 0.75 RAD 0.0078125 + txt542 +TEXDEF txt543 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0.75 APEX 0.125 0.859531 0.75 RAD 0.0078125 + txt543 +TEXDEF txt544 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.765469 APEX 0.125 0.75 0.859531 RAD 0.0078125 + txt544 +TEXDEF txt545 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 0.875 RAD 0.03125 + txt545 +TEXDEF txt546 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 0.875 APEX 0.234531 0.75 0.875 RAD 0.0078125 + txt546 +TEXDEF txt547 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 0.875 APEX 0.125 0.859531 0.875 RAD 0.0078125 + txt547 +TEXDEF txt548 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.75 0.890469 APEX 0.125 0.75 0.984531 RAD 0.0078125 + txt548 +TEXDEF txt549 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.75 1 RAD 0.03125 + txt549 +TEXDEF txt550 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.75 1 APEX 0.234531 0.75 1 RAD 0.0078125 + txt550 +TEXDEF txt551 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.765469 1 APEX 0.125 0.859531 1 RAD 0.0078125 + txt551 +TEXDEF txt552 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0 RAD 0.03125 + txt552 +TEXDEF txt553 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0 APEX 0.234531 0.875 0 RAD 0.0078125 + txt553 +TEXDEF txt554 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0 APEX 0.125 0.984531 0 RAD 0.0078125 + txt554 +TEXDEF txt555 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.0154687 APEX 0.125 0.875 0.109531 RAD 0.0078125 + txt555 +TEXDEF txt556 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0.125 RAD 0.03125 + txt556 +TEXDEF txt557 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0.125 APEX 0.234531 0.875 0.125 RAD 0.0078125 + txt557 +TEXDEF txt558 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0.125 APEX 0.125 0.984531 0.125 RAD 0.0078125 + txt558 +TEXDEF txt559 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.140469 APEX 0.125 0.875 0.234531 RAD 0.0078125 + txt559 +TEXDEF txt560 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0.25 RAD 0.03125 + txt560 +TEXDEF txt561 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0.25 APEX 0.234531 0.875 0.25 RAD 0.0078125 + txt561 +TEXDEF txt562 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0.25 APEX 0.125 0.984531 0.25 RAD 0.0078125 + txt562 +TEXDEF txt563 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.265469 APEX 0.125 0.875 0.359531 RAD 0.0078125 + txt563 +TEXDEF txt564 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0.375 RAD 0.03125 + txt564 +TEXDEF txt565 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0.375 APEX 0.234531 0.875 0.375 RAD 0.0078125 + txt565 +TEXDEF txt566 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0.375 APEX 0.125 0.984531 0.375 RAD 0.0078125 + txt566 +TEXDEF txt567 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.390469 APEX 0.125 0.875 0.484531 RAD 0.0078125 + txt567 +TEXDEF txt568 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0.5 RAD 0.03125 + txt568 +TEXDEF txt569 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0.5 APEX 0.234531 0.875 0.5 RAD 0.0078125 + txt569 +TEXDEF txt570 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0.5 APEX 0.125 0.984531 0.5 RAD 0.0078125 + txt570 +TEXDEF txt571 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.515469 APEX 0.125 0.875 0.609531 RAD 0.0078125 + txt571 +TEXDEF txt572 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0.625 RAD 0.03125 + txt572 +TEXDEF txt573 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0.625 APEX 0.234531 0.875 0.625 RAD 0.0078125 + txt573 +TEXDEF txt574 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0.625 APEX 0.125 0.984531 0.625 RAD 0.0078125 + txt574 +TEXDEF txt575 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.640469 APEX 0.125 0.875 0.734531 RAD 0.0078125 + txt575 +TEXDEF txt576 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0.75 RAD 0.03125 + txt576 +TEXDEF txt577 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0.75 APEX 0.234531 0.875 0.75 RAD 0.0078125 + txt577 +TEXDEF txt578 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0.75 APEX 0.125 0.984531 0.75 RAD 0.0078125 + txt578 +TEXDEF txt579 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.765469 APEX 0.125 0.875 0.859531 RAD 0.0078125 + txt579 +TEXDEF txt580 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 0.875 RAD 0.03125 + txt580 +TEXDEF txt581 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 0.875 APEX 0.234531 0.875 0.875 RAD 0.0078125 + txt581 +TEXDEF txt582 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 0.875 APEX 0.125 0.984531 0.875 RAD 0.0078125 + txt582 +TEXDEF txt583 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.875 0.890469 APEX 0.125 0.875 0.984531 RAD 0.0078125 + txt583 +TEXDEF txt584 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 0.875 1 RAD 0.03125 + txt584 +TEXDEF txt585 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 0.875 1 APEX 0.234531 0.875 1 RAD 0.0078125 + txt585 +TEXDEF txt586 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 0.890469 1 APEX 0.125 0.984531 1 RAD 0.0078125 + txt586 +TEXDEF txt587 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0 RAD 0.03125 + txt587 +TEXDEF txt588 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0 APEX 0.234531 1 0 RAD 0.0078125 + txt588 +TEXDEF txt589 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.0154687 APEX 0.125 1 0.109531 RAD 0.0078125 + txt589 +TEXDEF txt590 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0.125 RAD 0.03125 + txt590 +TEXDEF txt591 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0.125 APEX 0.234531 1 0.125 RAD 0.0078125 + txt591 +TEXDEF txt592 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.140469 APEX 0.125 1 0.234531 RAD 0.0078125 + txt592 +TEXDEF txt593 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0.25 RAD 0.03125 + txt593 +TEXDEF txt594 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0.25 APEX 0.234531 1 0.25 RAD 0.0078125 + txt594 +TEXDEF txt595 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.265469 APEX 0.125 1 0.359531 RAD 0.0078125 + txt595 +TEXDEF txt596 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0.375 RAD 0.03125 + txt596 +TEXDEF txt597 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0.375 APEX 0.234531 1 0.375 RAD 0.0078125 + txt597 +TEXDEF txt598 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.390469 APEX 0.125 1 0.484531 RAD 0.0078125 + txt598 +TEXDEF txt599 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0.5 RAD 0.03125 + txt599 +TEXDEF txt600 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0.5 APEX 0.234531 1 0.5 RAD 0.0078125 + txt600 +TEXDEF txt601 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.515469 APEX 0.125 1 0.609531 RAD 0.0078125 + txt601 +TEXDEF txt602 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0.625 RAD 0.03125 + txt602 +TEXDEF txt603 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0.625 APEX 0.234531 1 0.625 RAD 0.0078125 + txt603 +TEXDEF txt604 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.640469 APEX 0.125 1 0.734531 RAD 0.0078125 + txt604 +TEXDEF txt605 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0.75 RAD 0.03125 + txt605 +TEXDEF txt606 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0.75 APEX 0.234531 1 0.75 RAD 0.0078125 + txt606 +TEXDEF txt607 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.765469 APEX 0.125 1 0.859531 RAD 0.0078125 + txt607 +TEXDEF txt608 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 0.875 RAD 0.03125 + txt608 +TEXDEF txt609 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 0.875 APEX 0.234531 1 0.875 RAD 0.0078125 + txt609 +TEXDEF txt610 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.125 1 0.890469 APEX 0.125 1 0.984531 RAD 0.0078125 + txt610 +TEXDEF txt611 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.125 1 1 RAD 0.03125 + txt611 +TEXDEF txt612 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.140469 1 1 APEX 0.234531 1 1 RAD 0.0078125 + txt612 +TEXDEF txt613 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0 RAD 0.03125 + txt613 +TEXDEF txt614 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0 APEX 0.359531 0 0 RAD 0.0078125 + txt614 +TEXDEF txt615 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0 APEX 0.25 0.109531 0 RAD 0.0078125 + txt615 +TEXDEF txt616 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.0154687 APEX 0.25 0 0.109531 RAD 0.0078125 + txt616 +TEXDEF txt617 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0.125 RAD 0.03125 + txt617 +TEXDEF txt618 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0.125 APEX 0.359531 0 0.125 RAD 0.0078125 + txt618 +TEXDEF txt619 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0.125 APEX 0.25 0.109531 0.125 RAD 0.0078125 + txt619 +TEXDEF txt620 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.140469 APEX 0.25 0 0.234531 RAD 0.0078125 + txt620 +TEXDEF txt621 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0.25 RAD 0.03125 + txt621 +TEXDEF txt622 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0.25 APEX 0.359531 0 0.25 RAD 0.0078125 + txt622 +TEXDEF txt623 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0.25 APEX 0.25 0.109531 0.25 RAD 0.0078125 + txt623 +TEXDEF txt624 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.265469 APEX 0.25 0 0.359531 RAD 0.0078125 + txt624 +TEXDEF txt625 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0.375 RAD 0.03125 + txt625 +TEXDEF txt626 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0.375 APEX 0.359531 0 0.375 RAD 0.0078125 + txt626 +TEXDEF txt627 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0.375 APEX 0.25 0.109531 0.375 RAD 0.0078125 + txt627 +TEXDEF txt628 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.390469 APEX 0.25 0 0.484531 RAD 0.0078125 + txt628 +TEXDEF txt629 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0.5 RAD 0.03125 + txt629 +TEXDEF txt630 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0.5 APEX 0.359531 0 0.5 RAD 0.0078125 + txt630 +TEXDEF txt631 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0.5 APEX 0.25 0.109531 0.5 RAD 0.0078125 + txt631 +TEXDEF txt632 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.515469 APEX 0.25 0 0.609531 RAD 0.0078125 + txt632 +TEXDEF txt633 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0.625 RAD 0.03125 + txt633 +TEXDEF txt634 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0.625 APEX 0.359531 0 0.625 RAD 0.0078125 + txt634 +TEXDEF txt635 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0.625 APEX 0.25 0.109531 0.625 RAD 0.0078125 + txt635 +TEXDEF txt636 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.640469 APEX 0.25 0 0.734531 RAD 0.0078125 + txt636 +TEXDEF txt637 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0.75 RAD 0.03125 + txt637 +TEXDEF txt638 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0.75 APEX 0.359531 0 0.75 RAD 0.0078125 + txt638 +TEXDEF txt639 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0.75 APEX 0.25 0.109531 0.75 RAD 0.0078125 + txt639 +TEXDEF txt640 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.765469 APEX 0.25 0 0.859531 RAD 0.0078125 + txt640 +TEXDEF txt641 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 0.875 RAD 0.03125 + txt641 +TEXDEF txt642 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 0.875 APEX 0.359531 0 0.875 RAD 0.0078125 + txt642 +TEXDEF txt643 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 0.875 APEX 0.25 0.109531 0.875 RAD 0.0078125 + txt643 +TEXDEF txt644 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0 0.890469 APEX 0.25 0 0.984531 RAD 0.0078125 + txt644 +TEXDEF txt645 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0 1 RAD 0.03125 + txt645 +TEXDEF txt646 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0 1 APEX 0.359531 0 1 RAD 0.0078125 + txt646 +TEXDEF txt647 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.0154687 1 APEX 0.25 0.109531 1 RAD 0.0078125 + txt647 +TEXDEF txt648 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0 RAD 0.03125 + txt648 +TEXDEF txt649 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0 APEX 0.359531 0.125 0 RAD 0.0078125 + txt649 +TEXDEF txt650 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0 APEX 0.25 0.234531 0 RAD 0.0078125 + txt650 +TEXDEF txt651 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.0154687 APEX 0.25 0.125 0.109531 RAD 0.0078125 + txt651 +TEXDEF txt652 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0.125 RAD 0.03125 + txt652 +TEXDEF txt653 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0.125 APEX 0.359531 0.125 0.125 RAD 0.0078125 + txt653 +TEXDEF txt654 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0.125 APEX 0.25 0.234531 0.125 RAD 0.0078125 + txt654 +TEXDEF txt655 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.140469 APEX 0.25 0.125 0.234531 RAD 0.0078125 + txt655 +TEXDEF txt656 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0.25 RAD 0.03125 + txt656 +TEXDEF txt657 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0.25 APEX 0.359531 0.125 0.25 RAD 0.0078125 + txt657 +TEXDEF txt658 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0.25 APEX 0.25 0.234531 0.25 RAD 0.0078125 + txt658 +TEXDEF txt659 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.265469 APEX 0.25 0.125 0.359531 RAD 0.0078125 + txt659 +TEXDEF txt660 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0.375 RAD 0.03125 + txt660 +TEXDEF txt661 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0.375 APEX 0.359531 0.125 0.375 RAD 0.0078125 + txt661 +TEXDEF txt662 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0.375 APEX 0.25 0.234531 0.375 RAD 0.0078125 + txt662 +TEXDEF txt663 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.390469 APEX 0.25 0.125 0.484531 RAD 0.0078125 + txt663 +TEXDEF txt664 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0.5 RAD 0.03125 + txt664 +TEXDEF txt665 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0.5 APEX 0.359531 0.125 0.5 RAD 0.0078125 + txt665 +TEXDEF txt666 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0.5 APEX 0.25 0.234531 0.5 RAD 0.0078125 + txt666 +TEXDEF txt667 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.515469 APEX 0.25 0.125 0.609531 RAD 0.0078125 + txt667 +TEXDEF txt668 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0.625 RAD 0.03125 + txt668 +TEXDEF txt669 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0.625 APEX 0.359531 0.125 0.625 RAD 0.0078125 + txt669 +TEXDEF txt670 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0.625 APEX 0.25 0.234531 0.625 RAD 0.0078125 + txt670 +TEXDEF txt671 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.640469 APEX 0.25 0.125 0.734531 RAD 0.0078125 + txt671 +TEXDEF txt672 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0.75 RAD 0.03125 + txt672 +TEXDEF txt673 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0.75 APEX 0.359531 0.125 0.75 RAD 0.0078125 + txt673 +TEXDEF txt674 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0.75 APEX 0.25 0.234531 0.75 RAD 0.0078125 + txt674 +TEXDEF txt675 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.765469 APEX 0.25 0.125 0.859531 RAD 0.0078125 + txt675 +TEXDEF txt676 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 0.875 RAD 0.03125 + txt676 +TEXDEF txt677 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 0.875 APEX 0.359531 0.125 0.875 RAD 0.0078125 + txt677 +TEXDEF txt678 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 0.875 APEX 0.25 0.234531 0.875 RAD 0.0078125 + txt678 +TEXDEF txt679 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.125 0.890469 APEX 0.25 0.125 0.984531 RAD 0.0078125 + txt679 +TEXDEF txt680 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.125 1 RAD 0.03125 + txt680 +TEXDEF txt681 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.125 1 APEX 0.359531 0.125 1 RAD 0.0078125 + txt681 +TEXDEF txt682 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.140469 1 APEX 0.25 0.234531 1 RAD 0.0078125 + txt682 +TEXDEF txt683 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0 RAD 0.03125 + txt683 +TEXDEF txt684 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0 APEX 0.359531 0.25 0 RAD 0.0078125 + txt684 +TEXDEF txt685 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0 APEX 0.25 0.359531 0 RAD 0.0078125 + txt685 +TEXDEF txt686 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.0154687 APEX 0.25 0.25 0.109531 RAD 0.0078125 + txt686 +TEXDEF txt687 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0.125 RAD 0.03125 + txt687 +TEXDEF txt688 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0.125 APEX 0.359531 0.25 0.125 RAD 0.0078125 + txt688 +TEXDEF txt689 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0.125 APEX 0.25 0.359531 0.125 RAD 0.0078125 + txt689 +TEXDEF txt690 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.140469 APEX 0.25 0.25 0.234531 RAD 0.0078125 + txt690 +TEXDEF txt691 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0.25 RAD 0.03125 + txt691 +TEXDEF txt692 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0.25 APEX 0.359531 0.25 0.25 RAD 0.0078125 + txt692 +TEXDEF txt693 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0.25 APEX 0.25 0.359531 0.25 RAD 0.0078125 + txt693 +TEXDEF txt694 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.265469 APEX 0.25 0.25 0.359531 RAD 0.0078125 + txt694 +TEXDEF txt695 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0.375 RAD 0.03125 + txt695 +TEXDEF txt696 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0.375 APEX 0.359531 0.25 0.375 RAD 0.0078125 + txt696 +TEXDEF txt697 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0.375 APEX 0.25 0.359531 0.375 RAD 0.0078125 + txt697 +TEXDEF txt698 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.390469 APEX 0.25 0.25 0.484531 RAD 0.0078125 + txt698 +TEXDEF txt699 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0.5 RAD 0.03125 + txt699 +TEXDEF txt700 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0.5 APEX 0.359531 0.25 0.5 RAD 0.0078125 + txt700 +TEXDEF txt701 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0.5 APEX 0.25 0.359531 0.5 RAD 0.0078125 + txt701 +TEXDEF txt702 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.515469 APEX 0.25 0.25 0.609531 RAD 0.0078125 + txt702 +TEXDEF txt703 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0.625 RAD 0.03125 + txt703 +TEXDEF txt704 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0.625 APEX 0.359531 0.25 0.625 RAD 0.0078125 + txt704 +TEXDEF txt705 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0.625 APEX 0.25 0.359531 0.625 RAD 0.0078125 + txt705 +TEXDEF txt706 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.640469 APEX 0.25 0.25 0.734531 RAD 0.0078125 + txt706 +TEXDEF txt707 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0.75 RAD 0.03125 + txt707 +TEXDEF txt708 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0.75 APEX 0.359531 0.25 0.75 RAD 0.0078125 + txt708 +TEXDEF txt709 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0.75 APEX 0.25 0.359531 0.75 RAD 0.0078125 + txt709 +TEXDEF txt710 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.765469 APEX 0.25 0.25 0.859531 RAD 0.0078125 + txt710 +TEXDEF txt711 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 0.875 RAD 0.03125 + txt711 +TEXDEF txt712 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 0.875 APEX 0.359531 0.25 0.875 RAD 0.0078125 + txt712 +TEXDEF txt713 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 0.875 APEX 0.25 0.359531 0.875 RAD 0.0078125 + txt713 +TEXDEF txt714 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.25 0.890469 APEX 0.25 0.25 0.984531 RAD 0.0078125 + txt714 +TEXDEF txt715 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.25 1 RAD 0.03125 + txt715 +TEXDEF txt716 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.25 1 APEX 0.359531 0.25 1 RAD 0.0078125 + txt716 +TEXDEF txt717 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.265469 1 APEX 0.25 0.359531 1 RAD 0.0078125 + txt717 +TEXDEF txt718 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0 RAD 0.03125 + txt718 +TEXDEF txt719 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0 APEX 0.359531 0.375 0 RAD 0.0078125 + txt719 +TEXDEF txt720 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0 APEX 0.25 0.484531 0 RAD 0.0078125 + txt720 +TEXDEF txt721 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.0154687 APEX 0.25 0.375 0.109531 RAD 0.0078125 + txt721 +TEXDEF txt722 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0.125 RAD 0.03125 + txt722 +TEXDEF txt723 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0.125 APEX 0.359531 0.375 0.125 RAD 0.0078125 + txt723 +TEXDEF txt724 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0.125 APEX 0.25 0.484531 0.125 RAD 0.0078125 + txt724 +TEXDEF txt725 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.140469 APEX 0.25 0.375 0.234531 RAD 0.0078125 + txt725 +TEXDEF txt726 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0.25 RAD 0.03125 + txt726 +TEXDEF txt727 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0.25 APEX 0.359531 0.375 0.25 RAD 0.0078125 + txt727 +TEXDEF txt728 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0.25 APEX 0.25 0.484531 0.25 RAD 0.0078125 + txt728 +TEXDEF txt729 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.265469 APEX 0.25 0.375 0.359531 RAD 0.0078125 + txt729 +TEXDEF txt730 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0.375 RAD 0.03125 + txt730 +TEXDEF txt731 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0.375 APEX 0.359531 0.375 0.375 RAD 0.0078125 + txt731 +TEXDEF txt732 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0.375 APEX 0.25 0.484531 0.375 RAD 0.0078125 + txt732 +TEXDEF txt733 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.390469 APEX 0.25 0.375 0.484531 RAD 0.0078125 + txt733 +TEXDEF txt734 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0.5 RAD 0.03125 + txt734 +TEXDEF txt735 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0.5 APEX 0.359531 0.375 0.5 RAD 0.0078125 + txt735 +TEXDEF txt736 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0.5 APEX 0.25 0.484531 0.5 RAD 0.0078125 + txt736 +TEXDEF txt737 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.515469 APEX 0.25 0.375 0.609531 RAD 0.0078125 + txt737 +TEXDEF txt738 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0.625 RAD 0.03125 + txt738 +TEXDEF txt739 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0.625 APEX 0.359531 0.375 0.625 RAD 0.0078125 + txt739 +TEXDEF txt740 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0.625 APEX 0.25 0.484531 0.625 RAD 0.0078125 + txt740 +TEXDEF txt741 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.640469 APEX 0.25 0.375 0.734531 RAD 0.0078125 + txt741 +TEXDEF txt742 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0.75 RAD 0.03125 + txt742 +TEXDEF txt743 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0.75 APEX 0.359531 0.375 0.75 RAD 0.0078125 + txt743 +TEXDEF txt744 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0.75 APEX 0.25 0.484531 0.75 RAD 0.0078125 + txt744 +TEXDEF txt745 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.765469 APEX 0.25 0.375 0.859531 RAD 0.0078125 + txt745 +TEXDEF txt746 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 0.875 RAD 0.03125 + txt746 +TEXDEF txt747 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 0.875 APEX 0.359531 0.375 0.875 RAD 0.0078125 + txt747 +TEXDEF txt748 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 0.875 APEX 0.25 0.484531 0.875 RAD 0.0078125 + txt748 +TEXDEF txt749 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.375 0.890469 APEX 0.25 0.375 0.984531 RAD 0.0078125 + txt749 +TEXDEF txt750 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.375 1 RAD 0.03125 + txt750 +TEXDEF txt751 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.375 1 APEX 0.359531 0.375 1 RAD 0.0078125 + txt751 +TEXDEF txt752 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.390469 1 APEX 0.25 0.484531 1 RAD 0.0078125 + txt752 +TEXDEF txt753 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0 RAD 0.03125 + txt753 +TEXDEF txt754 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0 APEX 0.359531 0.5 0 RAD 0.0078125 + txt754 +TEXDEF txt755 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0 APEX 0.25 0.609531 0 RAD 0.0078125 + txt755 +TEXDEF txt756 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.0154687 APEX 0.25 0.5 0.109531 RAD 0.0078125 + txt756 +TEXDEF txt757 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0.125 RAD 0.03125 + txt757 +TEXDEF txt758 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0.125 APEX 0.359531 0.5 0.125 RAD 0.0078125 + txt758 +TEXDEF txt759 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0.125 APEX 0.25 0.609531 0.125 RAD 0.0078125 + txt759 +TEXDEF txt760 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.140469 APEX 0.25 0.5 0.234531 RAD 0.0078125 + txt760 +TEXDEF txt761 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0.25 RAD 0.03125 + txt761 +TEXDEF txt762 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0.25 APEX 0.359531 0.5 0.25 RAD 0.0078125 + txt762 +TEXDEF txt763 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0.25 APEX 0.25 0.609531 0.25 RAD 0.0078125 + txt763 +TEXDEF txt764 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.265469 APEX 0.25 0.5 0.359531 RAD 0.0078125 + txt764 +TEXDEF txt765 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0.375 RAD 0.03125 + txt765 +TEXDEF txt766 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0.375 APEX 0.359531 0.5 0.375 RAD 0.0078125 + txt766 +TEXDEF txt767 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0.375 APEX 0.25 0.609531 0.375 RAD 0.0078125 + txt767 +TEXDEF txt768 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.390469 APEX 0.25 0.5 0.484531 RAD 0.0078125 + txt768 +TEXDEF txt769 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0.5 RAD 0.03125 + txt769 +TEXDEF txt770 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0.5 APEX 0.359531 0.5 0.5 RAD 0.0078125 + txt770 +TEXDEF txt771 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0.5 APEX 0.25 0.609531 0.5 RAD 0.0078125 + txt771 +TEXDEF txt772 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.515469 APEX 0.25 0.5 0.609531 RAD 0.0078125 + txt772 +TEXDEF txt773 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0.625 RAD 0.03125 + txt773 +TEXDEF txt774 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0.625 APEX 0.359531 0.5 0.625 RAD 0.0078125 + txt774 +TEXDEF txt775 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0.625 APEX 0.25 0.609531 0.625 RAD 0.0078125 + txt775 +TEXDEF txt776 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.640469 APEX 0.25 0.5 0.734531 RAD 0.0078125 + txt776 +TEXDEF txt777 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0.75 RAD 0.03125 + txt777 +TEXDEF txt778 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0.75 APEX 0.359531 0.5 0.75 RAD 0.0078125 + txt778 +TEXDEF txt779 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0.75 APEX 0.25 0.609531 0.75 RAD 0.0078125 + txt779 +TEXDEF txt780 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.765469 APEX 0.25 0.5 0.859531 RAD 0.0078125 + txt780 +TEXDEF txt781 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 0.875 RAD 0.03125 + txt781 +TEXDEF txt782 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 0.875 APEX 0.359531 0.5 0.875 RAD 0.0078125 + txt782 +TEXDEF txt783 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 0.875 APEX 0.25 0.609531 0.875 RAD 0.0078125 + txt783 +TEXDEF txt784 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.5 0.890469 APEX 0.25 0.5 0.984531 RAD 0.0078125 + txt784 +TEXDEF txt785 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.5 1 RAD 0.03125 + txt785 +TEXDEF txt786 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.5 1 APEX 0.359531 0.5 1 RAD 0.0078125 + txt786 +TEXDEF txt787 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.515469 1 APEX 0.25 0.609531 1 RAD 0.0078125 + txt787 +TEXDEF txt788 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0 RAD 0.03125 + txt788 +TEXDEF txt789 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0 APEX 0.359531 0.625 0 RAD 0.0078125 + txt789 +TEXDEF txt790 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0 APEX 0.25 0.734531 0 RAD 0.0078125 + txt790 +TEXDEF txt791 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.0154687 APEX 0.25 0.625 0.109531 RAD 0.0078125 + txt791 +TEXDEF txt792 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0.125 RAD 0.03125 + txt792 +TEXDEF txt793 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0.125 APEX 0.359531 0.625 0.125 RAD 0.0078125 + txt793 +TEXDEF txt794 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0.125 APEX 0.25 0.734531 0.125 RAD 0.0078125 + txt794 +TEXDEF txt795 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.140469 APEX 0.25 0.625 0.234531 RAD 0.0078125 + txt795 +TEXDEF txt796 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0.25 RAD 0.03125 + txt796 +TEXDEF txt797 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0.25 APEX 0.359531 0.625 0.25 RAD 0.0078125 + txt797 +TEXDEF txt798 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0.25 APEX 0.25 0.734531 0.25 RAD 0.0078125 + txt798 +TEXDEF txt799 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.265469 APEX 0.25 0.625 0.359531 RAD 0.0078125 + txt799 +TEXDEF txt800 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0.375 RAD 0.03125 + txt800 +TEXDEF txt801 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0.375 APEX 0.359531 0.625 0.375 RAD 0.0078125 + txt801 +TEXDEF txt802 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0.375 APEX 0.25 0.734531 0.375 RAD 0.0078125 + txt802 +TEXDEF txt803 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.390469 APEX 0.25 0.625 0.484531 RAD 0.0078125 + txt803 +TEXDEF txt804 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0.5 RAD 0.03125 + txt804 +TEXDEF txt805 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0.5 APEX 0.359531 0.625 0.5 RAD 0.0078125 + txt805 +TEXDEF txt806 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0.5 APEX 0.25 0.734531 0.5 RAD 0.0078125 + txt806 +TEXDEF txt807 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.515469 APEX 0.25 0.625 0.609531 RAD 0.0078125 + txt807 +TEXDEF txt808 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0.625 RAD 0.03125 + txt808 +TEXDEF txt809 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0.625 APEX 0.359531 0.625 0.625 RAD 0.0078125 + txt809 +TEXDEF txt810 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0.625 APEX 0.25 0.734531 0.625 RAD 0.0078125 + txt810 +TEXDEF txt811 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.640469 APEX 0.25 0.625 0.734531 RAD 0.0078125 + txt811 +TEXDEF txt812 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0.75 RAD 0.03125 + txt812 +TEXDEF txt813 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0.75 APEX 0.359531 0.625 0.75 RAD 0.0078125 + txt813 +TEXDEF txt814 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0.75 APEX 0.25 0.734531 0.75 RAD 0.0078125 + txt814 +TEXDEF txt815 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.765469 APEX 0.25 0.625 0.859531 RAD 0.0078125 + txt815 +TEXDEF txt816 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 0.875 RAD 0.03125 + txt816 +TEXDEF txt817 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 0.875 APEX 0.359531 0.625 0.875 RAD 0.0078125 + txt817 +TEXDEF txt818 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 0.875 APEX 0.25 0.734531 0.875 RAD 0.0078125 + txt818 +TEXDEF txt819 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.625 0.890469 APEX 0.25 0.625 0.984531 RAD 0.0078125 + txt819 +TEXDEF txt820 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.625 1 RAD 0.03125 + txt820 +TEXDEF txt821 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.625 1 APEX 0.359531 0.625 1 RAD 0.0078125 + txt821 +TEXDEF txt822 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.640469 1 APEX 0.25 0.734531 1 RAD 0.0078125 + txt822 +TEXDEF txt823 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0 RAD 0.03125 + txt823 +TEXDEF txt824 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0 APEX 0.359531 0.75 0 RAD 0.0078125 + txt824 +TEXDEF txt825 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0 APEX 0.25 0.859531 0 RAD 0.0078125 + txt825 +TEXDEF txt826 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.0154687 APEX 0.25 0.75 0.109531 RAD 0.0078125 + txt826 +TEXDEF txt827 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0.125 RAD 0.03125 + txt827 +TEXDEF txt828 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0.125 APEX 0.359531 0.75 0.125 RAD 0.0078125 + txt828 +TEXDEF txt829 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0.125 APEX 0.25 0.859531 0.125 RAD 0.0078125 + txt829 +TEXDEF txt830 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.140469 APEX 0.25 0.75 0.234531 RAD 0.0078125 + txt830 +TEXDEF txt831 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0.25 RAD 0.03125 + txt831 +TEXDEF txt832 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0.25 APEX 0.359531 0.75 0.25 RAD 0.0078125 + txt832 +TEXDEF txt833 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0.25 APEX 0.25 0.859531 0.25 RAD 0.0078125 + txt833 +TEXDEF txt834 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.265469 APEX 0.25 0.75 0.359531 RAD 0.0078125 + txt834 +TEXDEF txt835 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0.375 RAD 0.03125 + txt835 +TEXDEF txt836 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0.375 APEX 0.359531 0.75 0.375 RAD 0.0078125 + txt836 +TEXDEF txt837 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0.375 APEX 0.25 0.859531 0.375 RAD 0.0078125 + txt837 +TEXDEF txt838 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.390469 APEX 0.25 0.75 0.484531 RAD 0.0078125 + txt838 +TEXDEF txt839 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0.5 RAD 0.03125 + txt839 +TEXDEF txt840 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0.5 APEX 0.359531 0.75 0.5 RAD 0.0078125 + txt840 +TEXDEF txt841 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0.5 APEX 0.25 0.859531 0.5 RAD 0.0078125 + txt841 +TEXDEF txt842 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.515469 APEX 0.25 0.75 0.609531 RAD 0.0078125 + txt842 +TEXDEF txt843 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0.625 RAD 0.03125 + txt843 +TEXDEF txt844 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0.625 APEX 0.359531 0.75 0.625 RAD 0.0078125 + txt844 +TEXDEF txt845 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0.625 APEX 0.25 0.859531 0.625 RAD 0.0078125 + txt845 +TEXDEF txt846 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.640469 APEX 0.25 0.75 0.734531 RAD 0.0078125 + txt846 +TEXDEF txt847 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0.75 RAD 0.03125 + txt847 +TEXDEF txt848 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0.75 APEX 0.359531 0.75 0.75 RAD 0.0078125 + txt848 +TEXDEF txt849 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0.75 APEX 0.25 0.859531 0.75 RAD 0.0078125 + txt849 +TEXDEF txt850 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.765469 APEX 0.25 0.75 0.859531 RAD 0.0078125 + txt850 +TEXDEF txt851 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 0.875 RAD 0.03125 + txt851 +TEXDEF txt852 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 0.875 APEX 0.359531 0.75 0.875 RAD 0.0078125 + txt852 +TEXDEF txt853 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 0.875 APEX 0.25 0.859531 0.875 RAD 0.0078125 + txt853 +TEXDEF txt854 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.75 0.890469 APEX 0.25 0.75 0.984531 RAD 0.0078125 + txt854 +TEXDEF txt855 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.75 1 RAD 0.03125 + txt855 +TEXDEF txt856 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.75 1 APEX 0.359531 0.75 1 RAD 0.0078125 + txt856 +TEXDEF txt857 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.765469 1 APEX 0.25 0.859531 1 RAD 0.0078125 + txt857 +TEXDEF txt858 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0 RAD 0.03125 + txt858 +TEXDEF txt859 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0 APEX 0.359531 0.875 0 RAD 0.0078125 + txt859 +TEXDEF txt860 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0 APEX 0.25 0.984531 0 RAD 0.0078125 + txt860 +TEXDEF txt861 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.0154687 APEX 0.25 0.875 0.109531 RAD 0.0078125 + txt861 +TEXDEF txt862 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0.125 RAD 0.03125 + txt862 +TEXDEF txt863 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0.125 APEX 0.359531 0.875 0.125 RAD 0.0078125 + txt863 +TEXDEF txt864 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0.125 APEX 0.25 0.984531 0.125 RAD 0.0078125 + txt864 +TEXDEF txt865 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.140469 APEX 0.25 0.875 0.234531 RAD 0.0078125 + txt865 +TEXDEF txt866 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0.25 RAD 0.03125 + txt866 +TEXDEF txt867 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0.25 APEX 0.359531 0.875 0.25 RAD 0.0078125 + txt867 +TEXDEF txt868 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0.25 APEX 0.25 0.984531 0.25 RAD 0.0078125 + txt868 +TEXDEF txt869 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.265469 APEX 0.25 0.875 0.359531 RAD 0.0078125 + txt869 +TEXDEF txt870 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0.375 RAD 0.03125 + txt870 +TEXDEF txt871 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0.375 APEX 0.359531 0.875 0.375 RAD 0.0078125 + txt871 +TEXDEF txt872 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0.375 APEX 0.25 0.984531 0.375 RAD 0.0078125 + txt872 +TEXDEF txt873 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.390469 APEX 0.25 0.875 0.484531 RAD 0.0078125 + txt873 +TEXDEF txt874 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0.5 RAD 0.03125 + txt874 +TEXDEF txt875 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0.5 APEX 0.359531 0.875 0.5 RAD 0.0078125 + txt875 +TEXDEF txt876 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0.5 APEX 0.25 0.984531 0.5 RAD 0.0078125 + txt876 +TEXDEF txt877 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.515469 APEX 0.25 0.875 0.609531 RAD 0.0078125 + txt877 +TEXDEF txt878 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0.625 RAD 0.03125 + txt878 +TEXDEF txt879 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0.625 APEX 0.359531 0.875 0.625 RAD 0.0078125 + txt879 +TEXDEF txt880 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0.625 APEX 0.25 0.984531 0.625 RAD 0.0078125 + txt880 +TEXDEF txt881 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.640469 APEX 0.25 0.875 0.734531 RAD 0.0078125 + txt881 +TEXDEF txt882 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0.75 RAD 0.03125 + txt882 +TEXDEF txt883 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0.75 APEX 0.359531 0.875 0.75 RAD 0.0078125 + txt883 +TEXDEF txt884 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0.75 APEX 0.25 0.984531 0.75 RAD 0.0078125 + txt884 +TEXDEF txt885 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.765469 APEX 0.25 0.875 0.859531 RAD 0.0078125 + txt885 +TEXDEF txt886 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 0.875 RAD 0.03125 + txt886 +TEXDEF txt887 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 0.875 APEX 0.359531 0.875 0.875 RAD 0.0078125 + txt887 +TEXDEF txt888 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 0.875 APEX 0.25 0.984531 0.875 RAD 0.0078125 + txt888 +TEXDEF txt889 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.875 0.890469 APEX 0.25 0.875 0.984531 RAD 0.0078125 + txt889 +TEXDEF txt890 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 0.875 1 RAD 0.03125 + txt890 +TEXDEF txt891 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 0.875 1 APEX 0.359531 0.875 1 RAD 0.0078125 + txt891 +TEXDEF txt892 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 0.890469 1 APEX 0.25 0.984531 1 RAD 0.0078125 + txt892 +TEXDEF txt893 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0 RAD 0.03125 + txt893 +TEXDEF txt894 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0 APEX 0.359531 1 0 RAD 0.0078125 + txt894 +TEXDEF txt895 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.0154687 APEX 0.25 1 0.109531 RAD 0.0078125 + txt895 +TEXDEF txt896 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0.125 RAD 0.03125 + txt896 +TEXDEF txt897 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0.125 APEX 0.359531 1 0.125 RAD 0.0078125 + txt897 +TEXDEF txt898 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.140469 APEX 0.25 1 0.234531 RAD 0.0078125 + txt898 +TEXDEF txt899 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0.25 RAD 0.03125 + txt899 +TEXDEF txt900 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0.25 APEX 0.359531 1 0.25 RAD 0.0078125 + txt900 +TEXDEF txt901 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.265469 APEX 0.25 1 0.359531 RAD 0.0078125 + txt901 +TEXDEF txt902 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0.375 RAD 0.03125 + txt902 +TEXDEF txt903 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0.375 APEX 0.359531 1 0.375 RAD 0.0078125 + txt903 +TEXDEF txt904 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.390469 APEX 0.25 1 0.484531 RAD 0.0078125 + txt904 +TEXDEF txt905 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0.5 RAD 0.03125 + txt905 +TEXDEF txt906 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0.5 APEX 0.359531 1 0.5 RAD 0.0078125 + txt906 +TEXDEF txt907 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.515469 APEX 0.25 1 0.609531 RAD 0.0078125 + txt907 +TEXDEF txt908 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0.625 RAD 0.03125 + txt908 +TEXDEF txt909 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0.625 APEX 0.359531 1 0.625 RAD 0.0078125 + txt909 +TEXDEF txt910 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.640469 APEX 0.25 1 0.734531 RAD 0.0078125 + txt910 +TEXDEF txt911 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0.75 RAD 0.03125 + txt911 +TEXDEF txt912 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0.75 APEX 0.359531 1 0.75 RAD 0.0078125 + txt912 +TEXDEF txt913 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.765469 APEX 0.25 1 0.859531 RAD 0.0078125 + txt913 +TEXDEF txt914 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 0.875 RAD 0.03125 + txt914 +TEXDEF txt915 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 0.875 APEX 0.359531 1 0.875 RAD 0.0078125 + txt915 +TEXDEF txt916 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.25 1 0.890469 APEX 0.25 1 0.984531 RAD 0.0078125 + txt916 +TEXDEF txt917 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.25 1 1 RAD 0.03125 + txt917 +TEXDEF txt918 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.265469 1 1 APEX 0.359531 1 1 RAD 0.0078125 + txt918 +TEXDEF txt919 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0 RAD 0.03125 + txt919 +TEXDEF txt920 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0 APEX 0.484531 0 0 RAD 0.0078125 + txt920 +TEXDEF txt921 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0 APEX 0.375 0.109531 0 RAD 0.0078125 + txt921 +TEXDEF txt922 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.0154687 APEX 0.375 0 0.109531 RAD 0.0078125 + txt922 +TEXDEF txt923 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0.125 RAD 0.03125 + txt923 +TEXDEF txt924 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0.125 APEX 0.484531 0 0.125 RAD 0.0078125 + txt924 +TEXDEF txt925 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0.125 APEX 0.375 0.109531 0.125 RAD 0.0078125 + txt925 +TEXDEF txt926 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.140469 APEX 0.375 0 0.234531 RAD 0.0078125 + txt926 +TEXDEF txt927 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0.25 RAD 0.03125 + txt927 +TEXDEF txt928 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0.25 APEX 0.484531 0 0.25 RAD 0.0078125 + txt928 +TEXDEF txt929 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0.25 APEX 0.375 0.109531 0.25 RAD 0.0078125 + txt929 +TEXDEF txt930 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.265469 APEX 0.375 0 0.359531 RAD 0.0078125 + txt930 +TEXDEF txt931 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0.375 RAD 0.03125 + txt931 +TEXDEF txt932 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0.375 APEX 0.484531 0 0.375 RAD 0.0078125 + txt932 +TEXDEF txt933 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0.375 APEX 0.375 0.109531 0.375 RAD 0.0078125 + txt933 +TEXDEF txt934 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.390469 APEX 0.375 0 0.484531 RAD 0.0078125 + txt934 +TEXDEF txt935 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0.5 RAD 0.03125 + txt935 +TEXDEF txt936 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0.5 APEX 0.484531 0 0.5 RAD 0.0078125 + txt936 +TEXDEF txt937 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0.5 APEX 0.375 0.109531 0.5 RAD 0.0078125 + txt937 +TEXDEF txt938 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.515469 APEX 0.375 0 0.609531 RAD 0.0078125 + txt938 +TEXDEF txt939 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0.625 RAD 0.03125 + txt939 +TEXDEF txt940 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0.625 APEX 0.484531 0 0.625 RAD 0.0078125 + txt940 +TEXDEF txt941 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0.625 APEX 0.375 0.109531 0.625 RAD 0.0078125 + txt941 +TEXDEF txt942 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.640469 APEX 0.375 0 0.734531 RAD 0.0078125 + txt942 +TEXDEF txt943 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0.75 RAD 0.03125 + txt943 +TEXDEF txt944 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0.75 APEX 0.484531 0 0.75 RAD 0.0078125 + txt944 +TEXDEF txt945 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0.75 APEX 0.375 0.109531 0.75 RAD 0.0078125 + txt945 +TEXDEF txt946 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.765469 APEX 0.375 0 0.859531 RAD 0.0078125 + txt946 +TEXDEF txt947 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 0.875 RAD 0.03125 + txt947 +TEXDEF txt948 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 0.875 APEX 0.484531 0 0.875 RAD 0.0078125 + txt948 +TEXDEF txt949 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 0.875 APEX 0.375 0.109531 0.875 RAD 0.0078125 + txt949 +TEXDEF txt950 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0 0.890469 APEX 0.375 0 0.984531 RAD 0.0078125 + txt950 +TEXDEF txt951 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0 1 RAD 0.03125 + txt951 +TEXDEF txt952 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0 1 APEX 0.484531 0 1 RAD 0.0078125 + txt952 +TEXDEF txt953 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.0154687 1 APEX 0.375 0.109531 1 RAD 0.0078125 + txt953 +TEXDEF txt954 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0 RAD 0.03125 + txt954 +TEXDEF txt955 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0 APEX 0.484531 0.125 0 RAD 0.0078125 + txt955 +TEXDEF txt956 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0 APEX 0.375 0.234531 0 RAD 0.0078125 + txt956 +TEXDEF txt957 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.0154687 APEX 0.375 0.125 0.109531 RAD 0.0078125 + txt957 +TEXDEF txt958 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0.125 RAD 0.03125 + txt958 +TEXDEF txt959 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0.125 APEX 0.484531 0.125 0.125 RAD 0.0078125 + txt959 +TEXDEF txt960 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0.125 APEX 0.375 0.234531 0.125 RAD 0.0078125 + txt960 +TEXDEF txt961 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.140469 APEX 0.375 0.125 0.234531 RAD 0.0078125 + txt961 +TEXDEF txt962 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0.25 RAD 0.03125 + txt962 +TEXDEF txt963 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0.25 APEX 0.484531 0.125 0.25 RAD 0.0078125 + txt963 +TEXDEF txt964 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0.25 APEX 0.375 0.234531 0.25 RAD 0.0078125 + txt964 +TEXDEF txt965 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.265469 APEX 0.375 0.125 0.359531 RAD 0.0078125 + txt965 +TEXDEF txt966 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0.375 RAD 0.03125 + txt966 +TEXDEF txt967 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0.375 APEX 0.484531 0.125 0.375 RAD 0.0078125 + txt967 +TEXDEF txt968 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0.375 APEX 0.375 0.234531 0.375 RAD 0.0078125 + txt968 +TEXDEF txt969 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.390469 APEX 0.375 0.125 0.484531 RAD 0.0078125 + txt969 +TEXDEF txt970 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0.5 RAD 0.03125 + txt970 +TEXDEF txt971 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0.5 APEX 0.484531 0.125 0.5 RAD 0.0078125 + txt971 +TEXDEF txt972 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0.5 APEX 0.375 0.234531 0.5 RAD 0.0078125 + txt972 +TEXDEF txt973 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.515469 APEX 0.375 0.125 0.609531 RAD 0.0078125 + txt973 +TEXDEF txt974 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0.625 RAD 0.03125 + txt974 +TEXDEF txt975 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0.625 APEX 0.484531 0.125 0.625 RAD 0.0078125 + txt975 +TEXDEF txt976 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0.625 APEX 0.375 0.234531 0.625 RAD 0.0078125 + txt976 +TEXDEF txt977 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.640469 APEX 0.375 0.125 0.734531 RAD 0.0078125 + txt977 +TEXDEF txt978 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0.75 RAD 0.03125 + txt978 +TEXDEF txt979 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0.75 APEX 0.484531 0.125 0.75 RAD 0.0078125 + txt979 +TEXDEF txt980 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0.75 APEX 0.375 0.234531 0.75 RAD 0.0078125 + txt980 +TEXDEF txt981 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.765469 APEX 0.375 0.125 0.859531 RAD 0.0078125 + txt981 +TEXDEF txt982 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 0.875 RAD 0.03125 + txt982 +TEXDEF txt983 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 0.875 APEX 0.484531 0.125 0.875 RAD 0.0078125 + txt983 +TEXDEF txt984 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 0.875 APEX 0.375 0.234531 0.875 RAD 0.0078125 + txt984 +TEXDEF txt985 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.125 0.890469 APEX 0.375 0.125 0.984531 RAD 0.0078125 + txt985 +TEXDEF txt986 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.125 1 RAD 0.03125 + txt986 +TEXDEF txt987 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.125 1 APEX 0.484531 0.125 1 RAD 0.0078125 + txt987 +TEXDEF txt988 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.140469 1 APEX 0.375 0.234531 1 RAD 0.0078125 + txt988 +TEXDEF txt989 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0 RAD 0.03125 + txt989 +TEXDEF txt990 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0 APEX 0.484531 0.25 0 RAD 0.0078125 + txt990 +TEXDEF txt991 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0 APEX 0.375 0.359531 0 RAD 0.0078125 + txt991 +TEXDEF txt992 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.0154687 APEX 0.375 0.25 0.109531 RAD 0.0078125 + txt992 +TEXDEF txt993 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0.125 RAD 0.03125 + txt993 +TEXDEF txt994 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0.125 APEX 0.484531 0.25 0.125 RAD 0.0078125 + txt994 +TEXDEF txt995 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0.125 APEX 0.375 0.359531 0.125 RAD 0.0078125 + txt995 +TEXDEF txt996 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.140469 APEX 0.375 0.25 0.234531 RAD 0.0078125 + txt996 +TEXDEF txt997 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0.25 RAD 0.03125 + txt997 +TEXDEF txt998 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0.25 APEX 0.484531 0.25 0.25 RAD 0.0078125 + txt998 +TEXDEF txt999 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0.25 APEX 0.375 0.359531 0.25 RAD 0.0078125 + txt999 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.265469 APEX 0.375 0.25 0.359531 RAD 0.0078125 + txt100 +TEXDEF txt100 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0.375 RAD 0.03125 + txt100 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0.375 APEX 0.484531 0.25 0.375 RAD 0.0078125 + txt100 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0.375 APEX 0.375 0.359531 0.375 RAD 0.0078125 + txt100 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.390469 APEX 0.375 0.25 0.484531 RAD 0.0078125 + txt100 +TEXDEF txt100 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0.5 RAD 0.03125 + txt100 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0.5 APEX 0.484531 0.25 0.5 RAD 0.0078125 + txt100 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0.5 APEX 0.375 0.359531 0.5 RAD 0.0078125 + txt100 +TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.515469 APEX 0.375 0.25 0.609531 RAD 0.0078125 + txt100 +TEXDEF txt100 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0.625 RAD 0.03125 + txt100 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0.625 APEX 0.484531 0.25 0.625 RAD 0.0078125 + txt101 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0.625 APEX 0.375 0.359531 0.625 RAD 0.0078125 + txt101 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.640469 APEX 0.375 0.25 0.734531 RAD 0.0078125 + txt101 +TEXDEF txt101 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0.75 RAD 0.03125 + txt101 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0.75 APEX 0.484531 0.25 0.75 RAD 0.0078125 + txt101 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0.75 APEX 0.375 0.359531 0.75 RAD 0.0078125 + txt101 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.765469 APEX 0.375 0.25 0.859531 RAD 0.0078125 + txt101 +TEXDEF txt101 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 0.875 RAD 0.03125 + txt101 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 0.875 APEX 0.484531 0.25 0.875 RAD 0.0078125 + txt101 +TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 0.875 APEX 0.375 0.359531 0.875 RAD 0.0078125 + txt101 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.25 0.890469 APEX 0.375 0.25 0.984531 RAD 0.0078125 + txt102 +TEXDEF txt102 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.25 1 RAD 0.03125 + txt102 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.25 1 APEX 0.484531 0.25 1 RAD 0.0078125 + txt102 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.265469 1 APEX 0.375 0.359531 1 RAD 0.0078125 + txt102 +TEXDEF txt102 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0 RAD 0.03125 + txt102 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0 APEX 0.484531 0.375 0 RAD 0.0078125 + txt102 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0 APEX 0.375 0.484531 0 RAD 0.0078125 + txt102 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.0154687 APEX 0.375 0.375 0.109531 RAD 0.0078125 + txt102 +TEXDEF txt102 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0.125 RAD 0.03125 + txt102 +TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0.125 APEX 0.484531 0.375 0.125 RAD 0.0078125 + txt102 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0.125 APEX 0.375 0.484531 0.125 RAD 0.0078125 + txt103 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.140469 APEX 0.375 0.375 0.234531 RAD 0.0078125 + txt103 +TEXDEF txt103 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0.25 RAD 0.03125 + txt103 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0.25 APEX 0.484531 0.375 0.25 RAD 0.0078125 + txt103 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0.25 APEX 0.375 0.484531 0.25 RAD 0.0078125 + txt103 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.265469 APEX 0.375 0.375 0.359531 RAD 0.0078125 + txt103 +TEXDEF txt103 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0.375 RAD 0.03125 + txt103 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0.375 APEX 0.484531 0.375 0.375 RAD 0.0078125 + txt103 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0.375 APEX 0.375 0.484531 0.375 RAD 0.0078125 + txt103 +TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.390469 APEX 0.375 0.375 0.484531 RAD 0.0078125 + txt103 +TEXDEF txt104 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0.5 RAD 0.03125 + txt104 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0.5 APEX 0.484531 0.375 0.5 RAD 0.0078125 + txt104 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0.5 APEX 0.375 0.484531 0.5 RAD 0.0078125 + txt104 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.515469 APEX 0.375 0.375 0.609531 RAD 0.0078125 + txt104 +TEXDEF txt104 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0.625 RAD 0.03125 + txt104 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0.625 APEX 0.484531 0.375 0.625 RAD 0.0078125 + txt104 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0.625 APEX 0.375 0.484531 0.625 RAD 0.0078125 + txt104 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.640469 APEX 0.375 0.375 0.734531 RAD 0.0078125 + txt104 +TEXDEF txt104 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0.75 RAD 0.03125 + txt104 +TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0.75 APEX 0.484531 0.375 0.75 RAD 0.0078125 + txt104 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0.75 APEX 0.375 0.484531 0.75 RAD 0.0078125 + txt105 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.765469 APEX 0.375 0.375 0.859531 RAD 0.0078125 + txt105 +TEXDEF txt105 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 0.875 RAD 0.03125 + txt105 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 0.875 APEX 0.484531 0.375 0.875 RAD 0.0078125 + txt105 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 0.875 APEX 0.375 0.484531 0.875 RAD 0.0078125 + txt105 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.375 0.890469 APEX 0.375 0.375 0.984531 RAD 0.0078125 + txt105 +TEXDEF txt105 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.375 1 RAD 0.03125 + txt105 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.375 1 APEX 0.484531 0.375 1 RAD 0.0078125 + txt105 +TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.390469 1 APEX 0.375 0.484531 1 RAD 0.0078125 + txt105 +TEXDEF txt105 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0 RAD 0.03125 + txt105 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0 APEX 0.484531 0.5 0 RAD 0.0078125 + txt106 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0 APEX 0.375 0.609531 0 RAD 0.0078125 + txt106 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.0154687 APEX 0.375 0.5 0.109531 RAD 0.0078125 + txt106 +TEXDEF txt106 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0.125 RAD 0.03125 + txt106 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0.125 APEX 0.484531 0.5 0.125 RAD 0.0078125 + txt106 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0.125 APEX 0.375 0.609531 0.125 RAD 0.0078125 + txt106 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.140469 APEX 0.375 0.5 0.234531 RAD 0.0078125 + txt106 +TEXDEF txt106 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0.25 RAD 0.03125 + txt106 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0.25 APEX 0.484531 0.5 0.25 RAD 0.0078125 + txt106 +TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0.25 APEX 0.375 0.609531 0.25 RAD 0.0078125 + txt106 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.265469 APEX 0.375 0.5 0.359531 RAD 0.0078125 + txt107 +TEXDEF txt107 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0.375 RAD 0.03125 + txt107 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0.375 APEX 0.484531 0.5 0.375 RAD 0.0078125 + txt107 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0.375 APEX 0.375 0.609531 0.375 RAD 0.0078125 + txt107 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.390469 APEX 0.375 0.5 0.484531 RAD 0.0078125 + txt107 +TEXDEF txt107 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0.5 RAD 0.03125 + txt107 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0.5 APEX 0.484531 0.5 0.5 RAD 0.0078125 + txt107 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0.5 APEX 0.375 0.609531 0.5 RAD 0.0078125 + txt107 +TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.515469 APEX 0.375 0.5 0.609531 RAD 0.0078125 + txt107 +TEXDEF txt107 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0.625 RAD 0.03125 + txt107 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0.625 APEX 0.484531 0.5 0.625 RAD 0.0078125 + txt108 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0.625 APEX 0.375 0.609531 0.625 RAD 0.0078125 + txt108 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.640469 APEX 0.375 0.5 0.734531 RAD 0.0078125 + txt108 +TEXDEF txt108 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0.75 RAD 0.03125 + txt108 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0.75 APEX 0.484531 0.5 0.75 RAD 0.0078125 + txt108 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0.75 APEX 0.375 0.609531 0.75 RAD 0.0078125 + txt108 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.765469 APEX 0.375 0.5 0.859531 RAD 0.0078125 + txt108 +TEXDEF txt108 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 0.875 RAD 0.03125 + txt108 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 0.875 APEX 0.484531 0.5 0.875 RAD 0.0078125 + txt108 +TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 0.875 APEX 0.375 0.609531 0.875 RAD 0.0078125 + txt108 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.5 0.890469 APEX 0.375 0.5 0.984531 RAD 0.0078125 + txt109 +TEXDEF txt109 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.5 1 RAD 0.03125 + txt109 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.5 1 APEX 0.484531 0.5 1 RAD 0.0078125 + txt109 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.515469 1 APEX 0.375 0.609531 1 RAD 0.0078125 + txt109 +TEXDEF txt109 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0 RAD 0.03125 + txt109 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0 APEX 0.484531 0.625 0 RAD 0.0078125 + txt109 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0 APEX 0.375 0.734531 0 RAD 0.0078125 + txt109 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.0154687 APEX 0.375 0.625 0.109531 RAD 0.0078125 + txt109 +TEXDEF txt109 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0.125 RAD 0.03125 + txt109 +TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0.125 APEX 0.484531 0.625 0.125 RAD 0.0078125 + txt109 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0.125 APEX 0.375 0.734531 0.125 RAD 0.0078125 + txt110 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.140469 APEX 0.375 0.625 0.234531 RAD 0.0078125 + txt110 +TEXDEF txt110 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0.25 RAD 0.03125 + txt110 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0.25 APEX 0.484531 0.625 0.25 RAD 0.0078125 + txt110 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0.25 APEX 0.375 0.734531 0.25 RAD 0.0078125 + txt110 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.265469 APEX 0.375 0.625 0.359531 RAD 0.0078125 + txt110 +TEXDEF txt110 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0.375 RAD 0.03125 + txt110 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0.375 APEX 0.484531 0.625 0.375 RAD 0.0078125 + txt110 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0.375 APEX 0.375 0.734531 0.375 RAD 0.0078125 + txt110 +TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.390469 APEX 0.375 0.625 0.484531 RAD 0.0078125 + txt110 +TEXDEF txt111 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0.5 RAD 0.03125 + txt111 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0.5 APEX 0.484531 0.625 0.5 RAD 0.0078125 + txt111 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0.5 APEX 0.375 0.734531 0.5 RAD 0.0078125 + txt111 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.515469 APEX 0.375 0.625 0.609531 RAD 0.0078125 + txt111 +TEXDEF txt111 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0.625 RAD 0.03125 + txt111 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0.625 APEX 0.484531 0.625 0.625 RAD 0.0078125 + txt111 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0.625 APEX 0.375 0.734531 0.625 RAD 0.0078125 + txt111 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.640469 APEX 0.375 0.625 0.734531 RAD 0.0078125 + txt111 +TEXDEF txt111 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0.75 RAD 0.03125 + txt111 +TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0.75 APEX 0.484531 0.625 0.75 RAD 0.0078125 + txt111 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0.75 APEX 0.375 0.734531 0.75 RAD 0.0078125 + txt112 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.765469 APEX 0.375 0.625 0.859531 RAD 0.0078125 + txt112 +TEXDEF txt112 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 0.875 RAD 0.03125 + txt112 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 0.875 APEX 0.484531 0.625 0.875 RAD 0.0078125 + txt112 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 0.875 APEX 0.375 0.734531 0.875 RAD 0.0078125 + txt112 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.625 0.890469 APEX 0.375 0.625 0.984531 RAD 0.0078125 + txt112 +TEXDEF txt112 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.625 1 RAD 0.03125 + txt112 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.625 1 APEX 0.484531 0.625 1 RAD 0.0078125 + txt112 +TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.640469 1 APEX 0.375 0.734531 1 RAD 0.0078125 + txt112 +TEXDEF txt112 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0 RAD 0.03125 + txt112 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0 APEX 0.484531 0.75 0 RAD 0.0078125 + txt113 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0 APEX 0.375 0.859531 0 RAD 0.0078125 + txt113 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.0154687 APEX 0.375 0.75 0.109531 RAD 0.0078125 + txt113 +TEXDEF txt113 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0.125 RAD 0.03125 + txt113 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0.125 APEX 0.484531 0.75 0.125 RAD 0.0078125 + txt113 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0.125 APEX 0.375 0.859531 0.125 RAD 0.0078125 + txt113 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.140469 APEX 0.375 0.75 0.234531 RAD 0.0078125 + txt113 +TEXDEF txt113 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0.25 RAD 0.03125 + txt113 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0.25 APEX 0.484531 0.75 0.25 RAD 0.0078125 + txt113 +TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0.25 APEX 0.375 0.859531 0.25 RAD 0.0078125 + txt113 +TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.265469 APEX 0.375 0.75 0.359531 RAD 0.0078125 + txt114 +TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0.375 RAD 0.03125 + txt114 +TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0.375 APEX 0.484531 0.75 0.375 RAD 0.0078125 + txt114 +TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0.375 APEX 0.375 0.859531 0.375 RAD 0.0078125 + txt114 +TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.390469 APEX 0.375 0.75 0.484531 RAD 0.0078125 + txt114 +TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0.5 RAD 0.03125 + txt114 +TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0.5 APEX 0.484531 0.75 0.5 RAD 0.0078125 + txt114 +TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0.5 APEX 0.375 0.859531 0.5 RAD 0.0078125 + txt114 +TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.515469 APEX 0.375 0.75 0.609531 RAD 0.0078125 + txt114 +TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0.625 RAD 0.03125 + txt114 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0.625 APEX 0.484531 0.75 0.625 RAD 0.0078125 + txt115 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0.625 APEX 0.375 0.859531 0.625 RAD 0.0078125 + txt115 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.640469 APEX 0.375 0.75 0.734531 RAD 0.0078125 + txt115 +TEXDEF txt115 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0.75 RAD 0.03125 + txt115 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0.75 APEX 0.484531 0.75 0.75 RAD 0.0078125 + txt115 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0.75 APEX 0.375 0.859531 0.75 RAD 0.0078125 + txt115 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.765469 APEX 0.375 0.75 0.859531 RAD 0.0078125 + txt115 +TEXDEF txt115 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 0.875 RAD 0.03125 + txt115 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 0.875 APEX 0.484531 0.75 0.875 RAD 0.0078125 + txt115 +TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 0.875 APEX 0.375 0.859531 0.875 RAD 0.0078125 + txt115 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.75 0.890469 APEX 0.375 0.75 0.984531 RAD 0.0078125 + txt116 +TEXDEF txt116 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.75 1 RAD 0.03125 + txt116 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.75 1 APEX 0.484531 0.75 1 RAD 0.0078125 + txt116 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.765469 1 APEX 0.375 0.859531 1 RAD 0.0078125 + txt116 +TEXDEF txt116 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0 RAD 0.03125 + txt116 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0 APEX 0.484531 0.875 0 RAD 0.0078125 + txt116 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0 APEX 0.375 0.984531 0 RAD 0.0078125 + txt116 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.0154687 APEX 0.375 0.875 0.109531 RAD 0.0078125 + txt116 +TEXDEF txt116 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0.125 RAD 0.03125 + txt116 +TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0.125 APEX 0.484531 0.875 0.125 RAD 0.0078125 + txt116 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0.125 APEX 0.375 0.984531 0.125 RAD 0.0078125 + txt117 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.140469 APEX 0.375 0.875 0.234531 RAD 0.0078125 + txt117 +TEXDEF txt117 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0.25 RAD 0.03125 + txt117 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0.25 APEX 0.484531 0.875 0.25 RAD 0.0078125 + txt117 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0.25 APEX 0.375 0.984531 0.25 RAD 0.0078125 + txt117 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.265469 APEX 0.375 0.875 0.359531 RAD 0.0078125 + txt117 +TEXDEF txt117 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0.375 RAD 0.03125 + txt117 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0.375 APEX 0.484531 0.875 0.375 RAD 0.0078125 + txt117 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0.375 APEX 0.375 0.984531 0.375 RAD 0.0078125 + txt117 +TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.390469 APEX 0.375 0.875 0.484531 RAD 0.0078125 + txt117 +TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0.5 RAD 0.03125 + txt118 +TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0.5 APEX 0.484531 0.875 0.5 RAD 0.0078125 + txt118 +TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0.5 APEX 0.375 0.984531 0.5 RAD 0.0078125 + txt118 +TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.515469 APEX 0.375 0.875 0.609531 RAD 0.0078125 + txt118 +TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0.625 RAD 0.03125 + txt118 +TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0.625 APEX 0.484531 0.875 0.625 RAD 0.0078125 + txt118 +TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0.625 APEX 0.375 0.984531 0.625 RAD 0.0078125 + txt118 +TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.640469 APEX 0.375 0.875 0.734531 RAD 0.0078125 + txt118 +TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0.75 RAD 0.03125 + txt118 +TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0.75 APEX 0.484531 0.875 0.75 RAD 0.0078125 + txt118 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0.75 APEX 0.375 0.984531 0.75 RAD 0.0078125 + txt119 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.765469 APEX 0.375 0.875 0.859531 RAD 0.0078125 + txt119 +TEXDEF txt119 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 0.875 RAD 0.03125 + txt119 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 0.875 APEX 0.484531 0.875 0.875 RAD 0.0078125 + txt119 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 0.875 APEX 0.375 0.984531 0.875 RAD 0.0078125 + txt119 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.875 0.890469 APEX 0.375 0.875 0.984531 RAD 0.0078125 + txt119 +TEXDEF txt119 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 0.875 1 RAD 0.03125 + txt119 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 0.875 1 APEX 0.484531 0.875 1 RAD 0.0078125 + txt119 +TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 0.890469 1 APEX 0.375 0.984531 1 RAD 0.0078125 + txt119 +TEXDEF txt119 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0 RAD 0.03125 + txt119 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0 APEX 0.484531 1 0 RAD 0.0078125 + txt120 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.0154687 APEX 0.375 1 0.109531 RAD 0.0078125 + txt120 +TEXDEF txt120 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0.125 RAD 0.03125 + txt120 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0.125 APEX 0.484531 1 0.125 RAD 0.0078125 + txt120 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.140469 APEX 0.375 1 0.234531 RAD 0.0078125 + txt120 +TEXDEF txt120 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0.25 RAD 0.03125 + txt120 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0.25 APEX 0.484531 1 0.25 RAD 0.0078125 + txt120 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.265469 APEX 0.375 1 0.359531 RAD 0.0078125 + txt120 +TEXDEF txt120 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0.375 RAD 0.03125 + txt120 +TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0.375 APEX 0.484531 1 0.375 RAD 0.0078125 + txt120 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.390469 APEX 0.375 1 0.484531 RAD 0.0078125 + txt121 +TEXDEF txt121 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0.5 RAD 0.03125 + txt121 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0.5 APEX 0.484531 1 0.5 RAD 0.0078125 + txt121 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.515469 APEX 0.375 1 0.609531 RAD 0.0078125 + txt121 +TEXDEF txt121 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0.625 RAD 0.03125 + txt121 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0.625 APEX 0.484531 1 0.625 RAD 0.0078125 + txt121 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.640469 APEX 0.375 1 0.734531 RAD 0.0078125 + txt121 +TEXDEF txt121 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0.75 RAD 0.03125 + txt121 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0.75 APEX 0.484531 1 0.75 RAD 0.0078125 + txt121 +TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.765469 APEX 0.375 1 0.859531 RAD 0.0078125 + txt121 +TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 0.875 RAD 0.03125 + txt122 +TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 0.875 APEX 0.484531 1 0.875 RAD 0.0078125 + txt122 +TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.375 1 0.890469 APEX 0.375 1 0.984531 RAD 0.0078125 + txt122 +TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.375 1 1 RAD 0.03125 + txt122 +TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.390469 1 1 APEX 0.484531 1 1 RAD 0.0078125 + txt122 +TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0 RAD 0.03125 + txt122 +TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0 APEX 0.609531 0 0 RAD 0.0078125 + txt122 +TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0 APEX 0.5 0.109531 0 RAD 0.0078125 + txt122 +TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.0154687 APEX 0.5 0 0.109531 RAD 0.0078125 + txt122 +TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0.125 RAD 0.03125 + txt122 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0.125 APEX 0.609531 0 0.125 RAD 0.0078125 + txt123 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0.125 APEX 0.5 0.109531 0.125 RAD 0.0078125 + txt123 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.140469 APEX 0.5 0 0.234531 RAD 0.0078125 + txt123 +TEXDEF txt123 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0.25 RAD 0.03125 + txt123 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0.25 APEX 0.609531 0 0.25 RAD 0.0078125 + txt123 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0.25 APEX 0.5 0.109531 0.25 RAD 0.0078125 + txt123 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.265469 APEX 0.5 0 0.359531 RAD 0.0078125 + txt123 +TEXDEF txt123 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0.375 RAD 0.03125 + txt123 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0.375 APEX 0.609531 0 0.375 RAD 0.0078125 + txt123 +TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0.375 APEX 0.5 0.109531 0.375 RAD 0.0078125 + txt123 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.390469 APEX 0.5 0 0.484531 RAD 0.0078125 + txt124 +TEXDEF txt124 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0.5 RAD 0.03125 + txt124 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0.5 APEX 0.609531 0 0.5 RAD 0.0078125 + txt124 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0.5 APEX 0.5 0.109531 0.5 RAD 0.0078125 + txt124 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.515469 APEX 0.5 0 0.609531 RAD 0.0078125 + txt124 +TEXDEF txt124 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0.625 RAD 0.03125 + txt124 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0.625 APEX 0.609531 0 0.625 RAD 0.0078125 + txt124 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0.625 APEX 0.5 0.109531 0.625 RAD 0.0078125 + txt124 +TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.640469 APEX 0.5 0 0.734531 RAD 0.0078125 + txt124 +TEXDEF txt124 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0.75 RAD 0.03125 + txt124 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0.75 APEX 0.609531 0 0.75 RAD 0.0078125 + txt125 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0.75 APEX 0.5 0.109531 0.75 RAD 0.0078125 + txt125 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.765469 APEX 0.5 0 0.859531 RAD 0.0078125 + txt125 +TEXDEF txt125 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 0.875 RAD 0.03125 + txt125 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 0.875 APEX 0.609531 0 0.875 RAD 0.0078125 + txt125 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 0.875 APEX 0.5 0.109531 0.875 RAD 0.0078125 + txt125 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0 0.890469 APEX 0.5 0 0.984531 RAD 0.0078125 + txt125 +TEXDEF txt125 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0 1 RAD 0.03125 + txt125 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0 1 APEX 0.609531 0 1 RAD 0.0078125 + txt125 +TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.0154687 1 APEX 0.5 0.109531 1 RAD 0.0078125 + txt125 +TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0 RAD 0.03125 + txt126 +TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0 APEX 0.609531 0.125 0 RAD 0.0078125 + txt126 +TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0 APEX 0.5 0.234531 0 RAD 0.0078125 + txt126 +TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.0154687 APEX 0.5 0.125 0.109531 RAD 0.0078125 + txt126 +TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0.125 RAD 0.03125 + txt126 +TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0.125 APEX 0.609531 0.125 0.125 RAD 0.0078125 + txt126 +TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0.125 APEX 0.5 0.234531 0.125 RAD 0.0078125 + txt126 +TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.140469 APEX 0.5 0.125 0.234531 RAD 0.0078125 + txt126 +TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0.25 RAD 0.03125 + txt126 +TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0.25 APEX 0.609531 0.125 0.25 RAD 0.0078125 + txt126 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0.25 APEX 0.5 0.234531 0.25 RAD 0.0078125 + txt127 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.265469 APEX 0.5 0.125 0.359531 RAD 0.0078125 + txt127 +TEXDEF txt127 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0.375 RAD 0.03125 + txt127 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0.375 APEX 0.609531 0.125 0.375 RAD 0.0078125 + txt127 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0.375 APEX 0.5 0.234531 0.375 RAD 0.0078125 + txt127 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.390469 APEX 0.5 0.125 0.484531 RAD 0.0078125 + txt127 +TEXDEF txt127 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0.5 RAD 0.03125 + txt127 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0.5 APEX 0.609531 0.125 0.5 RAD 0.0078125 + txt127 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0.5 APEX 0.5 0.234531 0.5 RAD 0.0078125 + txt127 +TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.515469 APEX 0.5 0.125 0.609531 RAD 0.0078125 + txt127 +TEXDEF txt128 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0.625 RAD 0.03125 + txt128 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0.625 APEX 0.609531 0.125 0.625 RAD 0.0078125 + txt128 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0.625 APEX 0.5 0.234531 0.625 RAD 0.0078125 + txt128 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.640469 APEX 0.5 0.125 0.734531 RAD 0.0078125 + txt128 +TEXDEF txt128 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0.75 RAD 0.03125 + txt128 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0.75 APEX 0.609531 0.125 0.75 RAD 0.0078125 + txt128 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0.75 APEX 0.5 0.234531 0.75 RAD 0.0078125 + txt128 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.765469 APEX 0.5 0.125 0.859531 RAD 0.0078125 + txt128 +TEXDEF txt128 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 0.875 RAD 0.03125 + txt128 +TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 0.875 APEX 0.609531 0.125 0.875 RAD 0.0078125 + txt128 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 0.875 APEX 0.5 0.234531 0.875 RAD 0.0078125 + txt129 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.125 0.890469 APEX 0.5 0.125 0.984531 RAD 0.0078125 + txt129 +TEXDEF txt129 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.125 1 RAD 0.03125 + txt129 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.125 1 APEX 0.609531 0.125 1 RAD 0.0078125 + txt129 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.140469 1 APEX 0.5 0.234531 1 RAD 0.0078125 + txt129 +TEXDEF txt129 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0 RAD 0.03125 + txt129 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0 APEX 0.609531 0.25 0 RAD 0.0078125 + txt129 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0 APEX 0.5 0.359531 0 RAD 0.0078125 + txt129 +TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.0154687 APEX 0.5 0.25 0.109531 RAD 0.0078125 + txt129 +TEXDEF txt129 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0.125 RAD 0.03125 + txt129 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0.125 APEX 0.609531 0.25 0.125 RAD 0.0078125 + txt130 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0.125 APEX 0.5 0.359531 0.125 RAD 0.0078125 + txt130 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.140469 APEX 0.5 0.25 0.234531 RAD 0.0078125 + txt130 +TEXDEF txt130 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0.25 RAD 0.03125 + txt130 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0.25 APEX 0.609531 0.25 0.25 RAD 0.0078125 + txt130 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0.25 APEX 0.5 0.359531 0.25 RAD 0.0078125 + txt130 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.265469 APEX 0.5 0.25 0.359531 RAD 0.0078125 + txt130 +TEXDEF txt130 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0.375 RAD 0.03125 + txt130 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0.375 APEX 0.609531 0.25 0.375 RAD 0.0078125 + txt130 +TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0.375 APEX 0.5 0.359531 0.375 RAD 0.0078125 + txt130 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.390469 APEX 0.5 0.25 0.484531 RAD 0.0078125 + txt131 +TEXDEF txt131 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0.5 RAD 0.03125 + txt131 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0.5 APEX 0.609531 0.25 0.5 RAD 0.0078125 + txt131 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0.5 APEX 0.5 0.359531 0.5 RAD 0.0078125 + txt131 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.515469 APEX 0.5 0.25 0.609531 RAD 0.0078125 + txt131 +TEXDEF txt131 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0.625 RAD 0.03125 + txt131 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0.625 APEX 0.609531 0.25 0.625 RAD 0.0078125 + txt131 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0.625 APEX 0.5 0.359531 0.625 RAD 0.0078125 + txt131 +TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.640469 APEX 0.5 0.25 0.734531 RAD 0.0078125 + txt131 +TEXDEF txt131 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0.75 RAD 0.03125 + txt131 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0.75 APEX 0.609531 0.25 0.75 RAD 0.0078125 + txt132 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0.75 APEX 0.5 0.359531 0.75 RAD 0.0078125 + txt132 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.765469 APEX 0.5 0.25 0.859531 RAD 0.0078125 + txt132 +TEXDEF txt132 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 0.875 RAD 0.03125 + txt132 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 0.875 APEX 0.609531 0.25 0.875 RAD 0.0078125 + txt132 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 0.875 APEX 0.5 0.359531 0.875 RAD 0.0078125 + txt132 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.25 0.890469 APEX 0.5 0.25 0.984531 RAD 0.0078125 + txt132 +TEXDEF txt132 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.25 1 RAD 0.03125 + txt132 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.25 1 APEX 0.609531 0.25 1 RAD 0.0078125 + txt132 +TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.265469 1 APEX 0.5 0.359531 1 RAD 0.0078125 + txt132 +TEXDEF txt133 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0 RAD 0.03125 + txt133 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0 APEX 0.609531 0.375 0 RAD 0.0078125 + txt133 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0 APEX 0.5 0.484531 0 RAD 0.0078125 + txt133 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.0154687 APEX 0.5 0.375 0.109531 RAD 0.0078125 + txt133 +TEXDEF txt133 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0.125 RAD 0.03125 + txt133 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0.125 APEX 0.609531 0.375 0.125 RAD 0.0078125 + txt133 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0.125 APEX 0.5 0.484531 0.125 RAD 0.0078125 + txt133 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.140469 APEX 0.5 0.375 0.234531 RAD 0.0078125 + txt133 +TEXDEF txt133 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0.25 RAD 0.03125 + txt133 +TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0.25 APEX 0.609531 0.375 0.25 RAD 0.0078125 + txt133 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0.25 APEX 0.5 0.484531 0.25 RAD 0.0078125 + txt134 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.265469 APEX 0.5 0.375 0.359531 RAD 0.0078125 + txt134 +TEXDEF txt134 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0.375 RAD 0.03125 + txt134 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0.375 APEX 0.609531 0.375 0.375 RAD 0.0078125 + txt134 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0.375 APEX 0.5 0.484531 0.375 RAD 0.0078125 + txt134 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.390469 APEX 0.5 0.375 0.484531 RAD 0.0078125 + txt134 +TEXDEF txt134 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0.5 RAD 0.03125 + txt134 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0.5 APEX 0.609531 0.375 0.5 RAD 0.0078125 + txt134 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0.5 APEX 0.5 0.484531 0.5 RAD 0.0078125 + txt134 +TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.515469 APEX 0.5 0.375 0.609531 RAD 0.0078125 + txt134 +TEXDEF txt135 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0.625 RAD 0.03125 + txt135 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0.625 APEX 0.609531 0.375 0.625 RAD 0.0078125 + txt135 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0.625 APEX 0.5 0.484531 0.625 RAD 0.0078125 + txt135 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.640469 APEX 0.5 0.375 0.734531 RAD 0.0078125 + txt135 +TEXDEF txt135 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0.75 RAD 0.03125 + txt135 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0.75 APEX 0.609531 0.375 0.75 RAD 0.0078125 + txt135 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0.75 APEX 0.5 0.484531 0.75 RAD 0.0078125 + txt135 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.765469 APEX 0.5 0.375 0.859531 RAD 0.0078125 + txt135 +TEXDEF txt135 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 0.875 RAD 0.03125 + txt135 +TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 0.875 APEX 0.609531 0.375 0.875 RAD 0.0078125 + txt135 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 0.875 APEX 0.5 0.484531 0.875 RAD 0.0078125 + txt136 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.375 0.890469 APEX 0.5 0.375 0.984531 RAD 0.0078125 + txt136 +TEXDEF txt136 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.375 1 RAD 0.03125 + txt136 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.375 1 APEX 0.609531 0.375 1 RAD 0.0078125 + txt136 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.390469 1 APEX 0.5 0.484531 1 RAD 0.0078125 + txt136 +TEXDEF txt136 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0 RAD 0.03125 + txt136 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0 APEX 0.609531 0.5 0 RAD 0.0078125 + txt136 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0 APEX 0.5 0.609531 0 RAD 0.0078125 + txt136 +TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.0154687 APEX 0.5 0.5 0.109531 RAD 0.0078125 + txt136 +TEXDEF txt136 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0.125 RAD 0.03125 + txt136 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0.125 APEX 0.609531 0.5 0.125 RAD 0.0078125 + txt137 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0.125 APEX 0.5 0.609531 0.125 RAD 0.0078125 + txt137 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.140469 APEX 0.5 0.5 0.234531 RAD 0.0078125 + txt137 +TEXDEF txt137 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0.25 RAD 0.03125 + txt137 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0.25 APEX 0.609531 0.5 0.25 RAD 0.0078125 + txt137 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0.25 APEX 0.5 0.609531 0.25 RAD 0.0078125 + txt137 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.265469 APEX 0.5 0.5 0.359531 RAD 0.0078125 + txt137 +TEXDEF txt137 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0.375 RAD 0.03125 + txt137 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0.375 APEX 0.609531 0.5 0.375 RAD 0.0078125 + txt137 +TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0.375 APEX 0.5 0.609531 0.375 RAD 0.0078125 + txt137 +TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.390469 APEX 0.5 0.5 0.484531 RAD 0.0078125 + txt138 +TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0.5 RAD 0.03125 + txt138 +TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0.5 APEX 0.609531 0.5 0.5 RAD 0.0078125 + txt138 +TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0.5 APEX 0.5 0.609531 0.5 RAD 0.0078125 + txt138 +TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.515469 APEX 0.5 0.5 0.609531 RAD 0.0078125 + txt138 +TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0.625 RAD 0.03125 + txt138 +TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0.625 APEX 0.609531 0.5 0.625 RAD 0.0078125 + txt138 +TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0.625 APEX 0.5 0.609531 0.625 RAD 0.0078125 + txt138 +TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.640469 APEX 0.5 0.5 0.734531 RAD 0.0078125 + txt138 +TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0.75 RAD 0.03125 + txt138 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0.75 APEX 0.609531 0.5 0.75 RAD 0.0078125 + txt139 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0.75 APEX 0.5 0.609531 0.75 RAD 0.0078125 + txt139 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.765469 APEX 0.5 0.5 0.859531 RAD 0.0078125 + txt139 +TEXDEF txt139 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 0.875 RAD 0.03125 + txt139 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 0.875 APEX 0.609531 0.5 0.875 RAD 0.0078125 + txt139 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 0.875 APEX 0.5 0.609531 0.875 RAD 0.0078125 + txt139 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.5 0.890469 APEX 0.5 0.5 0.984531 RAD 0.0078125 + txt139 +TEXDEF txt139 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.5 1 RAD 0.03125 + txt139 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.5 1 APEX 0.609531 0.5 1 RAD 0.0078125 + txt139 +TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.515469 1 APEX 0.5 0.609531 1 RAD 0.0078125 + txt139 +TEXDEF txt140 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0 RAD 0.03125 + txt140 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0 APEX 0.609531 0.625 0 RAD 0.0078125 + txt140 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0 APEX 0.5 0.734531 0 RAD 0.0078125 + txt140 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.0154687 APEX 0.5 0.625 0.109531 RAD 0.0078125 + txt140 +TEXDEF txt140 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0.125 RAD 0.03125 + txt140 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0.125 APEX 0.609531 0.625 0.125 RAD 0.0078125 + txt140 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0.125 APEX 0.5 0.734531 0.125 RAD 0.0078125 + txt140 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.140469 APEX 0.5 0.625 0.234531 RAD 0.0078125 + txt140 +TEXDEF txt140 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0.25 RAD 0.03125 + txt140 +TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0.25 APEX 0.609531 0.625 0.25 RAD 0.0078125 + txt140 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0.25 APEX 0.5 0.734531 0.25 RAD 0.0078125 + txt141 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.265469 APEX 0.5 0.625 0.359531 RAD 0.0078125 + txt141 +TEXDEF txt141 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0.375 RAD 0.03125 + txt141 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0.375 APEX 0.609531 0.625 0.375 RAD 0.0078125 + txt141 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0.375 APEX 0.5 0.734531 0.375 RAD 0.0078125 + txt141 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.390469 APEX 0.5 0.625 0.484531 RAD 0.0078125 + txt141 +TEXDEF txt141 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0.5 RAD 0.03125 + txt141 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0.5 APEX 0.609531 0.625 0.5 RAD 0.0078125 + txt141 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0.5 APEX 0.5 0.734531 0.5 RAD 0.0078125 + txt141 +TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.515469 APEX 0.5 0.625 0.609531 RAD 0.0078125 + txt141 +TEXDEF txt142 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0.625 RAD 0.03125 + txt142 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0.625 APEX 0.609531 0.625 0.625 RAD 0.0078125 + txt142 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0.625 APEX 0.5 0.734531 0.625 RAD 0.0078125 + txt142 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.640469 APEX 0.5 0.625 0.734531 RAD 0.0078125 + txt142 +TEXDEF txt142 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0.75 RAD 0.03125 + txt142 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0.75 APEX 0.609531 0.625 0.75 RAD 0.0078125 + txt142 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0.75 APEX 0.5 0.734531 0.75 RAD 0.0078125 + txt142 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.765469 APEX 0.5 0.625 0.859531 RAD 0.0078125 + txt142 +TEXDEF txt142 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 0.875 RAD 0.03125 + txt142 +TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 0.875 APEX 0.609531 0.625 0.875 RAD 0.0078125 + txt142 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 0.875 APEX 0.5 0.734531 0.875 RAD 0.0078125 + txt143 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.625 0.890469 APEX 0.5 0.625 0.984531 RAD 0.0078125 + txt143 +TEXDEF txt143 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.625 1 RAD 0.03125 + txt143 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.625 1 APEX 0.609531 0.625 1 RAD 0.0078125 + txt143 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.640469 1 APEX 0.5 0.734531 1 RAD 0.0078125 + txt143 +TEXDEF txt143 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0 RAD 0.03125 + txt143 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0 APEX 0.609531 0.75 0 RAD 0.0078125 + txt143 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0 APEX 0.5 0.859531 0 RAD 0.0078125 + txt143 +TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.0154687 APEX 0.5 0.75 0.109531 RAD 0.0078125 + txt143 +TEXDEF txt143 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0.125 RAD 0.03125 + txt143 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0.125 APEX 0.609531 0.75 0.125 RAD 0.0078125 + txt144 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0.125 APEX 0.5 0.859531 0.125 RAD 0.0078125 + txt144 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.140469 APEX 0.5 0.75 0.234531 RAD 0.0078125 + txt144 +TEXDEF txt144 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0.25 RAD 0.03125 + txt144 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0.25 APEX 0.609531 0.75 0.25 RAD 0.0078125 + txt144 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0.25 APEX 0.5 0.859531 0.25 RAD 0.0078125 + txt144 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.265469 APEX 0.5 0.75 0.359531 RAD 0.0078125 + txt144 +TEXDEF txt144 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0.375 RAD 0.03125 + txt144 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0.375 APEX 0.609531 0.75 0.375 RAD 0.0078125 + txt144 +TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0.375 APEX 0.5 0.859531 0.375 RAD 0.0078125 + txt144 +TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.390469 APEX 0.5 0.75 0.484531 RAD 0.0078125 + txt145 +TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0.5 RAD 0.03125 + txt145 +TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0.5 APEX 0.609531 0.75 0.5 RAD 0.0078125 + txt145 +TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0.5 APEX 0.5 0.859531 0.5 RAD 0.0078125 + txt145 +TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.515469 APEX 0.5 0.75 0.609531 RAD 0.0078125 + txt145 +TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0.625 RAD 0.03125 + txt145 +TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0.625 APEX 0.609531 0.75 0.625 RAD 0.0078125 + txt145 +TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0.625 APEX 0.5 0.859531 0.625 RAD 0.0078125 + txt145 +TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.640469 APEX 0.5 0.75 0.734531 RAD 0.0078125 + txt145 +TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0.75 RAD 0.03125 + txt145 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0.75 APEX 0.609531 0.75 0.75 RAD 0.0078125 + txt146 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0.75 APEX 0.5 0.859531 0.75 RAD 0.0078125 + txt146 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.765469 APEX 0.5 0.75 0.859531 RAD 0.0078125 + txt146 +TEXDEF txt146 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 0.875 RAD 0.03125 + txt146 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 0.875 APEX 0.609531 0.75 0.875 RAD 0.0078125 + txt146 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 0.875 APEX 0.5 0.859531 0.875 RAD 0.0078125 + txt146 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.75 0.890469 APEX 0.5 0.75 0.984531 RAD 0.0078125 + txt146 +TEXDEF txt146 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.75 1 RAD 0.03125 + txt146 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.75 1 APEX 0.609531 0.75 1 RAD 0.0078125 + txt146 +TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.765469 1 APEX 0.5 0.859531 1 RAD 0.0078125 + txt146 +TEXDEF txt147 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0 RAD 0.03125 + txt147 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0 APEX 0.609531 0.875 0 RAD 0.0078125 + txt147 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0 APEX 0.5 0.984531 0 RAD 0.0078125 + txt147 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.0154687 APEX 0.5 0.875 0.109531 RAD 0.0078125 + txt147 +TEXDEF txt147 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0.125 RAD 0.03125 + txt147 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0.125 APEX 0.609531 0.875 0.125 RAD 0.0078125 + txt147 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0.125 APEX 0.5 0.984531 0.125 RAD 0.0078125 + txt147 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.140469 APEX 0.5 0.875 0.234531 RAD 0.0078125 + txt147 +TEXDEF txt147 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0.25 RAD 0.03125 + txt147 +TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0.25 APEX 0.609531 0.875 0.25 RAD 0.0078125 + txt147 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0.25 APEX 0.5 0.984531 0.25 RAD 0.0078125 + txt148 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.265469 APEX 0.5 0.875 0.359531 RAD 0.0078125 + txt148 +TEXDEF txt148 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0.375 RAD 0.03125 + txt148 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0.375 APEX 0.609531 0.875 0.375 RAD 0.0078125 + txt148 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0.375 APEX 0.5 0.984531 0.375 RAD 0.0078125 + txt148 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.390469 APEX 0.5 0.875 0.484531 RAD 0.0078125 + txt148 +TEXDEF txt148 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0.5 RAD 0.03125 + txt148 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0.5 APEX 0.609531 0.875 0.5 RAD 0.0078125 + txt148 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0.5 APEX 0.5 0.984531 0.5 RAD 0.0078125 + txt148 +TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.515469 APEX 0.5 0.875 0.609531 RAD 0.0078125 + txt148 +TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0.625 RAD 0.03125 + txt149 +TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0.625 APEX 0.609531 0.875 0.625 RAD 0.0078125 + txt149 +TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0.625 APEX 0.5 0.984531 0.625 RAD 0.0078125 + txt149 +TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.640469 APEX 0.5 0.875 0.734531 RAD 0.0078125 + txt149 +TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0.75 RAD 0.03125 + txt149 +TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0.75 APEX 0.609531 0.875 0.75 RAD 0.0078125 + txt149 +TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0.75 APEX 0.5 0.984531 0.75 RAD 0.0078125 + txt149 +TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.765469 APEX 0.5 0.875 0.859531 RAD 0.0078125 + txt149 +TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 0.875 RAD 0.03125 + txt149 +TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 0.875 APEX 0.609531 0.875 0.875 RAD 0.0078125 + txt149 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 0.875 APEX 0.5 0.984531 0.875 RAD 0.0078125 + txt150 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.875 0.890469 APEX 0.5 0.875 0.984531 RAD 0.0078125 + txt150 +TEXDEF txt150 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 0.875 1 RAD 0.03125 + txt150 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 0.875 1 APEX 0.609531 0.875 1 RAD 0.0078125 + txt150 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 0.890469 1 APEX 0.5 0.984531 1 RAD 0.0078125 + txt150 +TEXDEF txt150 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0 RAD 0.03125 + txt150 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0 APEX 0.609531 1 0 RAD 0.0078125 + txt150 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.0154687 APEX 0.5 1 0.109531 RAD 0.0078125 + txt150 +TEXDEF txt150 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0.125 RAD 0.03125 + txt150 +TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0.125 APEX 0.609531 1 0.125 RAD 0.0078125 + txt150 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.140469 APEX 0.5 1 0.234531 RAD 0.0078125 + txt151 +TEXDEF txt151 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0.25 RAD 0.03125 + txt151 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0.25 APEX 0.609531 1 0.25 RAD 0.0078125 + txt151 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.265469 APEX 0.5 1 0.359531 RAD 0.0078125 + txt151 +TEXDEF txt151 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0.375 RAD 0.03125 + txt151 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0.375 APEX 0.609531 1 0.375 RAD 0.0078125 + txt151 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.390469 APEX 0.5 1 0.484531 RAD 0.0078125 + txt151 +TEXDEF txt151 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0.5 RAD 0.03125 + txt151 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0.5 APEX 0.609531 1 0.5 RAD 0.0078125 + txt151 +TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.515469 APEX 0.5 1 0.609531 RAD 0.0078125 + txt151 +TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0.625 RAD 0.03125 + txt152 +TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0.625 APEX 0.609531 1 0.625 RAD 0.0078125 + txt152 +TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.640469 APEX 0.5 1 0.734531 RAD 0.0078125 + txt152 +TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0.75 RAD 0.03125 + txt152 +TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0.75 APEX 0.609531 1 0.75 RAD 0.0078125 + txt152 +TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.765469 APEX 0.5 1 0.859531 RAD 0.0078125 + txt152 +TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 0.875 RAD 0.03125 + txt152 +TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 0.875 APEX 0.609531 1 0.875 RAD 0.0078125 + txt152 +TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.5 1 0.890469 APEX 0.5 1 0.984531 RAD 0.0078125 + txt152 +TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.5 1 1 RAD 0.03125 + txt152 +TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.515469 1 1 APEX 0.609531 1 1 RAD 0.0078125 + txt153 +TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0 RAD 0.03125 + txt153 +TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0 APEX 0.734531 0 0 RAD 0.0078125 + txt153 +TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0 APEX 0.625 0.109531 0 RAD 0.0078125 + txt153 +TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.0154687 APEX 0.625 0 0.109531 RAD 0.0078125 + txt153 +TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0.125 RAD 0.03125 + txt153 +TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0.125 APEX 0.734531 0 0.125 RAD 0.0078125 + txt153 +TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0.125 APEX 0.625 0.109531 0.125 RAD 0.0078125 + txt153 +TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.140469 APEX 0.625 0 0.234531 RAD 0.0078125 + txt153 +TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0.25 RAD 0.03125 + txt153 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0.25 APEX 0.734531 0 0.25 RAD 0.0078125 + txt154 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0.25 APEX 0.625 0.109531 0.25 RAD 0.0078125 + txt154 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.265469 APEX 0.625 0 0.359531 RAD 0.0078125 + txt154 +TEXDEF txt154 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0.375 RAD 0.03125 + txt154 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0.375 APEX 0.734531 0 0.375 RAD 0.0078125 + txt154 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0.375 APEX 0.625 0.109531 0.375 RAD 0.0078125 + txt154 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.390469 APEX 0.625 0 0.484531 RAD 0.0078125 + txt154 +TEXDEF txt154 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0.5 RAD 0.03125 + txt154 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0.5 APEX 0.734531 0 0.5 RAD 0.0078125 + txt154 +TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0.5 APEX 0.625 0.109531 0.5 RAD 0.0078125 + txt154 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.515469 APEX 0.625 0 0.609531 RAD 0.0078125 + txt155 +TEXDEF txt155 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0.625 RAD 0.03125 + txt155 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0.625 APEX 0.734531 0 0.625 RAD 0.0078125 + txt155 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0.625 APEX 0.625 0.109531 0.625 RAD 0.0078125 + txt155 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.640469 APEX 0.625 0 0.734531 RAD 0.0078125 + txt155 +TEXDEF txt155 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0.75 RAD 0.03125 + txt155 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0.75 APEX 0.734531 0 0.75 RAD 0.0078125 + txt155 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0.75 APEX 0.625 0.109531 0.75 RAD 0.0078125 + txt155 +TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.765469 APEX 0.625 0 0.859531 RAD 0.0078125 + txt155 +TEXDEF txt155 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 0.875 RAD 0.03125 + txt155 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 0.875 APEX 0.734531 0 0.875 RAD 0.0078125 + txt156 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 0.875 APEX 0.625 0.109531 0.875 RAD 0.0078125 + txt156 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0 0.890469 APEX 0.625 0 0.984531 RAD 0.0078125 + txt156 +TEXDEF txt156 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0 1 RAD 0.03125 + txt156 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0 1 APEX 0.734531 0 1 RAD 0.0078125 + txt156 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.0154687 1 APEX 0.625 0.109531 1 RAD 0.0078125 + txt156 +TEXDEF txt156 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0 RAD 0.03125 + txt156 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0 APEX 0.734531 0.125 0 RAD 0.0078125 + txt156 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0 APEX 0.625 0.234531 0 RAD 0.0078125 + txt156 +TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.0154687 APEX 0.625 0.125 0.109531 RAD 0.0078125 + txt156 +TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0.125 RAD 0.03125 + txt157 +TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0.125 APEX 0.734531 0.125 0.125 RAD 0.0078125 + txt157 +TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0.125 APEX 0.625 0.234531 0.125 RAD 0.0078125 + txt157 +TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.140469 APEX 0.625 0.125 0.234531 RAD 0.0078125 + txt157 +TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0.25 RAD 0.03125 + txt157 +TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0.25 APEX 0.734531 0.125 0.25 RAD 0.0078125 + txt157 +TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0.25 APEX 0.625 0.234531 0.25 RAD 0.0078125 + txt157 +TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.265469 APEX 0.625 0.125 0.359531 RAD 0.0078125 + txt157 +TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0.375 RAD 0.03125 + txt157 +TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0.375 APEX 0.734531 0.125 0.375 RAD 0.0078125 + txt157 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0.375 APEX 0.625 0.234531 0.375 RAD 0.0078125 + txt158 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.390469 APEX 0.625 0.125 0.484531 RAD 0.0078125 + txt158 +TEXDEF txt158 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0.5 RAD 0.03125 + txt158 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0.5 APEX 0.734531 0.125 0.5 RAD 0.0078125 + txt158 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0.5 APEX 0.625 0.234531 0.5 RAD 0.0078125 + txt158 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.515469 APEX 0.625 0.125 0.609531 RAD 0.0078125 + txt158 +TEXDEF txt158 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0.625 RAD 0.03125 + txt158 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0.625 APEX 0.734531 0.125 0.625 RAD 0.0078125 + txt158 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0.625 APEX 0.625 0.234531 0.625 RAD 0.0078125 + txt158 +TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.640469 APEX 0.625 0.125 0.734531 RAD 0.0078125 + txt158 +TEXDEF txt159 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0.75 RAD 0.03125 + txt159 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0.75 APEX 0.734531 0.125 0.75 RAD 0.0078125 + txt159 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0.75 APEX 0.625 0.234531 0.75 RAD 0.0078125 + txt159 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.765469 APEX 0.625 0.125 0.859531 RAD 0.0078125 + txt159 +TEXDEF txt159 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 0.875 RAD 0.03125 + txt159 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 0.875 APEX 0.734531 0.125 0.875 RAD 0.0078125 + txt159 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 0.875 APEX 0.625 0.234531 0.875 RAD 0.0078125 + txt159 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.125 0.890469 APEX 0.625 0.125 0.984531 RAD 0.0078125 + txt159 +TEXDEF txt159 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.125 1 RAD 0.03125 + txt159 +TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.125 1 APEX 0.734531 0.125 1 RAD 0.0078125 + txt159 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.140469 1 APEX 0.625 0.234531 1 RAD 0.0078125 + txt160 +TEXDEF txt160 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0 RAD 0.03125 + txt160 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0 APEX 0.734531 0.25 0 RAD 0.0078125 + txt160 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0 APEX 0.625 0.359531 0 RAD 0.0078125 + txt160 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.0154687 APEX 0.625 0.25 0.109531 RAD 0.0078125 + txt160 +TEXDEF txt160 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0.125 RAD 0.03125 + txt160 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0.125 APEX 0.734531 0.25 0.125 RAD 0.0078125 + txt160 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0.125 APEX 0.625 0.359531 0.125 RAD 0.0078125 + txt160 +TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.140469 APEX 0.625 0.25 0.234531 RAD 0.0078125 + txt160 +TEXDEF txt160 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0.25 RAD 0.03125 + txt160 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0.25 APEX 0.734531 0.25 0.25 RAD 0.0078125 + txt161 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0.25 APEX 0.625 0.359531 0.25 RAD 0.0078125 + txt161 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.265469 APEX 0.625 0.25 0.359531 RAD 0.0078125 + txt161 +TEXDEF txt161 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0.375 RAD 0.03125 + txt161 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0.375 APEX 0.734531 0.25 0.375 RAD 0.0078125 + txt161 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0.375 APEX 0.625 0.359531 0.375 RAD 0.0078125 + txt161 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.390469 APEX 0.625 0.25 0.484531 RAD 0.0078125 + txt161 +TEXDEF txt161 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0.5 RAD 0.03125 + txt161 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0.5 APEX 0.734531 0.25 0.5 RAD 0.0078125 + txt161 +TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0.5 APEX 0.625 0.359531 0.5 RAD 0.0078125 + txt161 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.515469 APEX 0.625 0.25 0.609531 RAD 0.0078125 + txt162 +TEXDEF txt162 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0.625 RAD 0.03125 + txt162 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0.625 APEX 0.734531 0.25 0.625 RAD 0.0078125 + txt162 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0.625 APEX 0.625 0.359531 0.625 RAD 0.0078125 + txt162 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.640469 APEX 0.625 0.25 0.734531 RAD 0.0078125 + txt162 +TEXDEF txt162 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0.75 RAD 0.03125 + txt162 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0.75 APEX 0.734531 0.25 0.75 RAD 0.0078125 + txt162 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0.75 APEX 0.625 0.359531 0.75 RAD 0.0078125 + txt162 +TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.765469 APEX 0.625 0.25 0.859531 RAD 0.0078125 + txt162 +TEXDEF txt162 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 0.875 RAD 0.03125 + txt162 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 0.875 APEX 0.734531 0.25 0.875 RAD 0.0078125 + txt163 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 0.875 APEX 0.625 0.359531 0.875 RAD 0.0078125 + txt163 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.25 0.890469 APEX 0.625 0.25 0.984531 RAD 0.0078125 + txt163 +TEXDEF txt163 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.25 1 RAD 0.03125 + txt163 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.25 1 APEX 0.734531 0.25 1 RAD 0.0078125 + txt163 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.265469 1 APEX 0.625 0.359531 1 RAD 0.0078125 + txt163 +TEXDEF txt163 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0 RAD 0.03125 + txt163 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0 APEX 0.734531 0.375 0 RAD 0.0078125 + txt163 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0 APEX 0.625 0.484531 0 RAD 0.0078125 + txt163 +TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.0154687 APEX 0.625 0.375 0.109531 RAD 0.0078125 + txt163 +TEXDEF txt164 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0.125 RAD 0.03125 + txt164 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0.125 APEX 0.734531 0.375 0.125 RAD 0.0078125 + txt164 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0.125 APEX 0.625 0.484531 0.125 RAD 0.0078125 + txt164 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.140469 APEX 0.625 0.375 0.234531 RAD 0.0078125 + txt164 +TEXDEF txt164 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0.25 RAD 0.03125 + txt164 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0.25 APEX 0.734531 0.375 0.25 RAD 0.0078125 + txt164 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0.25 APEX 0.625 0.484531 0.25 RAD 0.0078125 + txt164 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.265469 APEX 0.625 0.375 0.359531 RAD 0.0078125 + txt164 +TEXDEF txt164 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0.375 RAD 0.03125 + txt164 +TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0.375 APEX 0.734531 0.375 0.375 RAD 0.0078125 + txt164 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0.375 APEX 0.625 0.484531 0.375 RAD 0.0078125 + txt165 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.390469 APEX 0.625 0.375 0.484531 RAD 0.0078125 + txt165 +TEXDEF txt165 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0.5 RAD 0.03125 + txt165 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0.5 APEX 0.734531 0.375 0.5 RAD 0.0078125 + txt165 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0.5 APEX 0.625 0.484531 0.5 RAD 0.0078125 + txt165 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.515469 APEX 0.625 0.375 0.609531 RAD 0.0078125 + txt165 +TEXDEF txt165 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0.625 RAD 0.03125 + txt165 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0.625 APEX 0.734531 0.375 0.625 RAD 0.0078125 + txt165 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0.625 APEX 0.625 0.484531 0.625 RAD 0.0078125 + txt165 +TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.640469 APEX 0.625 0.375 0.734531 RAD 0.0078125 + txt165 +TEXDEF txt166 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0.75 RAD 0.03125 + txt166 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0.75 APEX 0.734531 0.375 0.75 RAD 0.0078125 + txt166 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0.75 APEX 0.625 0.484531 0.75 RAD 0.0078125 + txt166 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.765469 APEX 0.625 0.375 0.859531 RAD 0.0078125 + txt166 +TEXDEF txt166 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 0.875 RAD 0.03125 + txt166 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 0.875 APEX 0.734531 0.375 0.875 RAD 0.0078125 + txt166 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 0.875 APEX 0.625 0.484531 0.875 RAD 0.0078125 + txt166 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.375 0.890469 APEX 0.625 0.375 0.984531 RAD 0.0078125 + txt166 +TEXDEF txt166 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.375 1 RAD 0.03125 + txt166 +TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.375 1 APEX 0.734531 0.375 1 RAD 0.0078125 + txt166 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.390469 1 APEX 0.625 0.484531 1 RAD 0.0078125 + txt167 +TEXDEF txt167 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0 RAD 0.03125 + txt167 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0 APEX 0.734531 0.5 0 RAD 0.0078125 + txt167 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0 APEX 0.625 0.609531 0 RAD 0.0078125 + txt167 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.0154687 APEX 0.625 0.5 0.109531 RAD 0.0078125 + txt167 +TEXDEF txt167 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0.125 RAD 0.03125 + txt167 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0.125 APEX 0.734531 0.5 0.125 RAD 0.0078125 + txt167 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0.125 APEX 0.625 0.609531 0.125 RAD 0.0078125 + txt167 +TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.140469 APEX 0.625 0.5 0.234531 RAD 0.0078125 + txt167 +TEXDEF txt167 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0.25 RAD 0.03125 + txt167 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0.25 APEX 0.734531 0.5 0.25 RAD 0.0078125 + txt168 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0.25 APEX 0.625 0.609531 0.25 RAD 0.0078125 + txt168 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.265469 APEX 0.625 0.5 0.359531 RAD 0.0078125 + txt168 +TEXDEF txt168 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0.375 RAD 0.03125 + txt168 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0.375 APEX 0.734531 0.5 0.375 RAD 0.0078125 + txt168 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0.375 APEX 0.625 0.609531 0.375 RAD 0.0078125 + txt168 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.390469 APEX 0.625 0.5 0.484531 RAD 0.0078125 + txt168 +TEXDEF txt168 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0.5 RAD 0.03125 + txt168 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0.5 APEX 0.734531 0.5 0.5 RAD 0.0078125 + txt168 +TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0.5 APEX 0.625 0.609531 0.5 RAD 0.0078125 + txt168 +TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.515469 APEX 0.625 0.5 0.609531 RAD 0.0078125 + txt169 +TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0.625 RAD 0.03125 + txt169 +TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0.625 APEX 0.734531 0.5 0.625 RAD 0.0078125 + txt169 +TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0.625 APEX 0.625 0.609531 0.625 RAD 0.0078125 + txt169 +TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.640469 APEX 0.625 0.5 0.734531 RAD 0.0078125 + txt169 +TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0.75 RAD 0.03125 + txt169 +TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0.75 APEX 0.734531 0.5 0.75 RAD 0.0078125 + txt169 +TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0.75 APEX 0.625 0.609531 0.75 RAD 0.0078125 + txt169 +TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.765469 APEX 0.625 0.5 0.859531 RAD 0.0078125 + txt169 +TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 0.875 RAD 0.03125 + txt169 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 0.875 APEX 0.734531 0.5 0.875 RAD 0.0078125 + txt170 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 0.875 APEX 0.625 0.609531 0.875 RAD 0.0078125 + txt170 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.5 0.890469 APEX 0.625 0.5 0.984531 RAD 0.0078125 + txt170 +TEXDEF txt170 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.5 1 RAD 0.03125 + txt170 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.5 1 APEX 0.734531 0.5 1 RAD 0.0078125 + txt170 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.515469 1 APEX 0.625 0.609531 1 RAD 0.0078125 + txt170 +TEXDEF txt170 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0 RAD 0.03125 + txt170 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0 APEX 0.734531 0.625 0 RAD 0.0078125 + txt170 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0 APEX 0.625 0.734531 0 RAD 0.0078125 + txt170 +TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.0154687 APEX 0.625 0.625 0.109531 RAD 0.0078125 + txt170 +TEXDEF txt171 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0.125 RAD 0.03125 + txt171 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0.125 APEX 0.734531 0.625 0.125 RAD 0.0078125 + txt171 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0.125 APEX 0.625 0.734531 0.125 RAD 0.0078125 + txt171 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.140469 APEX 0.625 0.625 0.234531 RAD 0.0078125 + txt171 +TEXDEF txt171 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0.25 RAD 0.03125 + txt171 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0.25 APEX 0.734531 0.625 0.25 RAD 0.0078125 + txt171 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0.25 APEX 0.625 0.734531 0.25 RAD 0.0078125 + txt171 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.265469 APEX 0.625 0.625 0.359531 RAD 0.0078125 + txt171 +TEXDEF txt171 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0.375 RAD 0.03125 + txt171 +TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0.375 APEX 0.734531 0.625 0.375 RAD 0.0078125 + txt171 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0.375 APEX 0.625 0.734531 0.375 RAD 0.0078125 + txt172 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.390469 APEX 0.625 0.625 0.484531 RAD 0.0078125 + txt172 +TEXDEF txt172 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0.5 RAD 0.03125 + txt172 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0.5 APEX 0.734531 0.625 0.5 RAD 0.0078125 + txt172 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0.5 APEX 0.625 0.734531 0.5 RAD 0.0078125 + txt172 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.515469 APEX 0.625 0.625 0.609531 RAD 0.0078125 + txt172 +TEXDEF txt172 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0.625 RAD 0.03125 + txt172 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0.625 APEX 0.734531 0.625 0.625 RAD 0.0078125 + txt172 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0.625 APEX 0.625 0.734531 0.625 RAD 0.0078125 + txt172 +TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.640469 APEX 0.625 0.625 0.734531 RAD 0.0078125 + txt172 +TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0.75 RAD 0.03125 + txt173 +TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0.75 APEX 0.734531 0.625 0.75 RAD 0.0078125 + txt173 +TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0.75 APEX 0.625 0.734531 0.75 RAD 0.0078125 + txt173 +TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.765469 APEX 0.625 0.625 0.859531 RAD 0.0078125 + txt173 +TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 0.875 RAD 0.03125 + txt173 +TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 0.875 APEX 0.734531 0.625 0.875 RAD 0.0078125 + txt173 +TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 0.875 APEX 0.625 0.734531 0.875 RAD 0.0078125 + txt173 +TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.625 0.890469 APEX 0.625 0.625 0.984531 RAD 0.0078125 + txt173 +TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.625 1 RAD 0.03125 + txt173 +TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.625 1 APEX 0.734531 0.625 1 RAD 0.0078125 + txt173 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.640469 1 APEX 0.625 0.734531 1 RAD 0.0078125 + txt174 +TEXDEF txt174 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0 RAD 0.03125 + txt174 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0 APEX 0.734531 0.75 0 RAD 0.0078125 + txt174 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0 APEX 0.625 0.859531 0 RAD 0.0078125 + txt174 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.0154687 APEX 0.625 0.75 0.109531 RAD 0.0078125 + txt174 +TEXDEF txt174 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0.125 RAD 0.03125 + txt174 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0.125 APEX 0.734531 0.75 0.125 RAD 0.0078125 + txt174 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0.125 APEX 0.625 0.859531 0.125 RAD 0.0078125 + txt174 +TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.140469 APEX 0.625 0.75 0.234531 RAD 0.0078125 + txt174 +TEXDEF txt174 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0.25 RAD 0.03125 + txt174 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0.25 APEX 0.734531 0.75 0.25 RAD 0.0078125 + txt175 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0.25 APEX 0.625 0.859531 0.25 RAD 0.0078125 + txt175 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.265469 APEX 0.625 0.75 0.359531 RAD 0.0078125 + txt175 +TEXDEF txt175 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0.375 RAD 0.03125 + txt175 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0.375 APEX 0.734531 0.75 0.375 RAD 0.0078125 + txt175 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0.375 APEX 0.625 0.859531 0.375 RAD 0.0078125 + txt175 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.390469 APEX 0.625 0.75 0.484531 RAD 0.0078125 + txt175 +TEXDEF txt175 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0.5 RAD 0.03125 + txt175 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0.5 APEX 0.734531 0.75 0.5 RAD 0.0078125 + txt175 +TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0.5 APEX 0.625 0.859531 0.5 RAD 0.0078125 + txt175 +TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.515469 APEX 0.625 0.75 0.609531 RAD 0.0078125 + txt176 +TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0.625 RAD 0.03125 + txt176 +TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0.625 APEX 0.734531 0.75 0.625 RAD 0.0078125 + txt176 +TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0.625 APEX 0.625 0.859531 0.625 RAD 0.0078125 + txt176 +TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.640469 APEX 0.625 0.75 0.734531 RAD 0.0078125 + txt176 +TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0.75 RAD 0.03125 + txt176 +TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0.75 APEX 0.734531 0.75 0.75 RAD 0.0078125 + txt176 +TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0.75 APEX 0.625 0.859531 0.75 RAD 0.0078125 + txt176 +TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.765469 APEX 0.625 0.75 0.859531 RAD 0.0078125 + txt176 +TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 0.875 RAD 0.03125 + txt176 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 0.875 APEX 0.734531 0.75 0.875 RAD 0.0078125 + txt177 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 0.875 APEX 0.625 0.859531 0.875 RAD 0.0078125 + txt177 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.75 0.890469 APEX 0.625 0.75 0.984531 RAD 0.0078125 + txt177 +TEXDEF txt177 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.75 1 RAD 0.03125 + txt177 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.75 1 APEX 0.734531 0.75 1 RAD 0.0078125 + txt177 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.765469 1 APEX 0.625 0.859531 1 RAD 0.0078125 + txt177 +TEXDEF txt177 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0 RAD 0.03125 + txt177 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0 APEX 0.734531 0.875 0 RAD 0.0078125 + txt177 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0 APEX 0.625 0.984531 0 RAD 0.0078125 + txt177 +TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.0154687 APEX 0.625 0.875 0.109531 RAD 0.0078125 + txt177 +TEXDEF txt178 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0.125 RAD 0.03125 + txt178 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0.125 APEX 0.734531 0.875 0.125 RAD 0.0078125 + txt178 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0.125 APEX 0.625 0.984531 0.125 RAD 0.0078125 + txt178 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.140469 APEX 0.625 0.875 0.234531 RAD 0.0078125 + txt178 +TEXDEF txt178 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0.25 RAD 0.03125 + txt178 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0.25 APEX 0.734531 0.875 0.25 RAD 0.0078125 + txt178 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0.25 APEX 0.625 0.984531 0.25 RAD 0.0078125 + txt178 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.265469 APEX 0.625 0.875 0.359531 RAD 0.0078125 + txt178 +TEXDEF txt178 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0.375 RAD 0.03125 + txt178 +TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0.375 APEX 0.734531 0.875 0.375 RAD 0.0078125 + txt178 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0.375 APEX 0.625 0.984531 0.375 RAD 0.0078125 + txt179 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.390469 APEX 0.625 0.875 0.484531 RAD 0.0078125 + txt179 +TEXDEF txt179 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0.5 RAD 0.03125 + txt179 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0.5 APEX 0.734531 0.875 0.5 RAD 0.0078125 + txt179 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0.5 APEX 0.625 0.984531 0.5 RAD 0.0078125 + txt179 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.515469 APEX 0.625 0.875 0.609531 RAD 0.0078125 + txt179 +TEXDEF txt179 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0.625 RAD 0.03125 + txt179 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0.625 APEX 0.734531 0.875 0.625 RAD 0.0078125 + txt179 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0.625 APEX 0.625 0.984531 0.625 RAD 0.0078125 + txt179 +TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.640469 APEX 0.625 0.875 0.734531 RAD 0.0078125 + txt179 +TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0.75 RAD 0.03125 + txt180 +TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0.75 APEX 0.734531 0.875 0.75 RAD 0.0078125 + txt180 +TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0.75 APEX 0.625 0.984531 0.75 RAD 0.0078125 + txt180 +TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.765469 APEX 0.625 0.875 0.859531 RAD 0.0078125 + txt180 +TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 0.875 RAD 0.03125 + txt180 +TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 0.875 APEX 0.734531 0.875 0.875 RAD 0.0078125 + txt180 +TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 0.875 APEX 0.625 0.984531 0.875 RAD 0.0078125 + txt180 +TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.875 0.890469 APEX 0.625 0.875 0.984531 RAD 0.0078125 + txt180 +TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 0.875 1 RAD 0.03125 + txt180 +TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 0.875 1 APEX 0.734531 0.875 1 RAD 0.0078125 + txt180 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 0.890469 1 APEX 0.625 0.984531 1 RAD 0.0078125 + txt181 +TEXDEF txt181 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0 RAD 0.03125 + txt181 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0 APEX 0.734531 1 0 RAD 0.0078125 + txt181 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.0154687 APEX 0.625 1 0.109531 RAD 0.0078125 + txt181 +TEXDEF txt181 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0.125 RAD 0.03125 + txt181 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0.125 APEX 0.734531 1 0.125 RAD 0.0078125 + txt181 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.140469 APEX 0.625 1 0.234531 RAD 0.0078125 + txt181 +TEXDEF txt181 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0.25 RAD 0.03125 + txt181 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0.25 APEX 0.734531 1 0.25 RAD 0.0078125 + txt181 +TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.265469 APEX 0.625 1 0.359531 RAD 0.0078125 + txt181 +TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0.375 RAD 0.03125 + txt182 +TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0.375 APEX 0.734531 1 0.375 RAD 0.0078125 + txt182 +TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.390469 APEX 0.625 1 0.484531 RAD 0.0078125 + txt182 +TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0.5 RAD 0.03125 + txt182 +TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0.5 APEX 0.734531 1 0.5 RAD 0.0078125 + txt182 +TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.515469 APEX 0.625 1 0.609531 RAD 0.0078125 + txt182 +TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0.625 RAD 0.03125 + txt182 +TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0.625 APEX 0.734531 1 0.625 RAD 0.0078125 + txt182 +TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.640469 APEX 0.625 1 0.734531 RAD 0.0078125 + txt182 +TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0.75 RAD 0.03125 + txt182 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0.75 APEX 0.734531 1 0.75 RAD 0.0078125 + txt183 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.765469 APEX 0.625 1 0.859531 RAD 0.0078125 + txt183 +TEXDEF txt183 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 0.875 RAD 0.03125 + txt183 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 0.875 APEX 0.734531 1 0.875 RAD 0.0078125 + txt183 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.625 1 0.890469 APEX 0.625 1 0.984531 RAD 0.0078125 + txt183 +TEXDEF txt183 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.625 1 1 RAD 0.03125 + txt183 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.640469 1 1 APEX 0.734531 1 1 RAD 0.0078125 + txt183 +TEXDEF txt183 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0 RAD 0.03125 + txt183 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0 APEX 0.859531 0 0 RAD 0.0078125 + txt183 +TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0 APEX 0.75 0.109531 0 RAD 0.0078125 + txt183 +TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.0154687 APEX 0.75 0 0.109531 RAD 0.0078125 + txt184 +TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0.125 RAD 0.03125 + txt184 +TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0.125 APEX 0.859531 0 0.125 RAD 0.0078125 + txt184 +TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0.125 APEX 0.75 0.109531 0.125 RAD 0.0078125 + txt184 +TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.140469 APEX 0.75 0 0.234531 RAD 0.0078125 + txt184 +TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0.25 RAD 0.03125 + txt184 +TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0.25 APEX 0.859531 0 0.25 RAD 0.0078125 + txt184 +TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0.25 APEX 0.75 0.109531 0.25 RAD 0.0078125 + txt184 +TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.265469 APEX 0.75 0 0.359531 RAD 0.0078125 + txt184 +TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0.375 RAD 0.03125 + txt184 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0.375 APEX 0.859531 0 0.375 RAD 0.0078125 + txt185 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0.375 APEX 0.75 0.109531 0.375 RAD 0.0078125 + txt185 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.390469 APEX 0.75 0 0.484531 RAD 0.0078125 + txt185 +TEXDEF txt185 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0.5 RAD 0.03125 + txt185 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0.5 APEX 0.859531 0 0.5 RAD 0.0078125 + txt185 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0.5 APEX 0.75 0.109531 0.5 RAD 0.0078125 + txt185 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.515469 APEX 0.75 0 0.609531 RAD 0.0078125 + txt185 +TEXDEF txt185 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0.625 RAD 0.03125 + txt185 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0.625 APEX 0.859531 0 0.625 RAD 0.0078125 + txt185 +TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0.625 APEX 0.75 0.109531 0.625 RAD 0.0078125 + txt185 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.640469 APEX 0.75 0 0.734531 RAD 0.0078125 + txt186 +TEXDEF txt186 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0.75 RAD 0.03125 + txt186 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0.75 APEX 0.859531 0 0.75 RAD 0.0078125 + txt186 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0.75 APEX 0.75 0.109531 0.75 RAD 0.0078125 + txt186 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.765469 APEX 0.75 0 0.859531 RAD 0.0078125 + txt186 +TEXDEF txt186 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 0.875 RAD 0.03125 + txt186 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 0.875 APEX 0.859531 0 0.875 RAD 0.0078125 + txt186 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 0.875 APEX 0.75 0.109531 0.875 RAD 0.0078125 + txt186 +TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0 0.890469 APEX 0.75 0 0.984531 RAD 0.0078125 + txt186 +TEXDEF txt186 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0 1 RAD 0.03125 + txt186 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0 1 APEX 0.859531 0 1 RAD 0.0078125 + txt187 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.0154687 1 APEX 0.75 0.109531 1 RAD 0.0078125 + txt187 +TEXDEF txt187 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0 RAD 0.03125 + txt187 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0 APEX 0.859531 0.125 0 RAD 0.0078125 + txt187 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0 APEX 0.75 0.234531 0 RAD 0.0078125 + txt187 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.0154687 APEX 0.75 0.125 0.109531 RAD 0.0078125 + txt187 +TEXDEF txt187 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0.125 RAD 0.03125 + txt187 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0.125 APEX 0.859531 0.125 0.125 RAD 0.0078125 + txt187 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0.125 APEX 0.75 0.234531 0.125 RAD 0.0078125 + txt187 +TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.140469 APEX 0.75 0.125 0.234531 RAD 0.0078125 + txt187 +TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0.25 RAD 0.03125 + txt188 +TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0.25 APEX 0.859531 0.125 0.25 RAD 0.0078125 + txt188 +TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0.25 APEX 0.75 0.234531 0.25 RAD 0.0078125 + txt188 +TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.265469 APEX 0.75 0.125 0.359531 RAD 0.0078125 + txt188 +TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0.375 RAD 0.03125 + txt188 +TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0.375 APEX 0.859531 0.125 0.375 RAD 0.0078125 + txt188 +TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0.375 APEX 0.75 0.234531 0.375 RAD 0.0078125 + txt188 +TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.390469 APEX 0.75 0.125 0.484531 RAD 0.0078125 + txt188 +TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0.5 RAD 0.03125 + txt188 +TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0.5 APEX 0.859531 0.125 0.5 RAD 0.0078125 + txt188 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0.5 APEX 0.75 0.234531 0.5 RAD 0.0078125 + txt189 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.515469 APEX 0.75 0.125 0.609531 RAD 0.0078125 + txt189 +TEXDEF txt189 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0.625 RAD 0.03125 + txt189 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0.625 APEX 0.859531 0.125 0.625 RAD 0.0078125 + txt189 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0.625 APEX 0.75 0.234531 0.625 RAD 0.0078125 + txt189 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.640469 APEX 0.75 0.125 0.734531 RAD 0.0078125 + txt189 +TEXDEF txt189 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0.75 RAD 0.03125 + txt189 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0.75 APEX 0.859531 0.125 0.75 RAD 0.0078125 + txt189 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0.75 APEX 0.75 0.234531 0.75 RAD 0.0078125 + txt189 +TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.765469 APEX 0.75 0.125 0.859531 RAD 0.0078125 + txt189 +TEXDEF txt190 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 0.875 RAD 0.03125 + txt190 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 0.875 APEX 0.859531 0.125 0.875 RAD 0.0078125 + txt190 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 0.875 APEX 0.75 0.234531 0.875 RAD 0.0078125 + txt190 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.125 0.890469 APEX 0.75 0.125 0.984531 RAD 0.0078125 + txt190 +TEXDEF txt190 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.125 1 RAD 0.03125 + txt190 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.125 1 APEX 0.859531 0.125 1 RAD 0.0078125 + txt190 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.140469 1 APEX 0.75 0.234531 1 RAD 0.0078125 + txt190 +TEXDEF txt190 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0 RAD 0.03125 + txt190 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0 APEX 0.859531 0.25 0 RAD 0.0078125 + txt190 +TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0 APEX 0.75 0.359531 0 RAD 0.0078125 + txt190 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.0154687 APEX 0.75 0.25 0.109531 RAD 0.0078125 + txt191 +TEXDEF txt191 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0.125 RAD 0.03125 + txt191 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0.125 APEX 0.859531 0.25 0.125 RAD 0.0078125 + txt191 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0.125 APEX 0.75 0.359531 0.125 RAD 0.0078125 + txt191 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.140469 APEX 0.75 0.25 0.234531 RAD 0.0078125 + txt191 +TEXDEF txt191 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0.25 RAD 0.03125 + txt191 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0.25 APEX 0.859531 0.25 0.25 RAD 0.0078125 + txt191 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0.25 APEX 0.75 0.359531 0.25 RAD 0.0078125 + txt191 +TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.265469 APEX 0.75 0.25 0.359531 RAD 0.0078125 + txt191 +TEXDEF txt191 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0.375 RAD 0.03125 + txt191 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0.375 APEX 0.859531 0.25 0.375 RAD 0.0078125 + txt192 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0.375 APEX 0.75 0.359531 0.375 RAD 0.0078125 + txt192 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.390469 APEX 0.75 0.25 0.484531 RAD 0.0078125 + txt192 +TEXDEF txt192 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0.5 RAD 0.03125 + txt192 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0.5 APEX 0.859531 0.25 0.5 RAD 0.0078125 + txt192 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0.5 APEX 0.75 0.359531 0.5 RAD 0.0078125 + txt192 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.515469 APEX 0.75 0.25 0.609531 RAD 0.0078125 + txt192 +TEXDEF txt192 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0.625 RAD 0.03125 + txt192 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0.625 APEX 0.859531 0.25 0.625 RAD 0.0078125 + txt192 +TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0.625 APEX 0.75 0.359531 0.625 RAD 0.0078125 + txt192 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.640469 APEX 0.75 0.25 0.734531 RAD 0.0078125 + txt193 +TEXDEF txt193 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0.75 RAD 0.03125 + txt193 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0.75 APEX 0.859531 0.25 0.75 RAD 0.0078125 + txt193 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0.75 APEX 0.75 0.359531 0.75 RAD 0.0078125 + txt193 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.765469 APEX 0.75 0.25 0.859531 RAD 0.0078125 + txt193 +TEXDEF txt193 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 0.875 RAD 0.03125 + txt193 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 0.875 APEX 0.859531 0.25 0.875 RAD 0.0078125 + txt193 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 0.875 APEX 0.75 0.359531 0.875 RAD 0.0078125 + txt193 +TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.25 0.890469 APEX 0.75 0.25 0.984531 RAD 0.0078125 + txt193 +TEXDEF txt193 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.25 1 RAD 0.03125 + txt193 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.25 1 APEX 0.859531 0.25 1 RAD 0.0078125 + txt194 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.265469 1 APEX 0.75 0.359531 1 RAD 0.0078125 + txt194 +TEXDEF txt194 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0 RAD 0.03125 + txt194 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0 APEX 0.859531 0.375 0 RAD 0.0078125 + txt194 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0 APEX 0.75 0.484531 0 RAD 0.0078125 + txt194 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.0154687 APEX 0.75 0.375 0.109531 RAD 0.0078125 + txt194 +TEXDEF txt194 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0.125 RAD 0.03125 + txt194 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0.125 APEX 0.859531 0.375 0.125 RAD 0.0078125 + txt194 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0.125 APEX 0.75 0.484531 0.125 RAD 0.0078125 + txt194 +TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.140469 APEX 0.75 0.375 0.234531 RAD 0.0078125 + txt194 +TEXDEF txt195 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0.25 RAD 0.03125 + txt195 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0.25 APEX 0.859531 0.375 0.25 RAD 0.0078125 + txt195 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0.25 APEX 0.75 0.484531 0.25 RAD 0.0078125 + txt195 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.265469 APEX 0.75 0.375 0.359531 RAD 0.0078125 + txt195 +TEXDEF txt195 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0.375 RAD 0.03125 + txt195 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0.375 APEX 0.859531 0.375 0.375 RAD 0.0078125 + txt195 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0.375 APEX 0.75 0.484531 0.375 RAD 0.0078125 + txt195 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.390469 APEX 0.75 0.375 0.484531 RAD 0.0078125 + txt195 +TEXDEF txt195 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0.5 RAD 0.03125 + txt195 +TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0.5 APEX 0.859531 0.375 0.5 RAD 0.0078125 + txt195 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0.5 APEX 0.75 0.484531 0.5 RAD 0.0078125 + txt196 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.515469 APEX 0.75 0.375 0.609531 RAD 0.0078125 + txt196 +TEXDEF txt196 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0.625 RAD 0.03125 + txt196 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0.625 APEX 0.859531 0.375 0.625 RAD 0.0078125 + txt196 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0.625 APEX 0.75 0.484531 0.625 RAD 0.0078125 + txt196 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.640469 APEX 0.75 0.375 0.734531 RAD 0.0078125 + txt196 +TEXDEF txt196 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0.75 RAD 0.03125 + txt196 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0.75 APEX 0.859531 0.375 0.75 RAD 0.0078125 + txt196 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0.75 APEX 0.75 0.484531 0.75 RAD 0.0078125 + txt196 +TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.765469 APEX 0.75 0.375 0.859531 RAD 0.0078125 + txt196 +TEXDEF txt197 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 0.875 RAD 0.03125 + txt197 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 0.875 APEX 0.859531 0.375 0.875 RAD 0.0078125 + txt197 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 0.875 APEX 0.75 0.484531 0.875 RAD 0.0078125 + txt197 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.375 0.890469 APEX 0.75 0.375 0.984531 RAD 0.0078125 + txt197 +TEXDEF txt197 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.375 1 RAD 0.03125 + txt197 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.375 1 APEX 0.859531 0.375 1 RAD 0.0078125 + txt197 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.390469 1 APEX 0.75 0.484531 1 RAD 0.0078125 + txt197 +TEXDEF txt197 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0 RAD 0.03125 + txt197 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0 APEX 0.859531 0.5 0 RAD 0.0078125 + txt197 +TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0 APEX 0.75 0.609531 0 RAD 0.0078125 + txt197 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.0154687 APEX 0.75 0.5 0.109531 RAD 0.0078125 + txt198 +TEXDEF txt198 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0.125 RAD 0.03125 + txt198 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0.125 APEX 0.859531 0.5 0.125 RAD 0.0078125 + txt198 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0.125 APEX 0.75 0.609531 0.125 RAD 0.0078125 + txt198 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.140469 APEX 0.75 0.5 0.234531 RAD 0.0078125 + txt198 +TEXDEF txt198 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0.25 RAD 0.03125 + txt198 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0.25 APEX 0.859531 0.5 0.25 RAD 0.0078125 + txt198 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0.25 APEX 0.75 0.609531 0.25 RAD 0.0078125 + txt198 +TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.265469 APEX 0.75 0.5 0.359531 RAD 0.0078125 + txt198 +TEXDEF txt198 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0.375 RAD 0.03125 + txt198 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0.375 APEX 0.859531 0.5 0.375 RAD 0.0078125 + txt199 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0.375 APEX 0.75 0.609531 0.375 RAD 0.0078125 + txt199 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.390469 APEX 0.75 0.5 0.484531 RAD 0.0078125 + txt199 +TEXDEF txt199 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0.5 RAD 0.03125 + txt199 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0.5 APEX 0.859531 0.5 0.5 RAD 0.0078125 + txt199 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0.5 APEX 0.75 0.609531 0.5 RAD 0.0078125 + txt199 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.515469 APEX 0.75 0.5 0.609531 RAD 0.0078125 + txt199 +TEXDEF txt199 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0.625 RAD 0.03125 + txt199 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0.625 APEX 0.859531 0.5 0.625 RAD 0.0078125 + txt199 +TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0.625 APEX 0.75 0.609531 0.625 RAD 0.0078125 + txt199 +TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.640469 APEX 0.75 0.5 0.734531 RAD 0.0078125 + txt200 +TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0.75 RAD 0.03125 + txt200 +TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0.75 APEX 0.859531 0.5 0.75 RAD 0.0078125 + txt200 +TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0.75 APEX 0.75 0.609531 0.75 RAD 0.0078125 + txt200 +TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.765469 APEX 0.75 0.5 0.859531 RAD 0.0078125 + txt200 +TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 0.875 RAD 0.03125 + txt200 +TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 0.875 APEX 0.859531 0.5 0.875 RAD 0.0078125 + txt200 +TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 0.875 APEX 0.75 0.609531 0.875 RAD 0.0078125 + txt200 +TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.5 0.890469 APEX 0.75 0.5 0.984531 RAD 0.0078125 + txt200 +TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.5 1 RAD 0.03125 + txt200 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.5 1 APEX 0.859531 0.5 1 RAD 0.0078125 + txt201 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.515469 1 APEX 0.75 0.609531 1 RAD 0.0078125 + txt201 +TEXDEF txt201 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0 RAD 0.03125 + txt201 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0 APEX 0.859531 0.625 0 RAD 0.0078125 + txt201 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0 APEX 0.75 0.734531 0 RAD 0.0078125 + txt201 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.0154687 APEX 0.75 0.625 0.109531 RAD 0.0078125 + txt201 +TEXDEF txt201 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0.125 RAD 0.03125 + txt201 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0.125 APEX 0.859531 0.625 0.125 RAD 0.0078125 + txt201 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0.125 APEX 0.75 0.734531 0.125 RAD 0.0078125 + txt201 +TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.140469 APEX 0.75 0.625 0.234531 RAD 0.0078125 + txt201 +TEXDEF txt202 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0.25 RAD 0.03125 + txt202 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0.25 APEX 0.859531 0.625 0.25 RAD 0.0078125 + txt202 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0.25 APEX 0.75 0.734531 0.25 RAD 0.0078125 + txt202 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.265469 APEX 0.75 0.625 0.359531 RAD 0.0078125 + txt202 +TEXDEF txt202 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0.375 RAD 0.03125 + txt202 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0.375 APEX 0.859531 0.625 0.375 RAD 0.0078125 + txt202 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0.375 APEX 0.75 0.734531 0.375 RAD 0.0078125 + txt202 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.390469 APEX 0.75 0.625 0.484531 RAD 0.0078125 + txt202 +TEXDEF txt202 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0.5 RAD 0.03125 + txt202 +TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0.5 APEX 0.859531 0.625 0.5 RAD 0.0078125 + txt202 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0.5 APEX 0.75 0.734531 0.5 RAD 0.0078125 + txt203 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.515469 APEX 0.75 0.625 0.609531 RAD 0.0078125 + txt203 +TEXDEF txt203 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0.625 RAD 0.03125 + txt203 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0.625 APEX 0.859531 0.625 0.625 RAD 0.0078125 + txt203 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0.625 APEX 0.75 0.734531 0.625 RAD 0.0078125 + txt203 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.640469 APEX 0.75 0.625 0.734531 RAD 0.0078125 + txt203 +TEXDEF txt203 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0.75 RAD 0.03125 + txt203 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0.75 APEX 0.859531 0.625 0.75 RAD 0.0078125 + txt203 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0.75 APEX 0.75 0.734531 0.75 RAD 0.0078125 + txt203 +TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.765469 APEX 0.75 0.625 0.859531 RAD 0.0078125 + txt203 +TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 0.875 RAD 0.03125 + txt204 +TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 0.875 APEX 0.859531 0.625 0.875 RAD 0.0078125 + txt204 +TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 0.875 APEX 0.75 0.734531 0.875 RAD 0.0078125 + txt204 +TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.625 0.890469 APEX 0.75 0.625 0.984531 RAD 0.0078125 + txt204 +TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.625 1 RAD 0.03125 + txt204 +TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.625 1 APEX 0.859531 0.625 1 RAD 0.0078125 + txt204 +TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.640469 1 APEX 0.75 0.734531 1 RAD 0.0078125 + txt204 +TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0 RAD 0.03125 + txt204 +TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0 APEX 0.859531 0.75 0 RAD 0.0078125 + txt204 +TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0 APEX 0.75 0.859531 0 RAD 0.0078125 + txt204 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.0154687 APEX 0.75 0.75 0.109531 RAD 0.0078125 + txt205 +TEXDEF txt205 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0.125 RAD 0.03125 + txt205 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0.125 APEX 0.859531 0.75 0.125 RAD 0.0078125 + txt205 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0.125 APEX 0.75 0.859531 0.125 RAD 0.0078125 + txt205 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.140469 APEX 0.75 0.75 0.234531 RAD 0.0078125 + txt205 +TEXDEF txt205 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0.25 RAD 0.03125 + txt205 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0.25 APEX 0.859531 0.75 0.25 RAD 0.0078125 + txt205 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0.25 APEX 0.75 0.859531 0.25 RAD 0.0078125 + txt205 +TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.265469 APEX 0.75 0.75 0.359531 RAD 0.0078125 + txt205 +TEXDEF txt205 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0.375 RAD 0.03125 + txt205 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0.375 APEX 0.859531 0.75 0.375 RAD 0.0078125 + txt206 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0.375 APEX 0.75 0.859531 0.375 RAD 0.0078125 + txt206 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.390469 APEX 0.75 0.75 0.484531 RAD 0.0078125 + txt206 +TEXDEF txt206 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0.5 RAD 0.03125 + txt206 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0.5 APEX 0.859531 0.75 0.5 RAD 0.0078125 + txt206 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0.5 APEX 0.75 0.859531 0.5 RAD 0.0078125 + txt206 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.515469 APEX 0.75 0.75 0.609531 RAD 0.0078125 + txt206 +TEXDEF txt206 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0.625 RAD 0.03125 + txt206 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0.625 APEX 0.859531 0.75 0.625 RAD 0.0078125 + txt206 +TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0.625 APEX 0.75 0.859531 0.625 RAD 0.0078125 + txt206 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.640469 APEX 0.75 0.75 0.734531 RAD 0.0078125 + txt207 +TEXDEF txt207 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0.75 RAD 0.03125 + txt207 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0.75 APEX 0.859531 0.75 0.75 RAD 0.0078125 + txt207 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0.75 APEX 0.75 0.859531 0.75 RAD 0.0078125 + txt207 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.765469 APEX 0.75 0.75 0.859531 RAD 0.0078125 + txt207 +TEXDEF txt207 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 0.875 RAD 0.03125 + txt207 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 0.875 APEX 0.859531 0.75 0.875 RAD 0.0078125 + txt207 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 0.875 APEX 0.75 0.859531 0.875 RAD 0.0078125 + txt207 +TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.75 0.890469 APEX 0.75 0.75 0.984531 RAD 0.0078125 + txt207 +TEXDEF txt207 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.75 1 RAD 0.03125 + txt207 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.75 1 APEX 0.859531 0.75 1 RAD 0.0078125 + txt208 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.765469 1 APEX 0.75 0.859531 1 RAD 0.0078125 + txt208 +TEXDEF txt208 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0 RAD 0.03125 + txt208 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0 APEX 0.859531 0.875 0 RAD 0.0078125 + txt208 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0 APEX 0.75 0.984531 0 RAD 0.0078125 + txt208 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.0154687 APEX 0.75 0.875 0.109531 RAD 0.0078125 + txt208 +TEXDEF txt208 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0.125 RAD 0.03125 + txt208 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0.125 APEX 0.859531 0.875 0.125 RAD 0.0078125 + txt208 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0.125 APEX 0.75 0.984531 0.125 RAD 0.0078125 + txt208 +TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.140469 APEX 0.75 0.875 0.234531 RAD 0.0078125 + txt208 +TEXDEF txt209 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0.25 RAD 0.03125 + txt209 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0.25 APEX 0.859531 0.875 0.25 RAD 0.0078125 + txt209 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0.25 APEX 0.75 0.984531 0.25 RAD 0.0078125 + txt209 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.265469 APEX 0.75 0.875 0.359531 RAD 0.0078125 + txt209 +TEXDEF txt209 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0.375 RAD 0.03125 + txt209 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0.375 APEX 0.859531 0.875 0.375 RAD 0.0078125 + txt209 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0.375 APEX 0.75 0.984531 0.375 RAD 0.0078125 + txt209 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.390469 APEX 0.75 0.875 0.484531 RAD 0.0078125 + txt209 +TEXDEF txt209 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0.5 RAD 0.03125 + txt209 +TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0.5 APEX 0.859531 0.875 0.5 RAD 0.0078125 + txt209 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0.5 APEX 0.75 0.984531 0.5 RAD 0.0078125 + txt210 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.515469 APEX 0.75 0.875 0.609531 RAD 0.0078125 + txt210 +TEXDEF txt210 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0.625 RAD 0.03125 + txt210 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0.625 APEX 0.859531 0.875 0.625 RAD 0.0078125 + txt210 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0.625 APEX 0.75 0.984531 0.625 RAD 0.0078125 + txt210 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.640469 APEX 0.75 0.875 0.734531 RAD 0.0078125 + txt210 +TEXDEF txt210 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0.75 RAD 0.03125 + txt210 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0.75 APEX 0.859531 0.875 0.75 RAD 0.0078125 + txt210 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0.75 APEX 0.75 0.984531 0.75 RAD 0.0078125 + txt210 +TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.765469 APEX 0.75 0.875 0.859531 RAD 0.0078125 + txt210 +TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 0.875 RAD 0.03125 + txt211 +TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 0.875 APEX 0.859531 0.875 0.875 RAD 0.0078125 + txt211 +TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 0.875 APEX 0.75 0.984531 0.875 RAD 0.0078125 + txt211 +TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.875 0.890469 APEX 0.75 0.875 0.984531 RAD 0.0078125 + txt211 +TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 0.875 1 RAD 0.03125 + txt211 +TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 0.875 1 APEX 0.859531 0.875 1 RAD 0.0078125 + txt211 +TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 0.890469 1 APEX 0.75 0.984531 1 RAD 0.0078125 + txt211 +TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0 RAD 0.03125 + txt211 +TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0 APEX 0.859531 1 0 RAD 0.0078125 + txt211 +TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.0154687 APEX 0.75 1 0.109531 RAD 0.0078125 + txt211 +TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0.125 RAD 0.03125 + txt212 +TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0.125 APEX 0.859531 1 0.125 RAD 0.0078125 + txt212 +TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.140469 APEX 0.75 1 0.234531 RAD 0.0078125 + txt212 +TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0.25 RAD 0.03125 + txt212 +TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0.25 APEX 0.859531 1 0.25 RAD 0.0078125 + txt212 +TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.265469 APEX 0.75 1 0.359531 RAD 0.0078125 + txt212 +TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0.375 RAD 0.03125 + txt212 +TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0.375 APEX 0.859531 1 0.375 RAD 0.0078125 + txt212 +TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.390469 APEX 0.75 1 0.484531 RAD 0.0078125 + txt212 +TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0.5 RAD 0.03125 + txt212 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0.5 APEX 0.859531 1 0.5 RAD 0.0078125 + txt213 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.515469 APEX 0.75 1 0.609531 RAD 0.0078125 + txt213 +TEXDEF txt213 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0.625 RAD 0.03125 + txt213 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0.625 APEX 0.859531 1 0.625 RAD 0.0078125 + txt213 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.640469 APEX 0.75 1 0.734531 RAD 0.0078125 + txt213 +TEXDEF txt213 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0.75 RAD 0.03125 + txt213 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0.75 APEX 0.859531 1 0.75 RAD 0.0078125 + txt213 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.765469 APEX 0.75 1 0.859531 RAD 0.0078125 + txt213 +TEXDEF txt213 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 0.875 RAD 0.03125 + txt213 +TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 0.875 APEX 0.859531 1 0.875 RAD 0.0078125 + txt213 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.75 1 0.890469 APEX 0.75 1 0.984531 RAD 0.0078125 + txt214 +TEXDEF txt214 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.75 1 1 RAD 0.03125 + txt214 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.765469 1 1 APEX 0.859531 1 1 RAD 0.0078125 + txt214 +TEXDEF txt214 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0 RAD 0.03125 + txt214 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0 APEX 0.984531 0 0 RAD 0.0078125 + txt214 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0 APEX 0.875 0.109531 0 RAD 0.0078125 + txt214 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.0154687 APEX 0.875 0 0.109531 RAD 0.0078125 + txt214 +TEXDEF txt214 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0.125 RAD 0.03125 + txt214 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0.125 APEX 0.984531 0 0.125 RAD 0.0078125 + txt214 +TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0.125 APEX 0.875 0.109531 0.125 RAD 0.0078125 + txt214 +TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.140469 APEX 0.875 0 0.234531 RAD 0.0078125 + txt215 +TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0.25 RAD 0.03125 + txt215 +TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0.25 APEX 0.984531 0 0.25 RAD 0.0078125 + txt215 +TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0.25 APEX 0.875 0.109531 0.25 RAD 0.0078125 + txt215 +TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.265469 APEX 0.875 0 0.359531 RAD 0.0078125 + txt215 +TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0.375 RAD 0.03125 + txt215 +TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0.375 APEX 0.984531 0 0.375 RAD 0.0078125 + txt215 +TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0.375 APEX 0.875 0.109531 0.375 RAD 0.0078125 + txt215 +TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.390469 APEX 0.875 0 0.484531 RAD 0.0078125 + txt215 +TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0.5 RAD 0.03125 + txt215 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0.5 APEX 0.984531 0 0.5 RAD 0.0078125 + txt216 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0.5 APEX 0.875 0.109531 0.5 RAD 0.0078125 + txt216 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.515469 APEX 0.875 0 0.609531 RAD 0.0078125 + txt216 +TEXDEF txt216 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0.625 RAD 0.03125 + txt216 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0.625 APEX 0.984531 0 0.625 RAD 0.0078125 + txt216 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0.625 APEX 0.875 0.109531 0.625 RAD 0.0078125 + txt216 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.640469 APEX 0.875 0 0.734531 RAD 0.0078125 + txt216 +TEXDEF txt216 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0.75 RAD 0.03125 + txt216 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0.75 APEX 0.984531 0 0.75 RAD 0.0078125 + txt216 +TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0.75 APEX 0.875 0.109531 0.75 RAD 0.0078125 + txt216 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.765469 APEX 0.875 0 0.859531 RAD 0.0078125 + txt217 +TEXDEF txt217 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 0.875 RAD 0.03125 + txt217 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 0.875 APEX 0.984531 0 0.875 RAD 0.0078125 + txt217 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 0.875 APEX 0.875 0.109531 0.875 RAD 0.0078125 + txt217 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0 0.890469 APEX 0.875 0 0.984531 RAD 0.0078125 + txt217 +TEXDEF txt217 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0 1 RAD 0.03125 + txt217 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0 1 APEX 0.984531 0 1 RAD 0.0078125 + txt217 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.0154687 1 APEX 0.875 0.109531 1 RAD 0.0078125 + txt217 +TEXDEF txt217 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0 RAD 0.03125 + txt217 +TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0 APEX 0.984531 0.125 0 RAD 0.0078125 + txt217 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0 APEX 0.875 0.234531 0 RAD 0.0078125 + txt218 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.0154687 APEX 0.875 0.125 0.109531 RAD 0.0078125 + txt218 +TEXDEF txt218 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0.125 RAD 0.03125 + txt218 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0.125 APEX 0.984531 0.125 0.125 RAD 0.0078125 + txt218 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0.125 APEX 0.875 0.234531 0.125 RAD 0.0078125 + txt218 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.140469 APEX 0.875 0.125 0.234531 RAD 0.0078125 + txt218 +TEXDEF txt218 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0.25 RAD 0.03125 + txt218 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0.25 APEX 0.984531 0.125 0.25 RAD 0.0078125 + txt218 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0.25 APEX 0.875 0.234531 0.25 RAD 0.0078125 + txt218 +TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.265469 APEX 0.875 0.125 0.359531 RAD 0.0078125 + txt218 +TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0.375 RAD 0.03125 + txt219 +TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0.375 APEX 0.984531 0.125 0.375 RAD 0.0078125 + txt219 +TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0.375 APEX 0.875 0.234531 0.375 RAD 0.0078125 + txt219 +TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.390469 APEX 0.875 0.125 0.484531 RAD 0.0078125 + txt219 +TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0.5 RAD 0.03125 + txt219 +TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0.5 APEX 0.984531 0.125 0.5 RAD 0.0078125 + txt219 +TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0.5 APEX 0.875 0.234531 0.5 RAD 0.0078125 + txt219 +TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.515469 APEX 0.875 0.125 0.609531 RAD 0.0078125 + txt219 +TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0.625 RAD 0.03125 + txt219 +TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0.625 APEX 0.984531 0.125 0.625 RAD 0.0078125 + txt219 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0.625 APEX 0.875 0.234531 0.625 RAD 0.0078125 + txt220 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.640469 APEX 0.875 0.125 0.734531 RAD 0.0078125 + txt220 +TEXDEF txt220 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0.75 RAD 0.03125 + txt220 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0.75 APEX 0.984531 0.125 0.75 RAD 0.0078125 + txt220 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0.75 APEX 0.875 0.234531 0.75 RAD 0.0078125 + txt220 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.765469 APEX 0.875 0.125 0.859531 RAD 0.0078125 + txt220 +TEXDEF txt220 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 0.875 RAD 0.03125 + txt220 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 0.875 APEX 0.984531 0.125 0.875 RAD 0.0078125 + txt220 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 0.875 APEX 0.875 0.234531 0.875 RAD 0.0078125 + txt220 +TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.125 0.890469 APEX 0.875 0.125 0.984531 RAD 0.0078125 + txt220 +TEXDEF txt221 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.125 1 RAD 0.03125 + txt221 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.125 1 APEX 0.984531 0.125 1 RAD 0.0078125 + txt221 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.140469 1 APEX 0.875 0.234531 1 RAD 0.0078125 + txt221 +TEXDEF txt221 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0 RAD 0.03125 + txt221 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0 APEX 0.984531 0.25 0 RAD 0.0078125 + txt221 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0 APEX 0.875 0.359531 0 RAD 0.0078125 + txt221 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.0154687 APEX 0.875 0.25 0.109531 RAD 0.0078125 + txt221 +TEXDEF txt221 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0.125 RAD 0.03125 + txt221 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0.125 APEX 0.984531 0.25 0.125 RAD 0.0078125 + txt221 +TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0.125 APEX 0.875 0.359531 0.125 RAD 0.0078125 + txt221 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.140469 APEX 0.875 0.25 0.234531 RAD 0.0078125 + txt222 +TEXDEF txt222 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0.25 RAD 0.03125 + txt222 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0.25 APEX 0.984531 0.25 0.25 RAD 0.0078125 + txt222 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0.25 APEX 0.875 0.359531 0.25 RAD 0.0078125 + txt222 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.265469 APEX 0.875 0.25 0.359531 RAD 0.0078125 + txt222 +TEXDEF txt222 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0.375 RAD 0.03125 + txt222 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0.375 APEX 0.984531 0.25 0.375 RAD 0.0078125 + txt222 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0.375 APEX 0.875 0.359531 0.375 RAD 0.0078125 + txt222 +TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.390469 APEX 0.875 0.25 0.484531 RAD 0.0078125 + txt222 +TEXDEF txt222 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0.5 RAD 0.03125 + txt222 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0.5 APEX 0.984531 0.25 0.5 RAD 0.0078125 + txt223 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0.5 APEX 0.875 0.359531 0.5 RAD 0.0078125 + txt223 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.515469 APEX 0.875 0.25 0.609531 RAD 0.0078125 + txt223 +TEXDEF txt223 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0.625 RAD 0.03125 + txt223 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0.625 APEX 0.984531 0.25 0.625 RAD 0.0078125 + txt223 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0.625 APEX 0.875 0.359531 0.625 RAD 0.0078125 + txt223 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.640469 APEX 0.875 0.25 0.734531 RAD 0.0078125 + txt223 +TEXDEF txt223 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0.75 RAD 0.03125 + txt223 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0.75 APEX 0.984531 0.25 0.75 RAD 0.0078125 + txt223 +TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0.75 APEX 0.875 0.359531 0.75 RAD 0.0078125 + txt223 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.765469 APEX 0.875 0.25 0.859531 RAD 0.0078125 + txt224 +TEXDEF txt224 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 0.875 RAD 0.03125 + txt224 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 0.875 APEX 0.984531 0.25 0.875 RAD 0.0078125 + txt224 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 0.875 APEX 0.875 0.359531 0.875 RAD 0.0078125 + txt224 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.25 0.890469 APEX 0.875 0.25 0.984531 RAD 0.0078125 + txt224 +TEXDEF txt224 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.25 1 RAD 0.03125 + txt224 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.25 1 APEX 0.984531 0.25 1 RAD 0.0078125 + txt224 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.265469 1 APEX 0.875 0.359531 1 RAD 0.0078125 + txt224 +TEXDEF txt224 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0 RAD 0.03125 + txt224 +TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0 APEX 0.984531 0.375 0 RAD 0.0078125 + txt224 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0 APEX 0.875 0.484531 0 RAD 0.0078125 + txt225 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.0154687 APEX 0.875 0.375 0.109531 RAD 0.0078125 + txt225 +TEXDEF txt225 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0.125 RAD 0.03125 + txt225 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0.125 APEX 0.984531 0.375 0.125 RAD 0.0078125 + txt225 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0.125 APEX 0.875 0.484531 0.125 RAD 0.0078125 + txt225 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.140469 APEX 0.875 0.375 0.234531 RAD 0.0078125 + txt225 +TEXDEF txt225 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0.25 RAD 0.03125 + txt225 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0.25 APEX 0.984531 0.375 0.25 RAD 0.0078125 + txt225 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0.25 APEX 0.875 0.484531 0.25 RAD 0.0078125 + txt225 +TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.265469 APEX 0.875 0.375 0.359531 RAD 0.0078125 + txt225 +TEXDEF txt226 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0.375 RAD 0.03125 + txt226 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0.375 APEX 0.984531 0.375 0.375 RAD 0.0078125 + txt226 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0.375 APEX 0.875 0.484531 0.375 RAD 0.0078125 + txt226 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.390469 APEX 0.875 0.375 0.484531 RAD 0.0078125 + txt226 +TEXDEF txt226 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0.5 RAD 0.03125 + txt226 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0.5 APEX 0.984531 0.375 0.5 RAD 0.0078125 + txt226 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0.5 APEX 0.875 0.484531 0.5 RAD 0.0078125 + txt226 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.515469 APEX 0.875 0.375 0.609531 RAD 0.0078125 + txt226 +TEXDEF txt226 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0.625 RAD 0.03125 + txt226 +TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0.625 APEX 0.984531 0.375 0.625 RAD 0.0078125 + txt226 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0.625 APEX 0.875 0.484531 0.625 RAD 0.0078125 + txt227 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.640469 APEX 0.875 0.375 0.734531 RAD 0.0078125 + txt227 +TEXDEF txt227 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0.75 RAD 0.03125 + txt227 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0.75 APEX 0.984531 0.375 0.75 RAD 0.0078125 + txt227 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0.75 APEX 0.875 0.484531 0.75 RAD 0.0078125 + txt227 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.765469 APEX 0.875 0.375 0.859531 RAD 0.0078125 + txt227 +TEXDEF txt227 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 0.875 RAD 0.03125 + txt227 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 0.875 APEX 0.984531 0.375 0.875 RAD 0.0078125 + txt227 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 0.875 APEX 0.875 0.484531 0.875 RAD 0.0078125 + txt227 +TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.375 0.890469 APEX 0.875 0.375 0.984531 RAD 0.0078125 + txt227 +TEXDEF txt228 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.375 1 RAD 0.03125 + txt228 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.375 1 APEX 0.984531 0.375 1 RAD 0.0078125 + txt228 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.390469 1 APEX 0.875 0.484531 1 RAD 0.0078125 + txt228 +TEXDEF txt228 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0 RAD 0.03125 + txt228 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0 APEX 0.984531 0.5 0 RAD 0.0078125 + txt228 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0 APEX 0.875 0.609531 0 RAD 0.0078125 + txt228 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.0154687 APEX 0.875 0.5 0.109531 RAD 0.0078125 + txt228 +TEXDEF txt228 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0.125 RAD 0.03125 + txt228 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0.125 APEX 0.984531 0.5 0.125 RAD 0.0078125 + txt228 +TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0.125 APEX 0.875 0.609531 0.125 RAD 0.0078125 + txt228 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.140469 APEX 0.875 0.5 0.234531 RAD 0.0078125 + txt229 +TEXDEF txt229 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0.25 RAD 0.03125 + txt229 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0.25 APEX 0.984531 0.5 0.25 RAD 0.0078125 + txt229 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0.25 APEX 0.875 0.609531 0.25 RAD 0.0078125 + txt229 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.265469 APEX 0.875 0.5 0.359531 RAD 0.0078125 + txt229 +TEXDEF txt229 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0.375 RAD 0.03125 + txt229 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0.375 APEX 0.984531 0.5 0.375 RAD 0.0078125 + txt229 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0.375 APEX 0.875 0.609531 0.375 RAD 0.0078125 + txt229 +TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.390469 APEX 0.875 0.5 0.484531 RAD 0.0078125 + txt229 +TEXDEF txt229 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0.5 RAD 0.03125 + txt229 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0.5 APEX 0.984531 0.5 0.5 RAD 0.0078125 + txt230 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0.5 APEX 0.875 0.609531 0.5 RAD 0.0078125 + txt230 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.515469 APEX 0.875 0.5 0.609531 RAD 0.0078125 + txt230 +TEXDEF txt230 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0.625 RAD 0.03125 + txt230 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0.625 APEX 0.984531 0.5 0.625 RAD 0.0078125 + txt230 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0.625 APEX 0.875 0.609531 0.625 RAD 0.0078125 + txt230 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.640469 APEX 0.875 0.5 0.734531 RAD 0.0078125 + txt230 +TEXDEF txt230 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0.75 RAD 0.03125 + txt230 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0.75 APEX 0.984531 0.5 0.75 RAD 0.0078125 + txt230 +TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0.75 APEX 0.875 0.609531 0.75 RAD 0.0078125 + txt230 +TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.765469 APEX 0.875 0.5 0.859531 RAD 0.0078125 + txt231 +TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 0.875 RAD 0.03125 + txt231 +TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 0.875 APEX 0.984531 0.5 0.875 RAD 0.0078125 + txt231 +TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 0.875 APEX 0.875 0.609531 0.875 RAD 0.0078125 + txt231 +TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.5 0.890469 APEX 0.875 0.5 0.984531 RAD 0.0078125 + txt231 +TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.5 1 RAD 0.03125 + txt231 +TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.5 1 APEX 0.984531 0.5 1 RAD 0.0078125 + txt231 +TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.515469 1 APEX 0.875 0.609531 1 RAD 0.0078125 + txt231 +TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0 RAD 0.03125 + txt231 +TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0 APEX 0.984531 0.625 0 RAD 0.0078125 + txt231 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0 APEX 0.875 0.734531 0 RAD 0.0078125 + txt232 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.0154687 APEX 0.875 0.625 0.109531 RAD 0.0078125 + txt232 +TEXDEF txt232 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0.125 RAD 0.03125 + txt232 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0.125 APEX 0.984531 0.625 0.125 RAD 0.0078125 + txt232 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0.125 APEX 0.875 0.734531 0.125 RAD 0.0078125 + txt232 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.140469 APEX 0.875 0.625 0.234531 RAD 0.0078125 + txt232 +TEXDEF txt232 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0.25 RAD 0.03125 + txt232 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0.25 APEX 0.984531 0.625 0.25 RAD 0.0078125 + txt232 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0.25 APEX 0.875 0.734531 0.25 RAD 0.0078125 + txt232 +TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.265469 APEX 0.875 0.625 0.359531 RAD 0.0078125 + txt232 +TEXDEF txt233 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0.375 RAD 0.03125 + txt233 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0.375 APEX 0.984531 0.625 0.375 RAD 0.0078125 + txt233 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0.375 APEX 0.875 0.734531 0.375 RAD 0.0078125 + txt233 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.390469 APEX 0.875 0.625 0.484531 RAD 0.0078125 + txt233 +TEXDEF txt233 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0.5 RAD 0.03125 + txt233 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0.5 APEX 0.984531 0.625 0.5 RAD 0.0078125 + txt233 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0.5 APEX 0.875 0.734531 0.5 RAD 0.0078125 + txt233 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.515469 APEX 0.875 0.625 0.609531 RAD 0.0078125 + txt233 +TEXDEF txt233 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0.625 RAD 0.03125 + txt233 +TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0.625 APEX 0.984531 0.625 0.625 RAD 0.0078125 + txt233 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0.625 APEX 0.875 0.734531 0.625 RAD 0.0078125 + txt234 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.640469 APEX 0.875 0.625 0.734531 RAD 0.0078125 + txt234 +TEXDEF txt234 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0.75 RAD 0.03125 + txt234 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0.75 APEX 0.984531 0.625 0.75 RAD 0.0078125 + txt234 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0.75 APEX 0.875 0.734531 0.75 RAD 0.0078125 + txt234 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.765469 APEX 0.875 0.625 0.859531 RAD 0.0078125 + txt234 +TEXDEF txt234 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 0.875 RAD 0.03125 + txt234 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 0.875 APEX 0.984531 0.625 0.875 RAD 0.0078125 + txt234 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 0.875 APEX 0.875 0.734531 0.875 RAD 0.0078125 + txt234 +TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.625 0.890469 APEX 0.875 0.625 0.984531 RAD 0.0078125 + txt234 +TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.625 1 RAD 0.03125 + txt235 +TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.625 1 APEX 0.984531 0.625 1 RAD 0.0078125 + txt235 +TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.640469 1 APEX 0.875 0.734531 1 RAD 0.0078125 + txt235 +TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0 RAD 0.03125 + txt235 +TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0 APEX 0.984531 0.75 0 RAD 0.0078125 + txt235 +TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0 APEX 0.875 0.859531 0 RAD 0.0078125 + txt235 +TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.0154687 APEX 0.875 0.75 0.109531 RAD 0.0078125 + txt235 +TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0.125 RAD 0.03125 + txt235 +TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0.125 APEX 0.984531 0.75 0.125 RAD 0.0078125 + txt235 +TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0.125 APEX 0.875 0.859531 0.125 RAD 0.0078125 + txt235 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.140469 APEX 0.875 0.75 0.234531 RAD 0.0078125 + txt236 +TEXDEF txt236 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0.25 RAD 0.03125 + txt236 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0.25 APEX 0.984531 0.75 0.25 RAD 0.0078125 + txt236 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0.25 APEX 0.875 0.859531 0.25 RAD 0.0078125 + txt236 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.265469 APEX 0.875 0.75 0.359531 RAD 0.0078125 + txt236 +TEXDEF txt236 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0.375 RAD 0.03125 + txt236 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0.375 APEX 0.984531 0.75 0.375 RAD 0.0078125 + txt236 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0.375 APEX 0.875 0.859531 0.375 RAD 0.0078125 + txt236 +TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.390469 APEX 0.875 0.75 0.484531 RAD 0.0078125 + txt236 +TEXDEF txt236 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0.5 RAD 0.03125 + txt236 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0.5 APEX 0.984531 0.75 0.5 RAD 0.0078125 + txt237 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0.5 APEX 0.875 0.859531 0.5 RAD 0.0078125 + txt237 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.515469 APEX 0.875 0.75 0.609531 RAD 0.0078125 + txt237 +TEXDEF txt237 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0.625 RAD 0.03125 + txt237 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0.625 APEX 0.984531 0.75 0.625 RAD 0.0078125 + txt237 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0.625 APEX 0.875 0.859531 0.625 RAD 0.0078125 + txt237 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.640469 APEX 0.875 0.75 0.734531 RAD 0.0078125 + txt237 +TEXDEF txt237 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0.75 RAD 0.03125 + txt237 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0.75 APEX 0.984531 0.75 0.75 RAD 0.0078125 + txt237 +TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0.75 APEX 0.875 0.859531 0.75 RAD 0.0078125 + txt237 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.765469 APEX 0.875 0.75 0.859531 RAD 0.0078125 + txt238 +TEXDEF txt238 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 0.875 RAD 0.03125 + txt238 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 0.875 APEX 0.984531 0.75 0.875 RAD 0.0078125 + txt238 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 0.875 APEX 0.875 0.859531 0.875 RAD 0.0078125 + txt238 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.75 0.890469 APEX 0.875 0.75 0.984531 RAD 0.0078125 + txt238 +TEXDEF txt238 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.75 1 RAD 0.03125 + txt238 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.75 1 APEX 0.984531 0.75 1 RAD 0.0078125 + txt238 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.765469 1 APEX 0.875 0.859531 1 RAD 0.0078125 + txt238 +TEXDEF txt238 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0 RAD 0.03125 + txt238 +TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0 APEX 0.984531 0.875 0 RAD 0.0078125 + txt238 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0 APEX 0.875 0.984531 0 RAD 0.0078125 + txt239 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.0154687 APEX 0.875 0.875 0.109531 RAD 0.0078125 + txt239 +TEXDEF txt239 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0.125 RAD 0.03125 + txt239 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0.125 APEX 0.984531 0.875 0.125 RAD 0.0078125 + txt239 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0.125 APEX 0.875 0.984531 0.125 RAD 0.0078125 + txt239 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.140469 APEX 0.875 0.875 0.234531 RAD 0.0078125 + txt239 +TEXDEF txt239 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0.25 RAD 0.03125 + txt239 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0.25 APEX 0.984531 0.875 0.25 RAD 0.0078125 + txt239 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0.25 APEX 0.875 0.984531 0.25 RAD 0.0078125 + txt239 +TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.265469 APEX 0.875 0.875 0.359531 RAD 0.0078125 + txt239 +TEXDEF txt240 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0.375 RAD 0.03125 + txt240 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0.375 APEX 0.984531 0.875 0.375 RAD 0.0078125 + txt240 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0.375 APEX 0.875 0.984531 0.375 RAD 0.0078125 + txt240 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.390469 APEX 0.875 0.875 0.484531 RAD 0.0078125 + txt240 +TEXDEF txt240 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0.5 RAD 0.03125 + txt240 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0.5 APEX 0.984531 0.875 0.5 RAD 0.0078125 + txt240 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0.5 APEX 0.875 0.984531 0.5 RAD 0.0078125 + txt240 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.515469 APEX 0.875 0.875 0.609531 RAD 0.0078125 + txt240 +TEXDEF txt240 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0.625 RAD 0.03125 + txt240 +TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0.625 APEX 0.984531 0.875 0.625 RAD 0.0078125 + txt240 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0.625 APEX 0.875 0.984531 0.625 RAD 0.0078125 + txt241 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.640469 APEX 0.875 0.875 0.734531 RAD 0.0078125 + txt241 +TEXDEF txt241 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0.75 RAD 0.03125 + txt241 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0.75 APEX 0.984531 0.875 0.75 RAD 0.0078125 + txt241 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0.75 APEX 0.875 0.984531 0.75 RAD 0.0078125 + txt241 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.765469 APEX 0.875 0.875 0.859531 RAD 0.0078125 + txt241 +TEXDEF txt241 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 0.875 RAD 0.03125 + txt241 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 0.875 APEX 0.984531 0.875 0.875 RAD 0.0078125 + txt241 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 0.875 APEX 0.875 0.984531 0.875 RAD 0.0078125 + txt241 +TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.875 0.890469 APEX 0.875 0.875 0.984531 RAD 0.0078125 + txt241 +TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 0.875 1 RAD 0.03125 + txt242 +TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 0.875 1 APEX 0.984531 0.875 1 RAD 0.0078125 + txt242 +TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 0.890469 1 APEX 0.875 0.984531 1 RAD 0.0078125 + txt242 +TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0 RAD 0.03125 + txt242 +TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0 APEX 0.984531 1 0 RAD 0.0078125 + txt242 +TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.0154687 APEX 0.875 1 0.109531 RAD 0.0078125 + txt242 +TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0.125 RAD 0.03125 + txt242 +TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0.125 APEX 0.984531 1 0.125 RAD 0.0078125 + txt242 +TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.140469 APEX 0.875 1 0.234531 RAD 0.0078125 + txt242 +TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0.25 RAD 0.03125 + txt242 +TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0.25 APEX 0.984531 1 0.25 RAD 0.0078125 + txt243 +TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.265469 APEX 0.875 1 0.359531 RAD 0.0078125 + txt243 +TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0.375 RAD 0.03125 + txt243 +TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0.375 APEX 0.984531 1 0.375 RAD 0.0078125 + txt243 +TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.390469 APEX 0.875 1 0.484531 RAD 0.0078125 + txt243 +TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0.5 RAD 0.03125 + txt243 +TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0.5 APEX 0.984531 1 0.5 RAD 0.0078125 + txt243 +TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.515469 APEX 0.875 1 0.609531 RAD 0.0078125 + txt243 +TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0.625 RAD 0.03125 + txt243 +TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0.625 APEX 0.984531 1 0.625 RAD 0.0078125 + txt243 +TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.640469 APEX 0.875 1 0.734531 RAD 0.0078125 + txt244 +TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0.75 RAD 0.03125 + txt244 +TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0.75 APEX 0.984531 1 0.75 RAD 0.0078125 + txt244 +TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.765469 APEX 0.875 1 0.859531 RAD 0.0078125 + txt244 +TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 0.875 RAD 0.03125 + txt244 +TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 0.875 APEX 0.984531 1 0.875 RAD 0.0078125 + txt244 +TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 0.875 1 0.890469 APEX 0.875 1 0.984531 RAD 0.0078125 + txt244 +TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 0.875 1 1 RAD 0.03125 + txt244 +TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.9 0.1 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 0.890469 1 1 APEX 0.984531 1 1 RAD 0.0078125 + txt244 +TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0 RAD 0.03125 + txt244 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0 APEX 1 0.109531 0 RAD 0.0078125 + txt245 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.0154687 APEX 1 0 0.109531 RAD 0.0078125 + txt245 +TEXDEF txt245 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0.125 RAD 0.03125 + txt245 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0.125 APEX 1 0.109531 0.125 RAD 0.0078125 + txt245 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.140469 APEX 1 0 0.234531 RAD 0.0078125 + txt245 +TEXDEF txt245 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0.25 RAD 0.03125 + txt245 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0.25 APEX 1 0.109531 0.25 RAD 0.0078125 + txt245 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.265469 APEX 1 0 0.359531 RAD 0.0078125 + txt245 +TEXDEF txt245 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0.375 RAD 0.03125 + txt245 +TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0.375 APEX 1 0.109531 0.375 RAD 0.0078125 + txt245 +TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.390469 APEX 1 0 0.484531 RAD 0.0078125 + txt246 +TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0.5 RAD 0.03125 + txt246 +TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0.5 APEX 1 0.109531 0.5 RAD 0.0078125 + txt246 +TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.515469 APEX 1 0 0.609531 RAD 0.0078125 + txt246 +TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0.625 RAD 0.03125 + txt246 +TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0.625 APEX 1 0.109531 0.625 RAD 0.0078125 + txt246 +TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.640469 APEX 1 0 0.734531 RAD 0.0078125 + txt246 +TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0.75 RAD 0.03125 + txt246 +TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0.75 APEX 1 0.109531 0.75 RAD 0.0078125 + txt246 +TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.765469 APEX 1 0 0.859531 RAD 0.0078125 + txt246 +TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 0.875 RAD 0.03125 + txt247 +TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 0.875 APEX 1 0.109531 0.875 RAD 0.0078125 + txt247 +TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0 0.890469 APEX 1 0 0.984531 RAD 0.0078125 + txt247 +TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0 1 RAD 0.03125 + txt247 +TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.0154687 1 APEX 1 0.109531 1 RAD 0.0078125 + txt247 +TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0 RAD 0.03125 + txt247 +TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0 APEX 1 0.234531 0 RAD 0.0078125 + txt247 +TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.0154687 APEX 1 0.125 0.109531 RAD 0.0078125 + txt247 +TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0.125 RAD 0.03125 + txt247 +TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0.125 APEX 1 0.234531 0.125 RAD 0.0078125 + txt247 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.140469 APEX 1 0.125 0.234531 RAD 0.0078125 + txt248 +TEXDEF txt248 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0.25 RAD 0.03125 + txt248 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0.25 APEX 1 0.234531 0.25 RAD 0.0078125 + txt248 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.265469 APEX 1 0.125 0.359531 RAD 0.0078125 + txt248 +TEXDEF txt248 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0.375 RAD 0.03125 + txt248 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0.375 APEX 1 0.234531 0.375 RAD 0.0078125 + txt248 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.390469 APEX 1 0.125 0.484531 RAD 0.0078125 + txt248 +TEXDEF txt248 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0.5 RAD 0.03125 + txt248 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0.5 APEX 1 0.234531 0.5 RAD 0.0078125 + txt248 +TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.515469 APEX 1 0.125 0.609531 RAD 0.0078125 + txt248 +TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0.625 RAD 0.03125 + txt249 +TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0.625 APEX 1 0.234531 0.625 RAD 0.0078125 + txt249 +TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.640469 APEX 1 0.125 0.734531 RAD 0.0078125 + txt249 +TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0.75 RAD 0.03125 + txt249 +TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0.75 APEX 1 0.234531 0.75 RAD 0.0078125 + txt249 +TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.765469 APEX 1 0.125 0.859531 RAD 0.0078125 + txt249 +TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 0.875 RAD 0.03125 + txt249 +TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 0.875 APEX 1 0.234531 0.875 RAD 0.0078125 + txt249 +TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.125 0.890469 APEX 1 0.125 0.984531 RAD 0.0078125 + txt249 +TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.125 1 RAD 0.03125 + txt249 +TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.140469 1 APEX 1 0.234531 1 RAD 0.0078125 + txt250 +TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0 RAD 0.03125 + txt250 +TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0 APEX 1 0.359531 0 RAD 0.0078125 + txt250 +TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.0154687 APEX 1 0.25 0.109531 RAD 0.0078125 + txt250 +TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0.125 RAD 0.03125 + txt250 +TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0.125 APEX 1 0.359531 0.125 RAD 0.0078125 + txt250 +TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.140469 APEX 1 0.25 0.234531 RAD 0.0078125 + txt250 +TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0.25 RAD 0.03125 + txt250 +TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0.25 APEX 1 0.359531 0.25 RAD 0.0078125 + txt250 +TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.265469 APEX 1 0.25 0.359531 RAD 0.0078125 + txt250 +TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0.375 RAD 0.03125 + txt251 +TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0.375 APEX 1 0.359531 0.375 RAD 0.0078125 + txt251 +TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.390469 APEX 1 0.25 0.484531 RAD 0.0078125 + txt251 +TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0.5 RAD 0.03125 + txt251 +TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0.5 APEX 1 0.359531 0.5 RAD 0.0078125 + txt251 +TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.515469 APEX 1 0.25 0.609531 RAD 0.0078125 + txt251 +TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0.625 RAD 0.03125 + txt251 +TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0.625 APEX 1 0.359531 0.625 RAD 0.0078125 + txt251 +TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.640469 APEX 1 0.25 0.734531 RAD 0.0078125 + txt251 +TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0.75 RAD 0.03125 + txt251 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0.75 APEX 1 0.359531 0.75 RAD 0.0078125 + txt252 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.765469 APEX 1 0.25 0.859531 RAD 0.0078125 + txt252 +TEXDEF txt252 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 0.875 RAD 0.03125 + txt252 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 0.875 APEX 1 0.359531 0.875 RAD 0.0078125 + txt252 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.25 0.890469 APEX 1 0.25 0.984531 RAD 0.0078125 + txt252 +TEXDEF txt252 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.25 1 RAD 0.03125 + txt252 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.265469 1 APEX 1 0.359531 1 RAD 0.0078125 + txt252 +TEXDEF txt252 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0 RAD 0.03125 + txt252 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0 APEX 1 0.484531 0 RAD 0.0078125 + txt252 +TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.0154687 APEX 1 0.375 0.109531 RAD 0.0078125 + txt252 +TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0.125 RAD 0.03125 + txt253 +TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0.125 APEX 1 0.484531 0.125 RAD 0.0078125 + txt253 +TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.140469 APEX 1 0.375 0.234531 RAD 0.0078125 + txt253 +TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0.25 RAD 0.03125 + txt253 +TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0.25 APEX 1 0.484531 0.25 RAD 0.0078125 + txt253 +TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.265469 APEX 1 0.375 0.359531 RAD 0.0078125 + txt253 +TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0.375 RAD 0.03125 + txt253 +TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0.375 APEX 1 0.484531 0.375 RAD 0.0078125 + txt253 +TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.390469 APEX 1 0.375 0.484531 RAD 0.0078125 + txt253 +TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0.5 RAD 0.03125 + txt253 +TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0.5 APEX 1 0.484531 0.5 RAD 0.0078125 + txt254 +TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.515469 APEX 1 0.375 0.609531 RAD 0.0078125 + txt254 +TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0.625 RAD 0.03125 + txt254 +TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0.625 APEX 1 0.484531 0.625 RAD 0.0078125 + txt254 +TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.640469 APEX 1 0.375 0.734531 RAD 0.0078125 + txt254 +TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0.75 RAD 0.03125 + txt254 +TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0.75 APEX 1 0.484531 0.75 RAD 0.0078125 + txt254 +TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.765469 APEX 1 0.375 0.859531 RAD 0.0078125 + txt254 +TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 0.875 RAD 0.03125 + txt254 +TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 0.875 APEX 1 0.484531 0.875 RAD 0.0078125 + txt254 +TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.375 0.890469 APEX 1 0.375 0.984531 RAD 0.0078125 + txt255 +TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.375 1 RAD 0.03125 + txt255 +TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.390469 1 APEX 1 0.484531 1 RAD 0.0078125 + txt255 +TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0 RAD 0.03125 + txt255 +TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0 APEX 1 0.609531 0 RAD 0.0078125 + txt255 +TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.0154687 APEX 1 0.5 0.109531 RAD 0.0078125 + txt255 +TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0.125 RAD 0.03125 + txt255 +TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0.125 APEX 1 0.609531 0.125 RAD 0.0078125 + txt255 +TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.140469 APEX 1 0.5 0.234531 RAD 0.0078125 + txt255 +TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0.25 RAD 0.03125 + txt255 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0.25 APEX 1 0.609531 0.25 RAD 0.0078125 + txt256 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.265469 APEX 1 0.5 0.359531 RAD 0.0078125 + txt256 +TEXDEF txt256 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0.375 RAD 0.03125 + txt256 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0.375 APEX 1 0.609531 0.375 RAD 0.0078125 + txt256 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.390469 APEX 1 0.5 0.484531 RAD 0.0078125 + txt256 +TEXDEF txt256 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0.5 RAD 0.03125 + txt256 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0.5 APEX 1 0.609531 0.5 RAD 0.0078125 + txt256 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.515469 APEX 1 0.5 0.609531 RAD 0.0078125 + txt256 +TEXDEF txt256 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0.625 RAD 0.03125 + txt256 +TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0.625 APEX 1 0.609531 0.625 RAD 0.0078125 + txt256 +TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.640469 APEX 1 0.5 0.734531 RAD 0.0078125 + txt257 +TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0.75 RAD 0.03125 + txt257 +TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0.75 APEX 1 0.609531 0.75 RAD 0.0078125 + txt257 +TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.765469 APEX 1 0.5 0.859531 RAD 0.0078125 + txt257 +TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 0.875 RAD 0.03125 + txt257 +TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 0.875 APEX 1 0.609531 0.875 RAD 0.0078125 + txt257 +TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.5 0.890469 APEX 1 0.5 0.984531 RAD 0.0078125 + txt257 +TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.5 1 RAD 0.03125 + txt257 +TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.515469 1 APEX 1 0.609531 1 RAD 0.0078125 + txt257 +TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0 RAD 0.03125 + txt257 +TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0 APEX 1 0.734531 0 RAD 0.0078125 + txt258 +TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.0154687 APEX 1 0.625 0.109531 RAD 0.0078125 + txt258 +TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0.125 RAD 0.03125 + txt258 +TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0.125 APEX 1 0.734531 0.125 RAD 0.0078125 + txt258 +TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.140469 APEX 1 0.625 0.234531 RAD 0.0078125 + txt258 +TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0.25 RAD 0.03125 + txt258 +TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0.25 APEX 1 0.734531 0.25 RAD 0.0078125 + txt258 +TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.265469 APEX 1 0.625 0.359531 RAD 0.0078125 + txt258 +TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0.375 RAD 0.03125 + txt258 +TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0.375 APEX 1 0.734531 0.375 RAD 0.0078125 + txt258 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.390469 APEX 1 0.625 0.484531 RAD 0.0078125 + txt259 +TEXDEF txt259 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0.5 RAD 0.03125 + txt259 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0.5 APEX 1 0.734531 0.5 RAD 0.0078125 + txt259 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.515469 APEX 1 0.625 0.609531 RAD 0.0078125 + txt259 +TEXDEF txt259 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0.625 RAD 0.03125 + txt259 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0.625 APEX 1 0.734531 0.625 RAD 0.0078125 + txt259 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.640469 APEX 1 0.625 0.734531 RAD 0.0078125 + txt259 +TEXDEF txt259 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0.75 RAD 0.03125 + txt259 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0.75 APEX 1 0.734531 0.75 RAD 0.0078125 + txt259 +TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.765469 APEX 1 0.625 0.859531 RAD 0.0078125 + txt259 +TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 0.875 RAD 0.03125 + txt260 +TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 0.875 APEX 1 0.734531 0.875 RAD 0.0078125 + txt260 +TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.625 0.890469 APEX 1 0.625 0.984531 RAD 0.0078125 + txt260 +TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.625 1 RAD 0.03125 + txt260 +TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.640469 1 APEX 1 0.734531 1 RAD 0.0078125 + txt260 +TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0 RAD 0.03125 + txt260 +TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0 APEX 1 0.859531 0 RAD 0.0078125 + txt260 +TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.0154687 APEX 1 0.75 0.109531 RAD 0.0078125 + txt260 +TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0.125 RAD 0.03125 + txt260 +TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0.125 APEX 1 0.859531 0.125 RAD 0.0078125 + txt260 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.140469 APEX 1 0.75 0.234531 RAD 0.0078125 + txt261 +TEXDEF txt261 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0.25 RAD 0.03125 + txt261 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0.25 APEX 1 0.859531 0.25 RAD 0.0078125 + txt261 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.265469 APEX 1 0.75 0.359531 RAD 0.0078125 + txt261 +TEXDEF txt261 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0.375 RAD 0.03125 + txt261 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0.375 APEX 1 0.859531 0.375 RAD 0.0078125 + txt261 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.390469 APEX 1 0.75 0.484531 RAD 0.0078125 + txt261 +TEXDEF txt261 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0.5 RAD 0.03125 + txt261 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0.5 APEX 1 0.859531 0.5 RAD 0.0078125 + txt261 +TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.515469 APEX 1 0.75 0.609531 RAD 0.0078125 + txt261 +TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0.625 RAD 0.03125 + txt262 +TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0.625 APEX 1 0.859531 0.625 RAD 0.0078125 + txt262 +TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.640469 APEX 1 0.75 0.734531 RAD 0.0078125 + txt262 +TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0.75 RAD 0.03125 + txt262 +TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0.75 APEX 1 0.859531 0.75 RAD 0.0078125 + txt262 +TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.765469 APEX 1 0.75 0.859531 RAD 0.0078125 + txt262 +TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 0.875 RAD 0.03125 + txt262 +TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 0.875 APEX 1 0.859531 0.875 RAD 0.0078125 + txt262 +TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.75 0.890469 APEX 1 0.75 0.984531 RAD 0.0078125 + txt262 +TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.75 1 RAD 0.03125 + txt262 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.765469 1 APEX 1 0.859531 1 RAD 0.0078125 + txt263 +TEXDEF txt263 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0 RAD 0.03125 + txt263 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0 APEX 1 0.984531 0 RAD 0.0078125 + txt263 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.0154687 APEX 1 0.875 0.109531 RAD 0.0078125 + txt263 +TEXDEF txt263 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0.125 RAD 0.03125 + txt263 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0.125 APEX 1 0.984531 0.125 RAD 0.0078125 + txt263 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.140469 APEX 1 0.875 0.234531 RAD 0.0078125 + txt263 +TEXDEF txt263 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0.25 RAD 0.03125 + txt263 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0.25 APEX 1 0.984531 0.25 RAD 0.0078125 + txt263 +TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.265469 APEX 1 0.875 0.359531 RAD 0.0078125 + txt263 +TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0.375 RAD 0.03125 + txt264 +TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0.375 APEX 1 0.984531 0.375 RAD 0.0078125 + txt264 +TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.390469 APEX 1 0.875 0.484531 RAD 0.0078125 + txt264 +TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0.5 RAD 0.03125 + txt264 +TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0.5 APEX 1 0.984531 0.5 RAD 0.0078125 + txt264 +TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.515469 APEX 1 0.875 0.609531 RAD 0.0078125 + txt264 +TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0.625 RAD 0.03125 + txt264 +TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0.625 APEX 1 0.984531 0.625 RAD 0.0078125 + txt264 +TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.640469 APEX 1 0.875 0.734531 RAD 0.0078125 + txt264 +TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0.75 RAD 0.03125 + txt264 +TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0.75 APEX 1 0.984531 0.75 RAD 0.0078125 + txt265 +TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.765469 APEX 1 0.875 0.859531 RAD 0.0078125 + txt265 +TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 0.875 RAD 0.03125 + txt265 +TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 0.875 APEX 1 0.984531 0.875 RAD 0.0078125 + txt265 +TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.875 0.890469 APEX 1 0.875 0.984531 RAD 0.0078125 + txt265 +TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 0.875 1 RAD 0.03125 + txt265 +TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.9 0.1 + TEXFUNC 0 + +FCYLINDER + BASE 1 0.890469 1 APEX 1 0.984531 1 RAD 0.0078125 + txt265 +TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0 RAD 0.03125 + txt265 +TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.0154687 APEX 1 1 0.109531 RAD 0.0078125 + txt265 +TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0.125 RAD 0.03125 + txt265 +TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.140469 APEX 1 1 0.234531 RAD 0.0078125 + txt266 +TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0.25 RAD 0.03125 + txt266 +TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.265469 APEX 1 1 0.359531 RAD 0.0078125 + txt266 +TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0.375 RAD 0.03125 + txt266 +TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.390469 APEX 1 1 0.484531 RAD 0.0078125 + txt266 +TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0.5 RAD 0.03125 + txt266 +TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.515469 APEX 1 1 0.609531 RAD 0.0078125 + txt266 +TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0.625 RAD 0.03125 + txt266 +TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.640469 APEX 1 1 0.734531 RAD 0.0078125 + txt266 +TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0.75 RAD 0.03125 + txt266 +TEXDEF txt267 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.765469 APEX 1 1 0.859531 RAD 0.0078125 + txt267 +TEXDEF txt267 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 0.875 RAD 0.03125 + txt267 +TEXDEF txt267 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1 + COLOR 0.1 0.1 0.9 + TEXFUNC 0 + +FCYLINDER + BASE 1 1 0.890469 APEX 1 1 0.984531 RAD 0.0078125 + txt267 +TEXDEF txt267 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 + COLOR 0.9 0.9 0.9 + TEXFUNC 0 + + SPHERE CENTER 1 1 1 RAD 0.03125 + txt267 + +END_SCENE diff --git a/examples/parallel_for/tachyon/dat/model2.dat b/examples/parallel_for/tachyon/dat/model2.dat new file mode 100644 index 0000000..c57ce49 --- /dev/null +++ b/examples/parallel_for/tachyon/dat/model2.dat @@ -0,0 +1,104 @@ +BEGIN_SCENE + OUTFILE /dev/null + RESOLUTION 512 512 + VERBOSE 0 + +CAMERA + ZOOM 1.0 + ASPECTRATIO 1.0 + ANTIALIASING 1 + RAYDEPTH 12 + CENTER 0.0 0.0 -5.0 + VIEWDIR 0.0 0.0 1.0 + UPDIR 0.0 1.0 0.0 +END_CAMERA + +LIGHT + CENTER -5.0 0.0 -4.0 + RAD 0.2 + COLOR 1.0 0.1 0.0 + +LIGHT + CENTER 4.0 5.0 -4.0 + RAD 0.2 + COLOR 0.0 0.1 1.0 + +LIGHT + CENTER 4.0 1.5 3.0 + RAD 0.2 + COLOR 0.5 0.5 0.5 + +TRI + V0 0.0 -4.0 12.0 + V1 4.0 -4.0 8.0 + V2 -4.0 -4.0 8.0 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.2 SPECULAR 0.7 OPACITY 1.0 + COLOR 1.0 1.0 1.0 + TEXFUNC 0 + +SPHERE + CENTER 0.0 0.0 5.0 + RAD 1.3 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.0 SPECULAR 0.9 OPACITY 1.0 + COLOR 1.0 1.0 1.0 + TEXFUNC 0 + +SPHERE + CENTER 1.0 0.0 4.3 + RAD 0.8 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + COLOR 0.3 0.3 1.0 + TEXFUNC 3 + CENTER 1.0 0.0 4.3 + ROTATE 0. 0.0 0.0 + SCALE 1.0 1.0 1.0 + +SPHERE + CENTER 0.0 2.0 8.0 + RAD 1.0 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + COLOR 1.0 0.0 1.0 + TEXFUNC 4 + CENTER 0.0 1.0 8.0 + ROTATE 0. 0.0 0.0 + SCALE 1.0 1.0 1.0 + +SPHERE + CENTER -1.0 -0.5 5.0 + RAD 1.0 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + COLOR 1.0 1.0 0.5 + TEXFUNC 6 + CENTER -1.0 -0.5 5.0 + ROTATE 0. 0.0 0.0 + SCALE 1.0 1.0 1.0 + +PLANE + CENTER 0.0 -5.0 0.0 + NORMAL 0.0 1.0 0.0 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + COLOR 1.0 1.0 1.0 + TEXFUNC 1 + CENTER 0.0 -5.0 0.0 + ROTATE 0. 0.0 0.0 + SCALE 1.0 1.0 1.0 + +PLANE + CENTER 0.0 0.0 15.0 + NORMAL 0.0 0.0 -1.0 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + COLOR 1.0 1.0 1.0 + TEXFUNC 3 + CENTER 0.0 0.0 15.0 + ROTATE 0. 0.0 0.0 + SCALE 1.0 1.0 1.0 + +END_SCENE + diff --git a/examples/parallel_for/tachyon/dat/teapot.dat b/examples/parallel_for/tachyon/dat/teapot.dat new file mode 100644 index 0000000..105afcd --- /dev/null +++ b/examples/parallel_for/tachyon/dat/teapot.dat @@ -0,0 +1,9279 @@ +BEGIN_SCENE + OUTFILE /dev/null + RESOLUTION 512 512 + VERBOSE 0 + +CAMERA + ZOOM 1.20711 +ASPECTRATIO 1.0 + ANTIALIASING 0 + RAYDEPTH 5 + CENTER 4.86 7.2 5.4 + VIEWDIR -0.475149 -0.703924 -0.527943 + UPDIR -0.29537 -0.437585 0.84928 + +END_CAMERA + +BACKGROUND 0.078 0.361 0.753 + +LIGHT CENTER -3.1 9.8 12.1 RAD 0.002 COLOR 0.5 0.5 0.5 + +LIGHT CENTER 11.3 5.1 8.8 RAD 0.002 COLOR 0.5 0.5 0.5 + +TEXDEF txt001 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 +PHONG METAL 0.5 PHONG_SIZE 4.81884 + COLOR 1 1 1 + TEXFUNC 0 + +TRI + V0 -4 -2.66667 0 V1 -2.66667 -2.66667 0 V2 -4 -1.33333 0 + txt001 +TRI + V0 -2.66667 -2.66667 0 V1 -2.66667 -1.33333 0 V2 -4 -1.33333 0 + txt001 +TRI + V0 -4 0 0 V1 -2.66667 0 0 V2 -4 1.33333 0 + txt001 +TRI + V0 -2.66667 0 0 V1 -2.66667 1.33333 0 V2 -4 1.33333 0 + txt001 +TRI + V0 -4 2.66667 0 V1 -2.66667 2.66667 0 V2 -4 4 0 + txt001 +TRI + V0 -2.66667 2.66667 0 V1 -2.66667 4 0 V2 -4 4 0 + txt001 +TRI + V0 -2.66667 -4 0 V1 -1.33333 -4 0 V2 -2.66667 -2.66667 0 + txt001 +TRI + V0 -1.33333 -4 0 V1 -1.33333 -2.66667 0 V2 -2.66667 -2.66667 0 + txt001 +TRI + V0 -2.66667 -1.33333 0 V1 -1.33333 -1.33333 0 V2 -2.66667 0 0 + txt001 +TRI + V0 -1.33333 -1.33333 0 V1 -1.33333 0 0 V2 -2.66667 0 0 + txt001 +TRI + V0 -2.66667 1.33333 0 V1 -1.33333 1.33333 0 V2 -2.66667 2.66667 0 + txt001 +TRI + V0 -1.33333 1.33333 0 V1 -1.33333 2.66667 0 V2 -2.66667 2.66667 0 + txt001 +TRI + V0 -1.33333 -2.66667 0 V1 0 -2.66667 0 V2 -1.33333 -1.33333 0 + txt001 +TRI + V0 0 -2.66667 0 V1 0 -1.33333 0 V2 -1.33333 -1.33333 0 + txt001 +TRI + V0 -1.33333 0 0 V1 0 0 0 V2 -1.33333 1.33333 0 + txt001 +TRI + V0 0 0 0 V1 0 1.33333 0 V2 -1.33333 1.33333 0 + txt001 +TRI + V0 -1.33333 2.66667 0 V1 0 2.66667 0 V2 -1.33333 4 0 + txt001 +TRI + V0 0 2.66667 0 V1 0 4 0 V2 -1.33333 4 0 + txt001 +TRI + V0 0 -4 0 V1 1.33333 -4 0 V2 0 -2.66667 0 + txt001 +TRI + V0 1.33333 -4 0 V1 1.33333 -2.66667 0 V2 0 -2.66667 0 + txt001 +TRI + V0 0 -1.33333 0 V1 1.33333 -1.33333 0 V2 0 0 0 + txt001 +TRI + V0 1.33333 -1.33333 0 V1 1.33333 0 0 V2 0 0 0 + txt001 +TRI + V0 0 1.33333 0 V1 1.33333 1.33333 0 V2 0 2.66667 0 + txt001 +TRI + V0 1.33333 1.33333 0 V1 1.33333 2.66667 0 V2 0 2.66667 0 + txt001 +TRI + V0 1.33333 -2.66667 0 V1 2.66667 -2.66667 0 V2 1.33333 -1.33333 0 + txt001 +TRI + V0 2.66667 -2.66667 0 V1 2.66667 -1.33333 0 V2 1.33333 -1.33333 0 + txt001 +TRI + V0 1.33333 0 0 V1 2.66667 0 0 V2 1.33333 1.33333 0 + txt001 +TRI + V0 2.66667 0 0 V1 2.66667 1.33333 0 V2 1.33333 1.33333 0 + txt001 +TRI + V0 1.33333 2.66667 0 V1 2.66667 2.66667 0 V2 1.33333 4 0 + txt001 +TRI + V0 2.66667 2.66667 0 V1 2.66667 4 0 V2 1.33333 4 0 + txt001 +TRI + V0 2.66667 -4 0 V1 4 -4 0 V2 2.66667 -2.66667 0 + txt001 +TRI + V0 4 -4 0 V1 4 -2.66667 0 V2 2.66667 -2.66667 0 + txt001 +TRI + V0 2.66667 -1.33333 0 V1 4 -1.33333 0 V2 2.66667 0 0 + txt001 +TRI + V0 4 -1.33333 0 V1 4 0 0 V2 2.66667 0 0 + txt001 +TRI + V0 2.66667 1.33333 0 V1 4 1.33333 0 V2 2.66667 2.66667 0 + txt001 +TRI + V0 4 1.33333 0 V1 4 2.66667 0 V2 2.66667 2.66667 0 + txt001 +TEXDEF txt002 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1 +PHONG METAL 0.5 PHONG_SIZE 4.81884 + COLOR 0.5 0.5 0.5 + TEXFUNC 0 + +TRI + V0 -4 -4 0 V1 -2.66667 -4 0 V2 -4 -2.66667 0 + txt002 +TRI + V0 -2.66667 -4 0 V1 -2.66667 -2.66667 0 V2 -4 -2.66667 0 + txt002 +TRI + V0 -4 -1.33333 0 V1 -2.66667 -1.33333 0 V2 -4 0 0 + txt002 +TRI + V0 -2.66667 -1.33333 0 V1 -2.66667 0 0 V2 -4 0 0 + txt002 +TRI + V0 -4 1.33333 0 V1 -2.66667 1.33333 0 V2 -4 2.66667 0 + txt002 +TRI + V0 -2.66667 1.33333 0 V1 -2.66667 2.66667 0 V2 -4 2.66667 0 + txt002 +TRI + V0 -2.66667 -2.66667 0 V1 -1.33333 -2.66667 0 V2 -2.66667 -1.33333 0 + txt002 +TRI + V0 -1.33333 -2.66667 0 V1 -1.33333 -1.33333 0 V2 -2.66667 -1.33333 0 + txt002 +TRI + V0 -2.66667 0 0 V1 -1.33333 0 0 V2 -2.66667 1.33333 0 + txt002 +TRI + V0 -1.33333 0 0 V1 -1.33333 1.33333 0 V2 -2.66667 1.33333 0 + txt002 +TRI + V0 -2.66667 2.66667 0 V1 -1.33333 2.66667 0 V2 -2.66667 4 0 + txt002 +TRI + V0 -1.33333 2.66667 0 V1 -1.33333 4 0 V2 -2.66667 4 0 + txt002 +TRI + V0 -1.33333 -4 0 V1 0 -4 0 V2 -1.33333 -2.66667 0 + txt002 +TRI + V0 0 -4 0 V1 0 -2.66667 0 V2 -1.33333 -2.66667 0 + txt002 +TRI + V0 -1.33333 -1.33333 0 V1 0 -1.33333 0 V2 -1.33333 0 0 + txt002 +TRI + V0 0 -1.33333 0 V1 0 0 0 V2 -1.33333 0 0 + txt002 +TRI + V0 -1.33333 1.33333 0 V1 0 1.33333 0 V2 -1.33333 2.66667 0 + txt002 +TRI + V0 0 1.33333 0 V1 0 2.66667 0 V2 -1.33333 2.66667 0 + txt002 +TRI + V0 0 -2.66667 0 V1 1.33333 -2.66667 0 V2 0 -1.33333 0 + txt002 +TRI + V0 1.33333 -2.66667 0 V1 1.33333 -1.33333 0 V2 0 -1.33333 0 + txt002 +TRI + V0 0 0 0 V1 1.33333 0 0 V2 0 1.33333 0 + txt002 +TRI + V0 1.33333 0 0 V1 1.33333 1.33333 0 V2 0 1.33333 0 + txt002 +TRI + V0 0 2.66667 0 V1 1.33333 2.66667 0 V2 0 4 0 + txt002 +TRI + V0 1.33333 2.66667 0 V1 1.33333 4 0 V2 0 4 0 + txt002 +TRI + V0 1.33333 -4 0 V1 2.66667 -4 0 V2 1.33333 -2.66667 0 + txt002 +TRI + V0 2.66667 -4 0 V1 2.66667 -2.66667 0 V2 1.33333 -2.66667 0 + txt002 +TRI + V0 1.33333 -1.33333 0 V1 2.66667 -1.33333 0 V2 1.33333 0 0 + txt002 +TRI + V0 2.66667 -1.33333 0 V1 2.66667 0 0 V2 1.33333 0 0 + txt002 +TRI + V0 1.33333 1.33333 0 V1 2.66667 1.33333 0 V2 1.33333 2.66667 0 + txt002 +TRI + V0 2.66667 1.33333 0 V1 2.66667 2.66667 0 V2 1.33333 2.66667 0 + txt002 +TRI + V0 2.66667 -2.66667 0 V1 4 -2.66667 0 V2 2.66667 -1.33333 0 + txt002 +TRI + V0 4 -2.66667 0 V1 4 -1.33333 0 V2 2.66667 -1.33333 0 + txt002 +TRI + V0 2.66667 0 0 V1 4 0 0 V2 2.66667 1.33333 0 + txt002 +TRI + V0 4 0 0 V1 4 1.33333 0 V2 2.66667 1.33333 0 + txt002 +TRI + V0 2.66667 2.66667 0 V1 4 2.66667 0 V2 2.66667 4 0 + txt002 +TRI + V0 4 2.66667 0 V1 4 4 0 V2 2.66667 4 0 + txt002 +TEXDEF txt003 AMBIENT 0 DIFFUSE 0.75 SPECULAR 0.25 OPACITY 1 +PHONG PLASTIC 0.25 PHONG_SIZE 45.2776 + COLOR 1 0.5 0.1 + TEXFUNC 0 + +STRI + V0 1.4 0 2.4 V1 1.35074 -0.375926 2.4 V2 1.33276 -0.370922 2.45469 + N0 -0.902861 -0 -0.429934 N1 -0.871509 0.234929 -0.430442 N2 -0.953562 0.257047 -0.156989 + txt003 +STRI + V0 1.33276 -0.370922 2.45469 V1 1.38137 0 2.45469 V2 1.4 0 2.4 + N0 -0.953562 0.257047 -0.156989 N1 -0.987636 -0 -0.156768 N2 -0.902861 -0 -0.429934 + txt003 +STRI + V0 1.35074 -0.375926 2.4 V1 1.21126 -0.711407 2.4 V2 1.19514 -0.701938 2.45469 + N0 -0.871509 0.234929 -0.430442 N1 -0.780517 0.4527 -0.43111 N2 -0.854265 0.495474 -0.157281 + txt003 +STRI + V0 1.19514 -0.701938 2.45469 V1 1.33276 -0.370922 2.45469 V2 1.35074 -0.375926 2.4 + N0 -0.854265 0.495474 -0.157281 N1 -0.953562 0.257047 -0.156989 N2 -0.871509 0.234929 -0.430442 + txt003 +STRI + V0 1.21126 -0.711407 2.4 V1 0.994 -0.994 2.4 V2 0.98077 -0.98077 2.45469 + N0 -0.780517 0.4527 -0.43111 N1 -0.637936 0.637936 -0.431366 N2 -0.698293 0.698293 -0.157393 + txt003 +STRI + V0 0.98077 -0.98077 2.45469 V1 1.19514 -0.701938 2.45469 V2 1.21126 -0.711407 2.4 + N0 -0.698293 0.698293 -0.157393 N1 -0.854265 0.495474 -0.157281 N2 -0.780517 0.4527 -0.43111 + txt003 +STRI + V0 0.994 -0.994 2.4 V1 0.711407 -1.21126 2.4 V2 0.701938 -1.19514 2.45469 + N0 -0.637936 0.637936 -0.431366 N1 -0.4527 0.780517 -0.43111 N2 -0.495474 0.854265 -0.157281 + txt003 +STRI + V0 0.701938 -1.19514 2.45469 V1 0.98077 -0.98077 2.45469 V2 0.994 -0.994 2.4 + N0 -0.495474 0.854265 -0.157281 N1 -0.698293 0.698293 -0.157393 N2 -0.637936 0.637936 -0.431366 + txt003 +STRI + V0 0.711407 -1.21126 2.4 V1 0.375926 -1.35074 2.4 V2 0.370922 -1.33276 2.45469 + N0 -0.4527 0.780517 -0.43111 N1 -0.234929 0.871509 -0.430442 N2 -0.257047 0.953562 -0.156989 + txt003 +STRI + V0 0.370922 -1.33276 2.45469 V1 0.701938 -1.19514 2.45469 V2 0.711407 -1.21126 2.4 + N0 -0.257047 0.953562 -0.156989 N1 -0.495474 0.854265 -0.157281 N2 -0.4527 0.780517 -0.43111 + txt003 +STRI + V0 0.375926 -1.35074 2.4 V1 0 -1.4 2.4 V2 0 -1.38137 2.45469 + N0 -0.234929 0.871509 -0.430442 N1 7.30595e-17 0.902861 -0.429934 N2 -9.89971e-17 0.987636 -0.156768 + txt003 +STRI + V0 0 -1.38137 2.45469 V1 0.370922 -1.33276 2.45469 V2 0.375926 -1.35074 2.4 + N0 -9.89971e-17 0.987636 -0.156768 N1 -0.257047 0.953562 -0.156989 N2 -0.234929 0.871509 -0.430442 + txt003 +STRI + V0 1.38137 0 2.45469 V1 1.33276 -0.370922 2.45469 V2 1.33555 -0.371699 2.4875 + N0 -0.987636 -0 -0.156768 N1 -0.953562 0.257047 -0.156989 N2 -0.849414 0.228972 0.475466 + txt003 +STRI + V0 1.33555 -0.371699 2.4875 V1 1.38426 0 2.4875 V2 1.38137 0 2.45469 + N0 -0.849414 0.228972 0.475466 N1 -0.880022 0 0.474933 N2 -0.987636 -0 -0.156768 + txt003 +STRI + V0 1.33276 -0.370922 2.45469 V1 1.19514 -0.701938 2.45469 V2 1.19764 -0.703409 2.4875 + N0 -0.953562 0.257047 -0.156989 N1 -0.854265 0.495474 -0.157281 N2 -0.760669 0.441188 0.476167 + txt003 +STRI + V0 1.19764 -0.703409 2.4875 V1 1.33555 -0.371699 2.4875 V2 1.33276 -0.370922 2.45469 + N0 -0.760669 0.441188 0.476167 N1 -0.849414 0.228972 0.475466 N2 -0.953562 0.257047 -0.156989 + txt003 +STRI + V0 1.19514 -0.701938 2.45469 V1 0.98077 -0.98077 2.45469 V2 0.982824 -0.982824 2.4875 + N0 -0.854265 0.495474 -0.157281 N1 -0.698293 0.698293 -0.157393 N2 -0.621695 0.621695 0.476435 + txt003 +STRI + V0 0.982824 -0.982824 2.4875 V1 1.19764 -0.703409 2.4875 V2 1.19514 -0.701938 2.45469 + N0 -0.621695 0.621695 0.476435 N1 -0.760669 0.441188 0.476167 N2 -0.854265 0.495474 -0.157281 + txt003 +STRI + V0 0.98077 -0.98077 2.45469 V1 0.701938 -1.19514 2.45469 V2 0.703409 -1.19764 2.4875 + N0 -0.698293 0.698293 -0.157393 N1 -0.495474 0.854265 -0.157281 N2 -0.441188 0.760669 0.476167 + txt003 +STRI + V0 0.703409 -1.19764 2.4875 V1 0.982824 -0.982824 2.4875 V2 0.98077 -0.98077 2.45469 + N0 -0.441188 0.760669 0.476167 N1 -0.621695 0.621695 0.476435 N2 -0.698293 0.698293 -0.157393 + txt003 +STRI + V0 0.701938 -1.19514 2.45469 V1 0.370922 -1.33276 2.45469 V2 0.371699 -1.33555 2.4875 + N0 -0.495474 0.854265 -0.157281 N1 -0.257047 0.953562 -0.156989 N2 -0.228972 0.849414 0.475466 + txt003 +STRI + V0 0.371699 -1.33555 2.4875 V1 0.703409 -1.19764 2.4875 V2 0.701938 -1.19514 2.45469 + N0 -0.228972 0.849414 0.475466 N1 -0.441188 0.760669 0.476167 N2 -0.495474 0.854265 -0.157281 + txt003 +STRI + V0 0.370922 -1.33276 2.45469 V1 0 -1.38137 2.45469 V2 0 -1.38426 2.4875 + N0 -0.257047 0.953562 -0.156989 N1 -9.89971e-17 0.987636 -0.156768 N2 -6.08179e-16 0.880022 0.474933 + txt003 +STRI + V0 0 -1.38426 2.4875 V1 0.371699 -1.33555 2.4875 V2 0.370922 -1.33276 2.45469 + N0 -6.08179e-16 0.880022 0.474933 N1 -0.228972 0.849414 0.475466 N2 -0.257047 0.953562 -0.156989 + txt003 +STRI + V0 1.38426 0 2.4875 V1 1.33555 -0.371699 2.4875 V2 1.35376 -0.376765 2.49844 + N0 -0.880022 0 0.474933 N1 -0.849414 0.228972 0.475466 N2 2.13636e-15 -5.93089e-16 1 + txt003 +STRI + V0 1.35376 -0.376765 2.49844 V1 1.40312 0 2.49844 V2 1.38426 0 2.4875 + N0 2.13636e-15 -5.93089e-16 1 N1 2.22045e-15 0 1 N2 -0.880022 0 0.474933 + txt003 +STRI + V0 1.33555 -0.371699 2.4875 V1 1.19764 -0.703409 2.4875 V2 1.21396 -0.712995 2.49844 + N0 -0.849414 0.228972 0.475466 N1 -0.760669 0.441188 0.476167 N2 1.87966e-15 -1.16933e-15 1 + txt003 +STRI + V0 1.21396 -0.712995 2.49844 V1 1.35376 -0.376765 2.49844 V2 1.33555 -0.371699 2.4875 + N0 1.87966e-15 -1.16933e-15 1 N1 2.13636e-15 -5.93089e-16 1 N2 -0.849414 0.228972 0.475466 + txt003 +STRI + V0 1.19764 -0.703409 2.4875 V1 0.982824 -0.982824 2.4875 V2 0.996219 -0.996219 2.49844 + N0 -0.760669 0.441188 0.476167 N1 -0.621695 0.621695 0.476435 N2 1.4538e-15 -1.67359e-15 1 + txt003 +STRI + V0 0.996219 -0.996219 2.49844 V1 1.21396 -0.712995 2.49844 V2 1.19764 -0.703409 2.4875 + N0 1.4538e-15 -1.67359e-15 1 N1 1.87966e-15 -1.16933e-15 1 N2 -0.760669 0.441188 0.476167 + txt003 +STRI + V0 0.982824 -0.982824 2.4875 V1 0.703409 -1.19764 2.4875 V2 0.712995 -1.21396 2.49844 + N0 -0.621695 0.621695 0.476435 N1 -0.441188 0.760669 0.476167 N2 8.74229e-16 -2.05298e-15 1 + txt003 +STRI + V0 0.712995 -1.21396 2.49844 V1 0.996219 -0.996219 2.49844 V2 0.982824 -0.982824 2.4875 + N0 8.74229e-16 -2.05298e-15 1 N1 1.4538e-15 -1.67359e-15 1 N2 -0.621695 0.621695 0.476435 + txt003 +STRI + V0 0.703409 -1.19764 2.4875 V1 0.371699 -1.33555 2.4875 V2 0.376765 -1.35376 2.49844 + N0 -0.441188 0.760669 0.476167 N1 -0.228972 0.849414 0.475466 N2 1.77072e-16 -2.25214e-15 1 + txt003 +STRI + V0 0.376765 -1.35376 2.49844 V1 0.712995 -1.21396 2.49844 V2 0.703409 -1.19764 2.4875 + N0 1.77072e-16 -2.25214e-15 1 N1 8.74229e-16 -2.05298e-15 1 N2 -0.441188 0.760669 0.476167 + txt003 +STRI + V0 0.371699 -1.33555 2.4875 V1 0 -1.38426 2.4875 V2 0 -1.40312 2.49844 + N0 -0.228972 0.849414 0.475466 N1 -6.08179e-16 0.880022 0.474933 N2 -5.65179e-16 -2.22045e-15 1 + txt003 +STRI + V0 0 -1.40312 2.49844 V1 0.376765 -1.35376 2.49844 V2 0.371699 -1.33555 2.4875 + N0 -5.65179e-16 -2.22045e-15 1 N1 1.77072e-16 -2.25214e-15 1 N2 -0.228972 0.849414 0.475466 + txt003 +STRI + V0 1.40312 0 2.49844 V1 1.35376 -0.376765 2.49844 V2 1.38201 -0.384628 2.4875 + N0 2.22045e-15 0 1 N1 2.13636e-15 -5.93089e-16 1 N2 0.537012 -0.14476 0.831061 + txt003 +STRI + V0 1.38201 -0.384628 2.4875 V1 1.43241 0 2.4875 V2 1.40312 0 2.49844 + N0 0.537012 -0.14476 0.831061 N1 0.556738 0 0.830688 N2 2.22045e-15 0 1 + txt003 +STRI + V0 1.35376 -0.376765 2.49844 V1 1.21396 -0.712995 2.49844 V2 1.2393 -0.727875 2.4875 + N0 2.13636e-15 -5.93089e-16 1 N1 1.87966e-15 -1.16933e-15 1 N2 0.480481 -0.278679 0.83155 + txt003 +STRI + V0 1.2393 -0.727875 2.4875 V1 1.38201 -0.384628 2.4875 V2 1.35376 -0.376765 2.49844 + N0 0.480481 -0.278679 0.83155 N1 0.537012 -0.14476 0.831061 N2 2.13636e-15 -5.93089e-16 1 + txt003 +STRI + V0 1.21396 -0.712995 2.49844 V1 0.996219 -0.996219 2.49844 V2 1.01701 -1.01701 2.4875 + N0 1.87966e-15 -1.16933e-15 1 N1 1.4538e-15 -1.67359e-15 1 N2 0.392564 -0.392564 0.831737 + txt003 +STRI + V0 1.01701 -1.01701 2.4875 V1 1.2393 -0.727875 2.4875 V2 1.21396 -0.712995 2.49844 + N0 0.392564 -0.392564 0.831737 N1 0.480481 -0.278679 0.83155 N2 1.87966e-15 -1.16933e-15 1 + txt003 +STRI + V0 0.996219 -0.996219 2.49844 V1 0.712995 -1.21396 2.49844 V2 0.727875 -1.2393 2.4875 + N0 1.4538e-15 -1.67359e-15 1 N1 8.74229e-16 -2.05298e-15 1 N2 0.278679 -0.480481 0.83155 + txt003 +STRI + V0 0.727875 -1.2393 2.4875 V1 1.01701 -1.01701 2.4875 V2 0.996219 -0.996219 2.49844 + N0 0.278679 -0.480481 0.83155 N1 0.392564 -0.392564 0.831737 N2 1.4538e-15 -1.67359e-15 1 + txt003 +STRI + V0 0.712995 -1.21396 2.49844 V1 0.376765 -1.35376 2.49844 V2 0.384628 -1.38201 2.4875 + N0 8.74229e-16 -2.05298e-15 1 N1 1.77072e-16 -2.25214e-15 1 N2 0.14476 -0.537012 0.831061 + txt003 +STRI + V0 0.384628 -1.38201 2.4875 V1 0.727875 -1.2393 2.4875 V2 0.712995 -1.21396 2.49844 + N0 0.14476 -0.537012 0.831061 N1 0.278679 -0.480481 0.83155 N2 8.74229e-16 -2.05298e-15 1 + txt003 +STRI + V0 0.376765 -1.35376 2.49844 V1 0 -1.40312 2.49844 V2 0 -1.43241 2.4875 + N0 1.77072e-16 -2.25214e-15 1 N1 -5.65179e-16 -2.22045e-15 1 N2 -4.5989e-16 -0.556738 0.830688 + txt003 +STRI + V0 0 -1.43241 2.4875 V1 0.384628 -1.38201 2.4875 V2 0.376765 -1.35376 2.49844 + N0 -4.5989e-16 -0.556738 0.830688 N1 0.14476 -0.537012 0.831061 N2 1.77072e-16 -2.25214e-15 1 + txt003 +STRI + V0 1.43241 0 2.4875 V1 1.38201 -0.384628 2.4875 V2 1.41495 -0.393796 2.45469 + N0 0.556738 0 0.830688 N1 0.537012 -0.14476 0.831061 N2 0.755869 -0.203756 0.622211 + txt003 +STRI + V0 1.41495 -0.393796 2.45469 V1 1.46655 0 2.45469 V2 1.43241 0 2.4875 + N0 0.755869 -0.203756 0.622211 N1 0.783289 0 0.621658 N2 0.556738 0 0.830688 + txt003 +STRI + V0 1.38201 -0.384628 2.4875 V1 1.2393 -0.727875 2.4875 V2 1.26884 -0.745225 2.45469 + N0 0.537012 -0.14476 0.831061 N1 0.480481 -0.278679 0.83155 N2 0.67669 -0.39248 0.622937 + txt003 +STRI + V0 1.26884 -0.745225 2.45469 V1 1.41495 -0.393796 2.45469 V2 1.38201 -0.384628 2.4875 + N0 0.67669 -0.39248 0.622937 N1 0.755869 -0.203756 0.622211 N2 0.537012 -0.14476 0.831061 + txt003 +STRI + V0 1.2393 -0.727875 2.4875 V1 1.01701 -1.01701 2.4875 V2 1.04125 -1.04125 2.45469 + N0 0.480481 -0.278679 0.83155 N1 0.392564 -0.392564 0.831737 N2 0.552993 -0.552993 0.623215 + txt003 +STRI + V0 1.04125 -1.04125 2.45469 V1 1.26884 -0.745225 2.45469 V2 1.2393 -0.727875 2.4875 + N0 0.552993 -0.552993 0.623215 N1 0.67669 -0.39248 0.622937 N2 0.480481 -0.278679 0.83155 + txt003 +STRI + V0 1.01701 -1.01701 2.4875 V1 0.727875 -1.2393 2.4875 V2 0.745225 -1.26884 2.45469 + N0 0.392564 -0.392564 0.831737 N1 0.278679 -0.480481 0.83155 N2 0.39248 -0.67669 0.622937 + txt003 +STRI + V0 0.745225 -1.26884 2.45469 V1 1.04125 -1.04125 2.45469 V2 1.01701 -1.01701 2.4875 + N0 0.39248 -0.67669 0.622937 N1 0.552993 -0.552993 0.623215 N2 0.392564 -0.392564 0.831737 + txt003 +STRI + V0 0.727875 -1.2393 2.4875 V1 0.384628 -1.38201 2.4875 V2 0.393796 -1.41495 2.45469 + N0 0.278679 -0.480481 0.83155 N1 0.14476 -0.537012 0.831061 N2 0.203756 -0.755869 0.622211 + txt003 +STRI + V0 0.393796 -1.41495 2.45469 V1 0.745225 -1.26884 2.45469 V2 0.727875 -1.2393 2.4875 + N0 0.203756 -0.755869 0.622211 N1 0.39248 -0.67669 0.622937 N2 0.278679 -0.480481 0.83155 + txt003 +STRI + V0 0.384628 -1.38201 2.4875 V1 0 -1.43241 2.4875 V2 0 -1.46655 2.45469 + N0 0.14476 -0.537012 0.831061 N1 -4.5989e-16 -0.556738 0.830688 N2 -1.94969e-16 -0.783289 0.621658 + txt003 +STRI + V0 0 -1.46655 2.45469 V1 0.393796 -1.41495 2.45469 V2 0.384628 -1.38201 2.4875 + N0 -1.94969e-16 -0.783289 0.621658 N1 0.203756 -0.755869 0.622211 N2 0.14476 -0.537012 0.831061 + txt003 +STRI + V0 1.46655 0 2.45469 V1 1.41495 -0.393796 2.45469 V2 1.44722 -0.402778 2.4 + N0 0.783289 0 0.621658 N1 0.755869 -0.203756 0.622211 N2 0.871509 -0.234929 0.430442 + txt003 +STRI + V0 1.44722 -0.402778 2.4 V1 1.5 0 2.4 V2 1.46655 0 2.45469 + N0 0.871509 -0.234929 0.430442 N1 0.902861 0 0.429934 N2 0.783289 0 0.621658 + txt003 +STRI + V0 1.41495 -0.393796 2.45469 V1 1.26884 -0.745225 2.45469 V2 1.29778 -0.762222 2.4 + N0 0.755869 -0.203756 0.622211 N1 0.67669 -0.39248 0.622937 N2 0.780517 -0.4527 0.43111 + txt003 +STRI + V0 1.29778 -0.762222 2.4 V1 1.44722 -0.402778 2.4 V2 1.41495 -0.393796 2.45469 + N0 0.780517 -0.4527 0.43111 N1 0.871509 -0.234929 0.430442 N2 0.755869 -0.203756 0.622211 + txt003 +STRI + V0 1.26884 -0.745225 2.45469 V1 1.04125 -1.04125 2.45469 V2 1.065 -1.065 2.4 + N0 0.67669 -0.39248 0.622937 N1 0.552993 -0.552993 0.623215 N2 0.637936 -0.637936 0.431366 + txt003 +STRI + V0 1.065 -1.065 2.4 V1 1.29778 -0.762222 2.4 V2 1.26884 -0.745225 2.45469 + N0 0.637936 -0.637936 0.431366 N1 0.780517 -0.4527 0.43111 N2 0.67669 -0.39248 0.622937 + txt003 +STRI + V0 1.04125 -1.04125 2.45469 V1 0.745225 -1.26884 2.45469 V2 0.762222 -1.29778 2.4 + N0 0.552993 -0.552993 0.623215 N1 0.39248 -0.67669 0.622937 N2 0.4527 -0.780517 0.43111 + txt003 +STRI + V0 0.762222 -1.29778 2.4 V1 1.065 -1.065 2.4 V2 1.04125 -1.04125 2.45469 + N0 0.4527 -0.780517 0.43111 N1 0.637936 -0.637936 0.431366 N2 0.552993 -0.552993 0.623215 + txt003 +STRI + V0 0.745225 -1.26884 2.45469 V1 0.393796 -1.41495 2.45469 V2 0.402778 -1.44722 2.4 + N0 0.39248 -0.67669 0.622937 N1 0.203756 -0.755869 0.622211 N2 0.234929 -0.871509 0.430442 + txt003 +STRI + V0 0.402778 -1.44722 2.4 V1 0.762222 -1.29778 2.4 V2 0.745225 -1.26884 2.45469 + N0 0.234929 -0.871509 0.430442 N1 0.4527 -0.780517 0.43111 N2 0.39248 -0.67669 0.622937 + txt003 +STRI + V0 0.393796 -1.41495 2.45469 V1 0 -1.46655 2.45469 V2 0 -1.5 2.4 + N0 0.203756 -0.755869 0.622211 N1 -1.94969e-16 -0.783289 0.621658 N2 -6.81889e-17 -0.902861 0.429934 + txt003 +STRI + V0 0 -1.5 2.4 V1 0.402778 -1.44722 2.4 V2 0.393796 -1.41495 2.45469 + N0 -6.81889e-17 -0.902861 0.429934 N1 0.234929 -0.871509 0.430442 N2 0.203756 -0.755869 0.622211 + txt003 +STRI + V0 0 -1.4 2.4 V1 -0.375926 -1.35074 2.4 V2 -0.370922 -1.33276 2.45469 + N0 0 0.902861 -0.429934 N1 0.234929 0.871509 -0.430442 N2 0.257047 0.953562 -0.156989 + txt003 +STRI + V0 -0.370922 -1.33276 2.45469 V1 0 -1.38137 2.45469 V2 0 -1.4 2.4 + N0 0.257047 0.953562 -0.156989 N1 0 0.987636 -0.156768 N2 0 0.902861 -0.429934 + txt003 +STRI + V0 -0.375926 -1.35074 2.4 V1 -0.711407 -1.21126 2.4 V2 -0.701938 -1.19514 2.45469 + N0 0.234929 0.871509 -0.430442 N1 0.4527 0.780517 -0.43111 N2 0.495474 0.854265 -0.157281 + txt003 +STRI + V0 -0.701938 -1.19514 2.45469 V1 -0.370922 -1.33276 2.45469 V2 -0.375926 -1.35074 2.4 + N0 0.495474 0.854265 -0.157281 N1 0.257047 0.953562 -0.156989 N2 0.234929 0.871509 -0.430442 + txt003 +STRI + V0 -0.711407 -1.21126 2.4 V1 -0.994 -0.994 2.4 V2 -0.98077 -0.98077 2.45469 + N0 0.4527 0.780517 -0.43111 N1 0.637936 0.637936 -0.431366 N2 0.698293 0.698293 -0.157393 + txt003 +STRI + V0 -0.98077 -0.98077 2.45469 V1 -0.701938 -1.19514 2.45469 V2 -0.711407 -1.21126 2.4 + N0 0.698293 0.698293 -0.157393 N1 0.495474 0.854265 -0.157281 N2 0.4527 0.780517 -0.43111 + txt003 +STRI + V0 -0.994 -0.994 2.4 V1 -1.21126 -0.711407 2.4 V2 -1.19514 -0.701938 2.45469 + N0 0.637936 0.637936 -0.431366 N1 0.780517 0.4527 -0.43111 N2 0.854265 0.495474 -0.157281 + txt003 +STRI + V0 -1.19514 -0.701938 2.45469 V1 -0.98077 -0.98077 2.45469 V2 -0.994 -0.994 2.4 + N0 0.854265 0.495474 -0.157281 N1 0.698293 0.698293 -0.157393 N2 0.637936 0.637936 -0.431366 + txt003 +STRI + V0 -1.21126 -0.711407 2.4 V1 -1.35074 -0.375926 2.4 V2 -1.33276 -0.370922 2.45469 + N0 0.780517 0.4527 -0.43111 N1 0.871509 0.234929 -0.430442 N2 0.953562 0.257047 -0.156989 + txt003 +STRI + V0 -1.33276 -0.370922 2.45469 V1 -1.19514 -0.701938 2.45469 V2 -1.21126 -0.711407 2.4 + N0 0.953562 0.257047 -0.156989 N1 0.854265 0.495474 -0.157281 N2 0.780517 0.4527 -0.43111 + txt003 +STRI + V0 -1.35074 -0.375926 2.4 V1 -1.4 0 2.4 V2 -1.38137 0 2.45469 + N0 0.871509 0.234929 -0.430442 N1 0.902861 -7.30595e-17 -0.429934 N2 0.987636 9.89971e-17 -0.156768 + txt003 +STRI + V0 -1.38137 0 2.45469 V1 -1.33276 -0.370922 2.45469 V2 -1.35074 -0.375926 2.4 + N0 0.987636 9.89971e-17 -0.156768 N1 0.953562 0.257047 -0.156989 N2 0.871509 0.234929 -0.430442 + txt003 +STRI + V0 0 -1.38137 2.45469 V1 -0.370922 -1.33276 2.45469 V2 -0.371699 -1.33555 2.4875 + N0 0 0.987636 -0.156768 N1 0.257047 0.953562 -0.156989 N2 0.228972 0.849414 0.475466 + txt003 +STRI + V0 -0.371699 -1.33555 2.4875 V1 0 -1.38426 2.4875 V2 0 -1.38137 2.45469 + N0 0.228972 0.849414 0.475466 N1 0 0.880022 0.474933 N2 0 0.987636 -0.156768 + txt003 +STRI + V0 -0.370922 -1.33276 2.45469 V1 -0.701938 -1.19514 2.45469 V2 -0.703409 -1.19764 2.4875 + N0 0.257047 0.953562 -0.156989 N1 0.495474 0.854265 -0.157281 N2 0.441188 0.760669 0.476167 + txt003 +STRI + V0 -0.703409 -1.19764 2.4875 V1 -0.371699 -1.33555 2.4875 V2 -0.370922 -1.33276 2.45469 + N0 0.441188 0.760669 0.476167 N1 0.228972 0.849414 0.475466 N2 0.257047 0.953562 -0.156989 + txt003 +STRI + V0 -0.701938 -1.19514 2.45469 V1 -0.98077 -0.98077 2.45469 V2 -0.982824 -0.982824 2.4875 + N0 0.495474 0.854265 -0.157281 N1 0.698293 0.698293 -0.157393 N2 0.621695 0.621695 0.476435 + txt003 +STRI + V0 -0.982824 -0.982824 2.4875 V1 -0.703409 -1.19764 2.4875 V2 -0.701938 -1.19514 2.45469 + N0 0.621695 0.621695 0.476435 N1 0.441188 0.760669 0.476167 N2 0.495474 0.854265 -0.157281 + txt003 +STRI + V0 -0.98077 -0.98077 2.45469 V1 -1.19514 -0.701938 2.45469 V2 -1.19764 -0.703409 2.4875 + N0 0.698293 0.698293 -0.157393 N1 0.854265 0.495474 -0.157281 N2 0.760669 0.441188 0.476167 + txt003 +STRI + V0 -1.19764 -0.703409 2.4875 V1 -0.982824 -0.982824 2.4875 V2 -0.98077 -0.98077 2.45469 + N0 0.760669 0.441188 0.476167 N1 0.621695 0.621695 0.476435 N2 0.698293 0.698293 -0.157393 + txt003 +STRI + V0 -1.19514 -0.701938 2.45469 V1 -1.33276 -0.370922 2.45469 V2 -1.33555 -0.371699 2.4875 + N0 0.854265 0.495474 -0.157281 N1 0.953562 0.257047 -0.156989 N2 0.849414 0.228972 0.475466 + txt003 +STRI + V0 -1.33555 -0.371699 2.4875 V1 -1.19764 -0.703409 2.4875 V2 -1.19514 -0.701938 2.45469 + N0 0.849414 0.228972 0.475466 N1 0.760669 0.441188 0.476167 N2 0.854265 0.495474 -0.157281 + txt003 +STRI + V0 -1.33276 -0.370922 2.45469 V1 -1.38137 0 2.45469 V2 -1.38426 0 2.4875 + N0 0.953562 0.257047 -0.156989 N1 0.987636 9.89971e-17 -0.156768 N2 0.880022 6.08179e-16 0.474933 + txt003 +STRI + V0 -1.38426 0 2.4875 V1 -1.33555 -0.371699 2.4875 V2 -1.33276 -0.370922 2.45469 + N0 0.880022 6.08179e-16 0.474933 N1 0.849414 0.228972 0.475466 N2 0.953562 0.257047 -0.156989 + txt003 +STRI + V0 0 -1.38426 2.4875 V1 -0.371699 -1.33555 2.4875 V2 -0.376765 -1.35376 2.49844 + N0 0 0.880022 0.474933 N1 0.228972 0.849414 0.475466 N2 -5.93089e-16 -2.13636e-15 1 + txt003 +STRI + V0 -0.376765 -1.35376 2.49844 V1 0 -1.40312 2.49844 V2 0 -1.38426 2.4875 + N0 -5.93089e-16 -2.13636e-15 1 N1 0 -2.22045e-15 1 N2 0 0.880022 0.474933 + txt003 +STRI + V0 -0.371699 -1.33555 2.4875 V1 -0.703409 -1.19764 2.4875 V2 -0.712995 -1.21396 2.49844 + N0 0.228972 0.849414 0.475466 N1 0.441188 0.760669 0.476167 N2 -1.16933e-15 -1.87966e-15 1 + txt003 +STRI + V0 -0.712995 -1.21396 2.49844 V1 -0.376765 -1.35376 2.49844 V2 -0.371699 -1.33555 2.4875 + N0 -1.16933e-15 -1.87966e-15 1 N1 -5.93089e-16 -2.13636e-15 1 N2 0.228972 0.849414 0.475466 + txt003 +STRI + V0 -0.703409 -1.19764 2.4875 V1 -0.982824 -0.982824 2.4875 V2 -0.996219 -0.996219 2.49844 + N0 0.441188 0.760669 0.476167 N1 0.621695 0.621695 0.476435 N2 -1.67359e-15 -1.4538e-15 1 + txt003 +STRI + V0 -0.996219 -0.996219 2.49844 V1 -0.712995 -1.21396 2.49844 V2 -0.703409 -1.19764 2.4875 + N0 -1.67359e-15 -1.4538e-15 1 N1 -1.16933e-15 -1.87966e-15 1 N2 0.441188 0.760669 0.476167 + txt003 +STRI + V0 -0.982824 -0.982824 2.4875 V1 -1.19764 -0.703409 2.4875 V2 -1.21396 -0.712995 2.49844 + N0 0.621695 0.621695 0.476435 N1 0.760669 0.441188 0.476167 N2 -2.05298e-15 -8.74229e-16 1 + txt003 +STRI + V0 -1.21396 -0.712995 2.49844 V1 -0.996219 -0.996219 2.49844 V2 -0.982824 -0.982824 2.4875 + N0 -2.05298e-15 -8.74229e-16 1 N1 -1.67359e-15 -1.4538e-15 1 N2 0.621695 0.621695 0.476435 + txt003 +STRI + V0 -1.19764 -0.703409 2.4875 V1 -1.33555 -0.371699 2.4875 V2 -1.35376 -0.376765 2.49844 + N0 0.760669 0.441188 0.476167 N1 0.849414 0.228972 0.475466 N2 -2.25214e-15 -1.77072e-16 1 + txt003 +STRI + V0 -1.35376 -0.376765 2.49844 V1 -1.21396 -0.712995 2.49844 V2 -1.19764 -0.703409 2.4875 + N0 -2.25214e-15 -1.77072e-16 1 N1 -2.05298e-15 -8.74229e-16 1 N2 0.760669 0.441188 0.476167 + txt003 +STRI + V0 -1.33555 -0.371699 2.4875 V1 -1.38426 0 2.4875 V2 -1.40312 0 2.49844 + N0 0.849414 0.228972 0.475466 N1 0.880022 6.08179e-16 0.474933 N2 -2.22045e-15 5.65179e-16 1 + txt003 +STRI + V0 -1.40312 0 2.49844 V1 -1.35376 -0.376765 2.49844 V2 -1.33555 -0.371699 2.4875 + N0 -2.22045e-15 5.65179e-16 1 N1 -2.25214e-15 -1.77072e-16 1 N2 0.849414 0.228972 0.475466 + txt003 +STRI + V0 0 -1.40312 2.49844 V1 -0.376765 -1.35376 2.49844 V2 -0.384628 -1.38201 2.4875 + N0 0 -2.22045e-15 1 N1 -5.93089e-16 -2.13636e-15 1 N2 -0.14476 -0.537012 0.831061 + txt003 +STRI + V0 -0.384628 -1.38201 2.4875 V1 0 -1.43241 2.4875 V2 0 -1.40312 2.49844 + N0 -0.14476 -0.537012 0.831061 N1 0 -0.556738 0.830688 N2 0 -2.22045e-15 1 + txt003 +STRI + V0 -0.376765 -1.35376 2.49844 V1 -0.712995 -1.21396 2.49844 V2 -0.727875 -1.2393 2.4875 + N0 -5.93089e-16 -2.13636e-15 1 N1 -1.16933e-15 -1.87966e-15 1 N2 -0.278679 -0.480481 0.83155 + txt003 +STRI + V0 -0.727875 -1.2393 2.4875 V1 -0.384628 -1.38201 2.4875 V2 -0.376765 -1.35376 2.49844 + N0 -0.278679 -0.480481 0.83155 N1 -0.14476 -0.537012 0.831061 N2 -5.93089e-16 -2.13636e-15 1 + txt003 +STRI + V0 -0.712995 -1.21396 2.49844 V1 -0.996219 -0.996219 2.49844 V2 -1.01701 -1.01701 2.4875 + N0 -1.16933e-15 -1.87966e-15 1 N1 -1.67359e-15 -1.4538e-15 1 N2 -0.392564 -0.392564 0.831737 + txt003 +STRI + V0 -1.01701 -1.01701 2.4875 V1 -0.727875 -1.2393 2.4875 V2 -0.712995 -1.21396 2.49844 + N0 -0.392564 -0.392564 0.831737 N1 -0.278679 -0.480481 0.83155 N2 -1.16933e-15 -1.87966e-15 1 + txt003 +STRI + V0 -0.996219 -0.996219 2.49844 V1 -1.21396 -0.712995 2.49844 V2 -1.2393 -0.727875 2.4875 + N0 -1.67359e-15 -1.4538e-15 1 N1 -2.05298e-15 -8.74229e-16 1 N2 -0.480481 -0.278679 0.83155 + txt003 +STRI + V0 -1.2393 -0.727875 2.4875 V1 -1.01701 -1.01701 2.4875 V2 -0.996219 -0.996219 2.49844 + N0 -0.480481 -0.278679 0.83155 N1 -0.392564 -0.392564 0.831737 N2 -1.67359e-15 -1.4538e-15 1 + txt003 +STRI + V0 -1.21396 -0.712995 2.49844 V1 -1.35376 -0.376765 2.49844 V2 -1.38201 -0.384628 2.4875 + N0 -2.05298e-15 -8.74229e-16 1 N1 -2.25214e-15 -1.77072e-16 1 N2 -0.537012 -0.14476 0.831061 + txt003 +STRI + V0 -1.38201 -0.384628 2.4875 V1 -1.2393 -0.727875 2.4875 V2 -1.21396 -0.712995 2.49844 + N0 -0.537012 -0.14476 0.831061 N1 -0.480481 -0.278679 0.83155 N2 -2.05298e-15 -8.74229e-16 1 + txt003 +STRI + V0 -1.35376 -0.376765 2.49844 V1 -1.40312 0 2.49844 V2 -1.43241 0 2.4875 + N0 -2.25214e-15 -1.77072e-16 1 N1 -2.22045e-15 5.65179e-16 1 N2 -0.556738 4.5989e-16 0.830688 + txt003 +STRI + V0 -1.43241 0 2.4875 V1 -1.38201 -0.384628 2.4875 V2 -1.35376 -0.376765 2.49844 + N0 -0.556738 4.5989e-16 0.830688 N1 -0.537012 -0.14476 0.831061 N2 -2.25214e-15 -1.77072e-16 1 + txt003 +STRI + V0 0 -1.43241 2.4875 V1 -0.384628 -1.38201 2.4875 V2 -0.393796 -1.41495 2.45469 + N0 0 -0.556738 0.830688 N1 -0.14476 -0.537012 0.831061 N2 -0.203756 -0.755869 0.622211 + txt003 +STRI + V0 -0.393796 -1.41495 2.45469 V1 0 -1.46655 2.45469 V2 0 -1.43241 2.4875 + N0 -0.203756 -0.755869 0.622211 N1 0 -0.783289 0.621658 N2 0 -0.556738 0.830688 + txt003 +STRI + V0 -0.384628 -1.38201 2.4875 V1 -0.727875 -1.2393 2.4875 V2 -0.745225 -1.26884 2.45469 + N0 -0.14476 -0.537012 0.831061 N1 -0.278679 -0.480481 0.83155 N2 -0.39248 -0.67669 0.622937 + txt003 +STRI + V0 -0.745225 -1.26884 2.45469 V1 -0.393796 -1.41495 2.45469 V2 -0.384628 -1.38201 2.4875 + N0 -0.39248 -0.67669 0.622937 N1 -0.203756 -0.755869 0.622211 N2 -0.14476 -0.537012 0.831061 + txt003 +STRI + V0 -0.727875 -1.2393 2.4875 V1 -1.01701 -1.01701 2.4875 V2 -1.04125 -1.04125 2.45469 + N0 -0.278679 -0.480481 0.83155 N1 -0.392564 -0.392564 0.831737 N2 -0.552993 -0.552993 0.623215 + txt003 +STRI + V0 -1.04125 -1.04125 2.45469 V1 -0.745225 -1.26884 2.45469 V2 -0.727875 -1.2393 2.4875 + N0 -0.552993 -0.552993 0.623215 N1 -0.39248 -0.67669 0.622937 N2 -0.278679 -0.480481 0.83155 + txt003 +STRI + V0 -1.01701 -1.01701 2.4875 V1 -1.2393 -0.727875 2.4875 V2 -1.26884 -0.745225 2.45469 + N0 -0.392564 -0.392564 0.831737 N1 -0.480481 -0.278679 0.83155 N2 -0.67669 -0.39248 0.622937 + txt003 +STRI + V0 -1.26884 -0.745225 2.45469 V1 -1.04125 -1.04125 2.45469 V2 -1.01701 -1.01701 2.4875 + N0 -0.67669 -0.39248 0.622937 N1 -0.552993 -0.552993 0.623215 N2 -0.392564 -0.392564 0.831737 + txt003 +STRI + V0 -1.2393 -0.727875 2.4875 V1 -1.38201 -0.384628 2.4875 V2 -1.41495 -0.393796 2.45469 + N0 -0.480481 -0.278679 0.83155 N1 -0.537012 -0.14476 0.831061 N2 -0.755869 -0.203756 0.622211 + txt003 +STRI + V0 -1.41495 -0.393796 2.45469 V1 -1.26884 -0.745225 2.45469 V2 -1.2393 -0.727875 2.4875 + N0 -0.755869 -0.203756 0.622211 N1 -0.67669 -0.39248 0.622937 N2 -0.480481 -0.278679 0.83155 + txt003 +STRI + V0 -1.38201 -0.384628 2.4875 V1 -1.43241 0 2.4875 V2 -1.46655 0 2.45469 + N0 -0.537012 -0.14476 0.831061 N1 -0.556738 4.5989e-16 0.830688 N2 -0.783289 1.94969e-16 0.621658 + txt003 +STRI + V0 -1.46655 0 2.45469 V1 -1.41495 -0.393796 2.45469 V2 -1.38201 -0.384628 2.4875 + N0 -0.783289 1.94969e-16 0.621658 N1 -0.755869 -0.203756 0.622211 N2 -0.537012 -0.14476 0.831061 + txt003 +STRI + V0 0 -1.46655 2.45469 V1 -0.393796 -1.41495 2.45469 V2 -0.402778 -1.44722 2.4 + N0 0 -0.783289 0.621658 N1 -0.203756 -0.755869 0.622211 N2 -0.234929 -0.871509 0.430442 + txt003 +STRI + V0 -0.402778 -1.44722 2.4 V1 0 -1.5 2.4 V2 0 -1.46655 2.45469 + N0 -0.234929 -0.871509 0.430442 N1 0 -0.902861 0.429934 N2 0 -0.783289 0.621658 + txt003 +STRI + V0 -0.393796 -1.41495 2.45469 V1 -0.745225 -1.26884 2.45469 V2 -0.762222 -1.29778 2.4 + N0 -0.203756 -0.755869 0.622211 N1 -0.39248 -0.67669 0.622937 N2 -0.4527 -0.780517 0.43111 + txt003 +STRI + V0 -0.762222 -1.29778 2.4 V1 -0.402778 -1.44722 2.4 V2 -0.393796 -1.41495 2.45469 + N0 -0.4527 -0.780517 0.43111 N1 -0.234929 -0.871509 0.430442 N2 -0.203756 -0.755869 0.622211 + txt003 +STRI + V0 -0.745225 -1.26884 2.45469 V1 -1.04125 -1.04125 2.45469 V2 -1.065 -1.065 2.4 + N0 -0.39248 -0.67669 0.622937 N1 -0.552993 -0.552993 0.623215 N2 -0.637936 -0.637936 0.431366 + txt003 +STRI + V0 -1.065 -1.065 2.4 V1 -0.762222 -1.29778 2.4 V2 -0.745225 -1.26884 2.45469 + N0 -0.637936 -0.637936 0.431366 N1 -0.4527 -0.780517 0.43111 N2 -0.39248 -0.67669 0.622937 + txt003 +STRI + V0 -1.04125 -1.04125 2.45469 V1 -1.26884 -0.745225 2.45469 V2 -1.29778 -0.762222 2.4 + N0 -0.552993 -0.552993 0.623215 N1 -0.67669 -0.39248 0.622937 N2 -0.780517 -0.4527 0.43111 + txt003 +STRI + V0 -1.29778 -0.762222 2.4 V1 -1.065 -1.065 2.4 V2 -1.04125 -1.04125 2.45469 + N0 -0.780517 -0.4527 0.43111 N1 -0.637936 -0.637936 0.431366 N2 -0.552993 -0.552993 0.623215 + txt003 +STRI + V0 -1.26884 -0.745225 2.45469 V1 -1.41495 -0.393796 2.45469 V2 -1.44722 -0.402778 2.4 + N0 -0.67669 -0.39248 0.622937 N1 -0.755869 -0.203756 0.622211 N2 -0.871509 -0.234929 0.430442 + txt003 +STRI + V0 -1.44722 -0.402778 2.4 V1 -1.29778 -0.762222 2.4 V2 -1.26884 -0.745225 2.45469 + N0 -0.871509 -0.234929 0.430442 N1 -0.780517 -0.4527 0.43111 N2 -0.67669 -0.39248 0.622937 + txt003 +STRI + V0 -1.41495 -0.393796 2.45469 V1 -1.46655 0 2.45469 V2 -1.5 0 2.4 + N0 -0.755869 -0.203756 0.622211 N1 -0.783289 1.94969e-16 0.621658 N2 -0.902861 6.81889e-17 0.429934 + txt003 +STRI + V0 -1.5 0 2.4 V1 -1.44722 -0.402778 2.4 V2 -1.41495 -0.393796 2.45469 + N0 -0.902861 6.81889e-17 0.429934 N1 -0.871509 -0.234929 0.430442 N2 -0.755869 -0.203756 0.622211 + txt003 +STRI + V0 -1.4 0 2.4 V1 -1.35074 0.375926 2.4 V2 -1.33276 0.370922 2.45469 + N0 0.902861 0 -0.429934 N1 0.871509 -0.234929 -0.430442 N2 0.953562 -0.257047 -0.156989 + txt003 +STRI + V0 -1.33276 0.370922 2.45469 V1 -1.38137 0 2.45469 V2 -1.4 0 2.4 + N0 0.953562 -0.257047 -0.156989 N1 0.987636 0 -0.156768 N2 0.902861 0 -0.429934 + txt003 +STRI + V0 -1.35074 0.375926 2.4 V1 -1.21126 0.711407 2.4 V2 -1.19514 0.701938 2.45469 + N0 0.871509 -0.234929 -0.430442 N1 0.780517 -0.4527 -0.43111 N2 0.854265 -0.495474 -0.157281 + txt003 +STRI + V0 -1.19514 0.701938 2.45469 V1 -1.33276 0.370922 2.45469 V2 -1.35074 0.375926 2.4 + N0 0.854265 -0.495474 -0.157281 N1 0.953562 -0.257047 -0.156989 N2 0.871509 -0.234929 -0.430442 + txt003 +STRI + V0 -1.21126 0.711407 2.4 V1 -0.994 0.994 2.4 V2 -0.98077 0.98077 2.45469 + N0 0.780517 -0.4527 -0.43111 N1 0.637936 -0.637936 -0.431366 N2 0.698293 -0.698293 -0.157393 + txt003 +STRI + V0 -0.98077 0.98077 2.45469 V1 -1.19514 0.701938 2.45469 V2 -1.21126 0.711407 2.4 + N0 0.698293 -0.698293 -0.157393 N1 0.854265 -0.495474 -0.157281 N2 0.780517 -0.4527 -0.43111 + txt003 +STRI + V0 -0.994 0.994 2.4 V1 -0.711407 1.21126 2.4 V2 -0.701938 1.19514 2.45469 + N0 0.637936 -0.637936 -0.431366 N1 0.4527 -0.780517 -0.43111 N2 0.495474 -0.854265 -0.157281 + txt003 +STRI + V0 -0.701938 1.19514 2.45469 V1 -0.98077 0.98077 2.45469 V2 -0.994 0.994 2.4 + N0 0.495474 -0.854265 -0.157281 N1 0.698293 -0.698293 -0.157393 N2 0.637936 -0.637936 -0.431366 + txt003 +STRI + V0 -0.711407 1.21126 2.4 V1 -0.375926 1.35074 2.4 V2 -0.370922 1.33276 2.45469 + N0 0.4527 -0.780517 -0.43111 N1 0.234929 -0.871509 -0.430442 N2 0.257047 -0.953562 -0.156989 + txt003 +STRI + V0 -0.370922 1.33276 2.45469 V1 -0.701938 1.19514 2.45469 V2 -0.711407 1.21126 2.4 + N0 0.257047 -0.953562 -0.156989 N1 0.495474 -0.854265 -0.157281 N2 0.4527 -0.780517 -0.43111 + txt003 +STRI + V0 -0.375926 1.35074 2.4 V1 0 1.4 2.4 V2 0 1.38137 2.45469 + N0 0.234929 -0.871509 -0.430442 N1 -7.30595e-17 -0.902861 -0.429934 N2 9.89971e-17 -0.987636 -0.156768 + txt003 +STRI + V0 0 1.38137 2.45469 V1 -0.370922 1.33276 2.45469 V2 -0.375926 1.35074 2.4 + N0 9.89971e-17 -0.987636 -0.156768 N1 0.257047 -0.953562 -0.156989 N2 0.234929 -0.871509 -0.430442 + txt003 +STRI + V0 -1.38137 0 2.45469 V1 -1.33276 0.370922 2.45469 V2 -1.33555 0.371699 2.4875 + N0 0.987636 0 -0.156768 N1 0.953562 -0.257047 -0.156989 N2 0.849414 -0.228972 0.475466 + txt003 +STRI + V0 -1.33555 0.371699 2.4875 V1 -1.38426 0 2.4875 V2 -1.38137 0 2.45469 + N0 0.849414 -0.228972 0.475466 N1 0.880022 -0 0.474933 N2 0.987636 0 -0.156768 + txt003 +STRI + V0 -1.33276 0.370922 2.45469 V1 -1.19514 0.701938 2.45469 V2 -1.19764 0.703409 2.4875 + N0 0.953562 -0.257047 -0.156989 N1 0.854265 -0.495474 -0.157281 N2 0.760669 -0.441188 0.476167 + txt003 +STRI + V0 -1.19764 0.703409 2.4875 V1 -1.33555 0.371699 2.4875 V2 -1.33276 0.370922 2.45469 + N0 0.760669 -0.441188 0.476167 N1 0.849414 -0.228972 0.475466 N2 0.953562 -0.257047 -0.156989 + txt003 +STRI + V0 -1.19514 0.701938 2.45469 V1 -0.98077 0.98077 2.45469 V2 -0.982824 0.982824 2.4875 + N0 0.854265 -0.495474 -0.157281 N1 0.698293 -0.698293 -0.157393 N2 0.621695 -0.621695 0.476435 + txt003 +STRI + V0 -0.982824 0.982824 2.4875 V1 -1.19764 0.703409 2.4875 V2 -1.19514 0.701938 2.45469 + N0 0.621695 -0.621695 0.476435 N1 0.760669 -0.441188 0.476167 N2 0.854265 -0.495474 -0.157281 + txt003 +STRI + V0 -0.98077 0.98077 2.45469 V1 -0.701938 1.19514 2.45469 V2 -0.703409 1.19764 2.4875 + N0 0.698293 -0.698293 -0.157393 N1 0.495474 -0.854265 -0.157281 N2 0.441188 -0.760669 0.476167 + txt003 +STRI + V0 -0.703409 1.19764 2.4875 V1 -0.982824 0.982824 2.4875 V2 -0.98077 0.98077 2.45469 + N0 0.441188 -0.760669 0.476167 N1 0.621695 -0.621695 0.476435 N2 0.698293 -0.698293 -0.157393 + txt003 +STRI + V0 -0.701938 1.19514 2.45469 V1 -0.370922 1.33276 2.45469 V2 -0.371699 1.33555 2.4875 + N0 0.495474 -0.854265 -0.157281 N1 0.257047 -0.953562 -0.156989 N2 0.228972 -0.849414 0.475466 + txt003 +STRI + V0 -0.371699 1.33555 2.4875 V1 -0.703409 1.19764 2.4875 V2 -0.701938 1.19514 2.45469 + N0 0.228972 -0.849414 0.475466 N1 0.441188 -0.760669 0.476167 N2 0.495474 -0.854265 -0.157281 + txt003 +STRI + V0 -0.370922 1.33276 2.45469 V1 0 1.38137 2.45469 V2 0 1.38426 2.4875 + N0 0.257047 -0.953562 -0.156989 N1 9.89971e-17 -0.987636 -0.156768 N2 6.08179e-16 -0.880022 0.474933 + txt003 +STRI + V0 0 1.38426 2.4875 V1 -0.371699 1.33555 2.4875 V2 -0.370922 1.33276 2.45469 + N0 6.08179e-16 -0.880022 0.474933 N1 0.228972 -0.849414 0.475466 N2 0.257047 -0.953562 -0.156989 + txt003 +STRI + V0 -1.38426 0 2.4875 V1 -1.33555 0.371699 2.4875 V2 -1.35376 0.376765 2.49844 + N0 0.880022 -0 0.474933 N1 0.849414 -0.228972 0.475466 N2 -2.13636e-15 5.93089e-16 1 + txt003 +STRI + V0 -1.35376 0.376765 2.49844 V1 -1.40312 0 2.49844 V2 -1.38426 0 2.4875 + N0 -2.13636e-15 5.93089e-16 1 N1 -2.22045e-15 0 1 N2 0.880022 -0 0.474933 + txt003 +STRI + V0 -1.33555 0.371699 2.4875 V1 -1.19764 0.703409 2.4875 V2 -1.21396 0.712995 2.49844 + N0 0.849414 -0.228972 0.475466 N1 0.760669 -0.441188 0.476167 N2 -1.87966e-15 1.16933e-15 1 + txt003 +STRI + V0 -1.21396 0.712995 2.49844 V1 -1.35376 0.376765 2.49844 V2 -1.33555 0.371699 2.4875 + N0 -1.87966e-15 1.16933e-15 1 N1 -2.13636e-15 5.93089e-16 1 N2 0.849414 -0.228972 0.475466 + txt003 +STRI + V0 -1.19764 0.703409 2.4875 V1 -0.982824 0.982824 2.4875 V2 -0.996219 0.996219 2.49844 + N0 0.760669 -0.441188 0.476167 N1 0.621695 -0.621695 0.476435 N2 -1.4538e-15 1.67359e-15 1 + txt003 +STRI + V0 -0.996219 0.996219 2.49844 V1 -1.21396 0.712995 2.49844 V2 -1.19764 0.703409 2.4875 + N0 -1.4538e-15 1.67359e-15 1 N1 -1.87966e-15 1.16933e-15 1 N2 0.760669 -0.441188 0.476167 + txt003 +STRI + V0 -0.982824 0.982824 2.4875 V1 -0.703409 1.19764 2.4875 V2 -0.712995 1.21396 2.49844 + N0 0.621695 -0.621695 0.476435 N1 0.441188 -0.760669 0.476167 N2 -8.74229e-16 2.05298e-15 1 + txt003 +STRI + V0 -0.712995 1.21396 2.49844 V1 -0.996219 0.996219 2.49844 V2 -0.982824 0.982824 2.4875 + N0 -8.74229e-16 2.05298e-15 1 N1 -1.4538e-15 1.67359e-15 1 N2 0.621695 -0.621695 0.476435 + txt003 +STRI + V0 -0.703409 1.19764 2.4875 V1 -0.371699 1.33555 2.4875 V2 -0.376765 1.35376 2.49844 + N0 0.441188 -0.760669 0.476167 N1 0.228972 -0.849414 0.475466 N2 -1.77072e-16 2.25214e-15 1 + txt003 +STRI + V0 -0.376765 1.35376 2.49844 V1 -0.712995 1.21396 2.49844 V2 -0.703409 1.19764 2.4875 + N0 -1.77072e-16 2.25214e-15 1 N1 -8.74229e-16 2.05298e-15 1 N2 0.441188 -0.760669 0.476167 + txt003 +STRI + V0 -0.371699 1.33555 2.4875 V1 0 1.38426 2.4875 V2 0 1.40312 2.49844 + N0 0.228972 -0.849414 0.475466 N1 6.08179e-16 -0.880022 0.474933 N2 5.65179e-16 2.22045e-15 1 + txt003 +STRI + V0 0 1.40312 2.49844 V1 -0.376765 1.35376 2.49844 V2 -0.371699 1.33555 2.4875 + N0 5.65179e-16 2.22045e-15 1 N1 -1.77072e-16 2.25214e-15 1 N2 0.228972 -0.849414 0.475466 + txt003 +STRI + V0 -1.40312 0 2.49844 V1 -1.35376 0.376765 2.49844 V2 -1.38201 0.384628 2.4875 + N0 -2.22045e-15 0 1 N1 -2.13636e-15 5.93089e-16 1 N2 -0.537012 0.14476 0.831061 + txt003 +STRI + V0 -1.38201 0.384628 2.4875 V1 -1.43241 0 2.4875 V2 -1.40312 0 2.49844 + N0 -0.537012 0.14476 0.831061 N1 -0.556738 0 0.830688 N2 -2.22045e-15 0 1 + txt003 +STRI + V0 -1.35376 0.376765 2.49844 V1 -1.21396 0.712995 2.49844 V2 -1.2393 0.727875 2.4875 + N0 -2.13636e-15 5.93089e-16 1 N1 -1.87966e-15 1.16933e-15 1 N2 -0.480481 0.278679 0.83155 + txt003 +STRI + V0 -1.2393 0.727875 2.4875 V1 -1.38201 0.384628 2.4875 V2 -1.35376 0.376765 2.49844 + N0 -0.480481 0.278679 0.83155 N1 -0.537012 0.14476 0.831061 N2 -2.13636e-15 5.93089e-16 1 + txt003 +STRI + V0 -1.21396 0.712995 2.49844 V1 -0.996219 0.996219 2.49844 V2 -1.01701 1.01701 2.4875 + N0 -1.87966e-15 1.16933e-15 1 N1 -1.4538e-15 1.67359e-15 1 N2 -0.392564 0.392564 0.831737 + txt003 +STRI + V0 -1.01701 1.01701 2.4875 V1 -1.2393 0.727875 2.4875 V2 -1.21396 0.712995 2.49844 + N0 -0.392564 0.392564 0.831737 N1 -0.480481 0.278679 0.83155 N2 -1.87966e-15 1.16933e-15 1 + txt003 +STRI + V0 -0.996219 0.996219 2.49844 V1 -0.712995 1.21396 2.49844 V2 -0.727875 1.2393 2.4875 + N0 -1.4538e-15 1.67359e-15 1 N1 -8.74229e-16 2.05298e-15 1 N2 -0.278679 0.480481 0.83155 + txt003 +STRI + V0 -0.727875 1.2393 2.4875 V1 -1.01701 1.01701 2.4875 V2 -0.996219 0.996219 2.49844 + N0 -0.278679 0.480481 0.83155 N1 -0.392564 0.392564 0.831737 N2 -1.4538e-15 1.67359e-15 1 + txt003 +STRI + V0 -0.712995 1.21396 2.49844 V1 -0.376765 1.35376 2.49844 V2 -0.384628 1.38201 2.4875 + N0 -8.74229e-16 2.05298e-15 1 N1 -1.77072e-16 2.25214e-15 1 N2 -0.14476 0.537012 0.831061 + txt003 +STRI + V0 -0.384628 1.38201 2.4875 V1 -0.727875 1.2393 2.4875 V2 -0.712995 1.21396 2.49844 + N0 -0.14476 0.537012 0.831061 N1 -0.278679 0.480481 0.83155 N2 -8.74229e-16 2.05298e-15 1 + txt003 +STRI + V0 -0.376765 1.35376 2.49844 V1 0 1.40312 2.49844 V2 0 1.43241 2.4875 + N0 -1.77072e-16 2.25214e-15 1 N1 5.65179e-16 2.22045e-15 1 N2 4.5989e-16 0.556738 0.830688 + txt003 +STRI + V0 0 1.43241 2.4875 V1 -0.384628 1.38201 2.4875 V2 -0.376765 1.35376 2.49844 + N0 4.5989e-16 0.556738 0.830688 N1 -0.14476 0.537012 0.831061 N2 -1.77072e-16 2.25214e-15 1 + txt003 +STRI + V0 -1.43241 0 2.4875 V1 -1.38201 0.384628 2.4875 V2 -1.41495 0.393796 2.45469 + N0 -0.556738 0 0.830688 N1 -0.537012 0.14476 0.831061 N2 -0.755869 0.203756 0.622211 + txt003 +STRI + V0 -1.41495 0.393796 2.45469 V1 -1.46655 0 2.45469 V2 -1.43241 0 2.4875 + N0 -0.755869 0.203756 0.622211 N1 -0.783289 0 0.621658 N2 -0.556738 0 0.830688 + txt003 +STRI + V0 -1.38201 0.384628 2.4875 V1 -1.2393 0.727875 2.4875 V2 -1.26884 0.745225 2.45469 + N0 -0.537012 0.14476 0.831061 N1 -0.480481 0.278679 0.83155 N2 -0.67669 0.39248 0.622937 + txt003 +STRI + V0 -1.26884 0.745225 2.45469 V1 -1.41495 0.393796 2.45469 V2 -1.38201 0.384628 2.4875 + N0 -0.67669 0.39248 0.622937 N1 -0.755869 0.203756 0.622211 N2 -0.537012 0.14476 0.831061 + txt003 +STRI + V0 -1.2393 0.727875 2.4875 V1 -1.01701 1.01701 2.4875 V2 -1.04125 1.04125 2.45469 + N0 -0.480481 0.278679 0.83155 N1 -0.392564 0.392564 0.831737 N2 -0.552993 0.552993 0.623215 + txt003 +STRI + V0 -1.04125 1.04125 2.45469 V1 -1.26884 0.745225 2.45469 V2 -1.2393 0.727875 2.4875 + N0 -0.552993 0.552993 0.623215 N1 -0.67669 0.39248 0.622937 N2 -0.480481 0.278679 0.83155 + txt003 +STRI + V0 -1.01701 1.01701 2.4875 V1 -0.727875 1.2393 2.4875 V2 -0.745225 1.26884 2.45469 + N0 -0.392564 0.392564 0.831737 N1 -0.278679 0.480481 0.83155 N2 -0.39248 0.67669 0.622937 + txt003 +STRI + V0 -0.745225 1.26884 2.45469 V1 -1.04125 1.04125 2.45469 V2 -1.01701 1.01701 2.4875 + N0 -0.39248 0.67669 0.622937 N1 -0.552993 0.552993 0.623215 N2 -0.392564 0.392564 0.831737 + txt003 +STRI + V0 -0.727875 1.2393 2.4875 V1 -0.384628 1.38201 2.4875 V2 -0.393796 1.41495 2.45469 + N0 -0.278679 0.480481 0.83155 N1 -0.14476 0.537012 0.831061 N2 -0.203756 0.755869 0.622211 + txt003 +STRI + V0 -0.393796 1.41495 2.45469 V1 -0.745225 1.26884 2.45469 V2 -0.727875 1.2393 2.4875 + N0 -0.203756 0.755869 0.622211 N1 -0.39248 0.67669 0.622937 N2 -0.278679 0.480481 0.83155 + txt003 +STRI + V0 -0.384628 1.38201 2.4875 V1 0 1.43241 2.4875 V2 0 1.46655 2.45469 + N0 -0.14476 0.537012 0.831061 N1 4.5989e-16 0.556738 0.830688 N2 1.94969e-16 0.783289 0.621658 + txt003 +STRI + V0 0 1.46655 2.45469 V1 -0.393796 1.41495 2.45469 V2 -0.384628 1.38201 2.4875 + N0 1.94969e-16 0.783289 0.621658 N1 -0.203756 0.755869 0.622211 N2 -0.14476 0.537012 0.831061 + txt003 +STRI + V0 -1.46655 0 2.45469 V1 -1.41495 0.393796 2.45469 V2 -1.44722 0.402778 2.4 + N0 -0.783289 0 0.621658 N1 -0.755869 0.203756 0.622211 N2 -0.871509 0.234929 0.430442 + txt003 +STRI + V0 -1.44722 0.402778 2.4 V1 -1.5 0 2.4 V2 -1.46655 0 2.45469 + N0 -0.871509 0.234929 0.430442 N1 -0.902861 0 0.429934 N2 -0.783289 0 0.621658 + txt003 +STRI + V0 -1.41495 0.393796 2.45469 V1 -1.26884 0.745225 2.45469 V2 -1.29778 0.762222 2.4 + N0 -0.755869 0.203756 0.622211 N1 -0.67669 0.39248 0.622937 N2 -0.780517 0.4527 0.43111 + txt003 +STRI + V0 -1.29778 0.762222 2.4 V1 -1.44722 0.402778 2.4 V2 -1.41495 0.393796 2.45469 + N0 -0.780517 0.4527 0.43111 N1 -0.871509 0.234929 0.430442 N2 -0.755869 0.203756 0.622211 + txt003 +STRI + V0 -1.26884 0.745225 2.45469 V1 -1.04125 1.04125 2.45469 V2 -1.065 1.065 2.4 + N0 -0.67669 0.39248 0.622937 N1 -0.552993 0.552993 0.623215 N2 -0.637936 0.637936 0.431366 + txt003 +STRI + V0 -1.065 1.065 2.4 V1 -1.29778 0.762222 2.4 V2 -1.26884 0.745225 2.45469 + N0 -0.637936 0.637936 0.431366 N1 -0.780517 0.4527 0.43111 N2 -0.67669 0.39248 0.622937 + txt003 +STRI + V0 -1.04125 1.04125 2.45469 V1 -0.745225 1.26884 2.45469 V2 -0.762222 1.29778 2.4 + N0 -0.552993 0.552993 0.623215 N1 -0.39248 0.67669 0.622937 N2 -0.4527 0.780517 0.43111 + txt003 +STRI + V0 -0.762222 1.29778 2.4 V1 -1.065 1.065 2.4 V2 -1.04125 1.04125 2.45469 + N0 -0.4527 0.780517 0.43111 N1 -0.637936 0.637936 0.431366 N2 -0.552993 0.552993 0.623215 + txt003 +STRI + V0 -0.745225 1.26884 2.45469 V1 -0.393796 1.41495 2.45469 V2 -0.402778 1.44722 2.4 + N0 -0.39248 0.67669 0.622937 N1 -0.203756 0.755869 0.622211 N2 -0.234929 0.871509 0.430442 + txt003 +STRI + V0 -0.402778 1.44722 2.4 V1 -0.762222 1.29778 2.4 V2 -0.745225 1.26884 2.45469 + N0 -0.234929 0.871509 0.430442 N1 -0.4527 0.780517 0.43111 N2 -0.39248 0.67669 0.622937 + txt003 +STRI + V0 -0.393796 1.41495 2.45469 V1 0 1.46655 2.45469 V2 0 1.5 2.4 + N0 -0.203756 0.755869 0.622211 N1 1.94969e-16 0.783289 0.621658 N2 6.81889e-17 0.902861 0.429934 + txt003 +STRI + V0 0 1.5 2.4 V1 -0.402778 1.44722 2.4 V2 -0.393796 1.41495 2.45469 + N0 6.81889e-17 0.902861 0.429934 N1 -0.234929 0.871509 0.430442 N2 -0.203756 0.755869 0.622211 + txt003 +STRI + V0 0 1.4 2.4 V1 0.375926 1.35074 2.4 V2 0.370922 1.33276 2.45469 + N0 0 -0.902861 -0.429934 N1 -0.234929 -0.871509 -0.430442 N2 -0.257047 -0.953562 -0.156989 + txt003 +STRI + V0 0.370922 1.33276 2.45469 V1 0 1.38137 2.45469 V2 0 1.4 2.4 + N0 -0.257047 -0.953562 -0.156989 N1 0 -0.987636 -0.156768 N2 0 -0.902861 -0.429934 + txt003 +STRI + V0 0.375926 1.35074 2.4 V1 0.711407 1.21126 2.4 V2 0.701938 1.19514 2.45469 + N0 -0.234929 -0.871509 -0.430442 N1 -0.4527 -0.780517 -0.43111 N2 -0.495474 -0.854265 -0.157281 + txt003 +STRI + V0 0.701938 1.19514 2.45469 V1 0.370922 1.33276 2.45469 V2 0.375926 1.35074 2.4 + N0 -0.495474 -0.854265 -0.157281 N1 -0.257047 -0.953562 -0.156989 N2 -0.234929 -0.871509 -0.430442 + txt003 +STRI + V0 0.711407 1.21126 2.4 V1 0.994 0.994 2.4 V2 0.98077 0.98077 2.45469 + N0 -0.4527 -0.780517 -0.43111 N1 -0.637936 -0.637936 -0.431366 N2 -0.698293 -0.698293 -0.157393 + txt003 +STRI + V0 0.98077 0.98077 2.45469 V1 0.701938 1.19514 2.45469 V2 0.711407 1.21126 2.4 + N0 -0.698293 -0.698293 -0.157393 N1 -0.495474 -0.854265 -0.157281 N2 -0.4527 -0.780517 -0.43111 + txt003 +STRI + V0 0.994 0.994 2.4 V1 1.21126 0.711407 2.4 V2 1.19514 0.701938 2.45469 + N0 -0.637936 -0.637936 -0.431366 N1 -0.780517 -0.4527 -0.43111 N2 -0.854265 -0.495474 -0.157281 + txt003 +STRI + V0 1.19514 0.701938 2.45469 V1 0.98077 0.98077 2.45469 V2 0.994 0.994 2.4 + N0 -0.854265 -0.495474 -0.157281 N1 -0.698293 -0.698293 -0.157393 N2 -0.637936 -0.637936 -0.431366 + txt003 +STRI + V0 1.21126 0.711407 2.4 V1 1.35074 0.375926 2.4 V2 1.33276 0.370922 2.45469 + N0 -0.780517 -0.4527 -0.43111 N1 -0.871509 -0.234929 -0.430442 N2 -0.953562 -0.257047 -0.156989 + txt003 +STRI + V0 1.33276 0.370922 2.45469 V1 1.19514 0.701938 2.45469 V2 1.21126 0.711407 2.4 + N0 -0.953562 -0.257047 -0.156989 N1 -0.854265 -0.495474 -0.157281 N2 -0.780517 -0.4527 -0.43111 + txt003 +STRI + V0 1.35074 0.375926 2.4 V1 1.4 0 2.4 V2 1.38137 0 2.45469 + N0 -0.871509 -0.234929 -0.430442 N1 -0.902861 7.30595e-17 -0.429934 N2 -0.987636 -9.89971e-17 -0.156768 + txt003 +STRI + V0 1.38137 0 2.45469 V1 1.33276 0.370922 2.45469 V2 1.35074 0.375926 2.4 + N0 -0.987636 -9.89971e-17 -0.156768 N1 -0.953562 -0.257047 -0.156989 N2 -0.871509 -0.234929 -0.430442 + txt003 +STRI + V0 0 1.38137 2.45469 V1 0.370922 1.33276 2.45469 V2 0.371699 1.33555 2.4875 + N0 0 -0.987636 -0.156768 N1 -0.257047 -0.953562 -0.156989 N2 -0.228972 -0.849414 0.475466 + txt003 +STRI + V0 0.371699 1.33555 2.4875 V1 0 1.38426 2.4875 V2 0 1.38137 2.45469 + N0 -0.228972 -0.849414 0.475466 N1 0 -0.880022 0.474933 N2 0 -0.987636 -0.156768 + txt003 +STRI + V0 0.370922 1.33276 2.45469 V1 0.701938 1.19514 2.45469 V2 0.703409 1.19764 2.4875 + N0 -0.257047 -0.953562 -0.156989 N1 -0.495474 -0.854265 -0.157281 N2 -0.441188 -0.760669 0.476167 + txt003 +STRI + V0 0.703409 1.19764 2.4875 V1 0.371699 1.33555 2.4875 V2 0.370922 1.33276 2.45469 + N0 -0.441188 -0.760669 0.476167 N1 -0.228972 -0.849414 0.475466 N2 -0.257047 -0.953562 -0.156989 + txt003 +STRI + V0 0.701938 1.19514 2.45469 V1 0.98077 0.98077 2.45469 V2 0.982824 0.982824 2.4875 + N0 -0.495474 -0.854265 -0.157281 N1 -0.698293 -0.698293 -0.157393 N2 -0.621695 -0.621695 0.476435 + txt003 +STRI + V0 0.982824 0.982824 2.4875 V1 0.703409 1.19764 2.4875 V2 0.701938 1.19514 2.45469 + N0 -0.621695 -0.621695 0.476435 N1 -0.441188 -0.760669 0.476167 N2 -0.495474 -0.854265 -0.157281 + txt003 +STRI + V0 0.98077 0.98077 2.45469 V1 1.19514 0.701938 2.45469 V2 1.19764 0.703409 2.4875 + N0 -0.698293 -0.698293 -0.157393 N1 -0.854265 -0.495474 -0.157281 N2 -0.760669 -0.441188 0.476167 + txt003 +STRI + V0 1.19764 0.703409 2.4875 V1 0.982824 0.982824 2.4875 V2 0.98077 0.98077 2.45469 + N0 -0.760669 -0.441188 0.476167 N1 -0.621695 -0.621695 0.476435 N2 -0.698293 -0.698293 -0.157393 + txt003 +STRI + V0 1.19514 0.701938 2.45469 V1 1.33276 0.370922 2.45469 V2 1.33555 0.371699 2.4875 + N0 -0.854265 -0.495474 -0.157281 N1 -0.953562 -0.257047 -0.156989 N2 -0.849414 -0.228972 0.475466 + txt003 +STRI + V0 1.33555 0.371699 2.4875 V1 1.19764 0.703409 2.4875 V2 1.19514 0.701938 2.45469 + N0 -0.849414 -0.228972 0.475466 N1 -0.760669 -0.441188 0.476167 N2 -0.854265 -0.495474 -0.157281 + txt003 +STRI + V0 1.33276 0.370922 2.45469 V1 1.38137 0 2.45469 V2 1.38426 0 2.4875 + N0 -0.953562 -0.257047 -0.156989 N1 -0.987636 -9.89971e-17 -0.156768 N2 -0.880022 -6.08179e-16 0.474933 + txt003 +STRI + V0 1.38426 0 2.4875 V1 1.33555 0.371699 2.4875 V2 1.33276 0.370922 2.45469 + N0 -0.880022 -6.08179e-16 0.474933 N1 -0.849414 -0.228972 0.475466 N2 -0.953562 -0.257047 -0.156989 + txt003 +STRI + V0 0 1.38426 2.4875 V1 0.371699 1.33555 2.4875 V2 0.376765 1.35376 2.49844 + N0 0 -0.880022 0.474933 N1 -0.228972 -0.849414 0.475466 N2 5.93089e-16 2.13636e-15 1 + txt003 +STRI + V0 0.376765 1.35376 2.49844 V1 0 1.40312 2.49844 V2 0 1.38426 2.4875 + N0 5.93089e-16 2.13636e-15 1 N1 -0 2.22045e-15 1 N2 0 -0.880022 0.474933 + txt003 +STRI + V0 0.371699 1.33555 2.4875 V1 0.703409 1.19764 2.4875 V2 0.712995 1.21396 2.49844 + N0 -0.228972 -0.849414 0.475466 N1 -0.441188 -0.760669 0.476167 N2 1.16933e-15 1.87966e-15 1 + txt003 +STRI + V0 0.712995 1.21396 2.49844 V1 0.376765 1.35376 2.49844 V2 0.371699 1.33555 2.4875 + N0 1.16933e-15 1.87966e-15 1 N1 5.93089e-16 2.13636e-15 1 N2 -0.228972 -0.849414 0.475466 + txt003 +STRI + V0 0.703409 1.19764 2.4875 V1 0.982824 0.982824 2.4875 V2 0.996219 0.996219 2.49844 + N0 -0.441188 -0.760669 0.476167 N1 -0.621695 -0.621695 0.476435 N2 1.67359e-15 1.4538e-15 1 + txt003 +STRI + V0 0.996219 0.996219 2.49844 V1 0.712995 1.21396 2.49844 V2 0.703409 1.19764 2.4875 + N0 1.67359e-15 1.4538e-15 1 N1 1.16933e-15 1.87966e-15 1 N2 -0.441188 -0.760669 0.476167 + txt003 +STRI + V0 0.982824 0.982824 2.4875 V1 1.19764 0.703409 2.4875 V2 1.21396 0.712995 2.49844 + N0 -0.621695 -0.621695 0.476435 N1 -0.760669 -0.441188 0.476167 N2 2.05298e-15 8.74229e-16 1 + txt003 +STRI + V0 1.21396 0.712995 2.49844 V1 0.996219 0.996219 2.49844 V2 0.982824 0.982824 2.4875 + N0 2.05298e-15 8.74229e-16 1 N1 1.67359e-15 1.4538e-15 1 N2 -0.621695 -0.621695 0.476435 + txt003 +STRI + V0 1.19764 0.703409 2.4875 V1 1.33555 0.371699 2.4875 V2 1.35376 0.376765 2.49844 + N0 -0.760669 -0.441188 0.476167 N1 -0.849414 -0.228972 0.475466 N2 2.25214e-15 1.77072e-16 1 + txt003 +STRI + V0 1.35376 0.376765 2.49844 V1 1.21396 0.712995 2.49844 V2 1.19764 0.703409 2.4875 + N0 2.25214e-15 1.77072e-16 1 N1 2.05298e-15 8.74229e-16 1 N2 -0.760669 -0.441188 0.476167 + txt003 +STRI + V0 1.33555 0.371699 2.4875 V1 1.38426 0 2.4875 V2 1.40312 0 2.49844 + N0 -0.849414 -0.228972 0.475466 N1 -0.880022 -6.08179e-16 0.474933 N2 2.22045e-15 -5.65179e-16 1 + txt003 +STRI + V0 1.40312 0 2.49844 V1 1.35376 0.376765 2.49844 V2 1.33555 0.371699 2.4875 + N0 2.22045e-15 -5.65179e-16 1 N1 2.25214e-15 1.77072e-16 1 N2 -0.849414 -0.228972 0.475466 + txt003 +STRI + V0 0 1.40312 2.49844 V1 0.376765 1.35376 2.49844 V2 0.384628 1.38201 2.4875 + N0 -0 2.22045e-15 1 N1 5.93089e-16 2.13636e-15 1 N2 0.14476 0.537012 0.831061 + txt003 +STRI + V0 0.384628 1.38201 2.4875 V1 0 1.43241 2.4875 V2 0 1.40312 2.49844 + N0 0.14476 0.537012 0.831061 N1 -0 0.556738 0.830688 N2 -0 2.22045e-15 1 + txt003 +STRI + V0 0.376765 1.35376 2.49844 V1 0.712995 1.21396 2.49844 V2 0.727875 1.2393 2.4875 + N0 5.93089e-16 2.13636e-15 1 N1 1.16933e-15 1.87966e-15 1 N2 0.278679 0.480481 0.83155 + txt003 +STRI + V0 0.727875 1.2393 2.4875 V1 0.384628 1.38201 2.4875 V2 0.376765 1.35376 2.49844 + N0 0.278679 0.480481 0.83155 N1 0.14476 0.537012 0.831061 N2 5.93089e-16 2.13636e-15 1 + txt003 +STRI + V0 0.712995 1.21396 2.49844 V1 0.996219 0.996219 2.49844 V2 1.01701 1.01701 2.4875 + N0 1.16933e-15 1.87966e-15 1 N1 1.67359e-15 1.4538e-15 1 N2 0.392564 0.392564 0.831737 + txt003 +STRI + V0 1.01701 1.01701 2.4875 V1 0.727875 1.2393 2.4875 V2 0.712995 1.21396 2.49844 + N0 0.392564 0.392564 0.831737 N1 0.278679 0.480481 0.83155 N2 1.16933e-15 1.87966e-15 1 + txt003 +STRI + V0 0.996219 0.996219 2.49844 V1 1.21396 0.712995 2.49844 V2 1.2393 0.727875 2.4875 + N0 1.67359e-15 1.4538e-15 1 N1 2.05298e-15 8.74229e-16 1 N2 0.480481 0.278679 0.83155 + txt003 +STRI + V0 1.2393 0.727875 2.4875 V1 1.01701 1.01701 2.4875 V2 0.996219 0.996219 2.49844 + N0 0.480481 0.278679 0.83155 N1 0.392564 0.392564 0.831737 N2 1.67359e-15 1.4538e-15 1 + txt003 +STRI + V0 1.21396 0.712995 2.49844 V1 1.35376 0.376765 2.49844 V2 1.38201 0.384628 2.4875 + N0 2.05298e-15 8.74229e-16 1 N1 2.25214e-15 1.77072e-16 1 N2 0.537012 0.14476 0.831061 + txt003 +STRI + V0 1.38201 0.384628 2.4875 V1 1.2393 0.727875 2.4875 V2 1.21396 0.712995 2.49844 + N0 0.537012 0.14476 0.831061 N1 0.480481 0.278679 0.83155 N2 2.05298e-15 8.74229e-16 1 + txt003 +STRI + V0 1.35376 0.376765 2.49844 V1 1.40312 0 2.49844 V2 1.43241 0 2.4875 + N0 2.25214e-15 1.77072e-16 1 N1 2.22045e-15 -5.65179e-16 1 N2 0.556738 -4.5989e-16 0.830688 + txt003 +STRI + V0 1.43241 0 2.4875 V1 1.38201 0.384628 2.4875 V2 1.35376 0.376765 2.49844 + N0 0.556738 -4.5989e-16 0.830688 N1 0.537012 0.14476 0.831061 N2 2.25214e-15 1.77072e-16 1 + txt003 +STRI + V0 0 1.43241 2.4875 V1 0.384628 1.38201 2.4875 V2 0.393796 1.41495 2.45469 + N0 -0 0.556738 0.830688 N1 0.14476 0.537012 0.831061 N2 0.203756 0.755869 0.622211 + txt003 +STRI + V0 0.393796 1.41495 2.45469 V1 0 1.46655 2.45469 V2 0 1.43241 2.4875 + N0 0.203756 0.755869 0.622211 N1 -0 0.783289 0.621658 N2 -0 0.556738 0.830688 + txt003 +STRI + V0 0.384628 1.38201 2.4875 V1 0.727875 1.2393 2.4875 V2 0.745225 1.26884 2.45469 + N0 0.14476 0.537012 0.831061 N1 0.278679 0.480481 0.83155 N2 0.39248 0.67669 0.622937 + txt003 +STRI + V0 0.745225 1.26884 2.45469 V1 0.393796 1.41495 2.45469 V2 0.384628 1.38201 2.4875 + N0 0.39248 0.67669 0.622937 N1 0.203756 0.755869 0.622211 N2 0.14476 0.537012 0.831061 + txt003 +STRI + V0 0.727875 1.2393 2.4875 V1 1.01701 1.01701 2.4875 V2 1.04125 1.04125 2.45469 + N0 0.278679 0.480481 0.83155 N1 0.392564 0.392564 0.831737 N2 0.552993 0.552993 0.623215 + txt003 +STRI + V0 1.04125 1.04125 2.45469 V1 0.745225 1.26884 2.45469 V2 0.727875 1.2393 2.4875 + N0 0.552993 0.552993 0.623215 N1 0.39248 0.67669 0.622937 N2 0.278679 0.480481 0.83155 + txt003 +STRI + V0 1.01701 1.01701 2.4875 V1 1.2393 0.727875 2.4875 V2 1.26884 0.745225 2.45469 + N0 0.392564 0.392564 0.831737 N1 0.480481 0.278679 0.83155 N2 0.67669 0.39248 0.622937 + txt003 +STRI + V0 1.26884 0.745225 2.45469 V1 1.04125 1.04125 2.45469 V2 1.01701 1.01701 2.4875 + N0 0.67669 0.39248 0.622937 N1 0.552993 0.552993 0.623215 N2 0.392564 0.392564 0.831737 + txt003 +STRI + V0 1.2393 0.727875 2.4875 V1 1.38201 0.384628 2.4875 V2 1.41495 0.393796 2.45469 + N0 0.480481 0.278679 0.83155 N1 0.537012 0.14476 0.831061 N2 0.755869 0.203756 0.622211 + txt003 +STRI + V0 1.41495 0.393796 2.45469 V1 1.26884 0.745225 2.45469 V2 1.2393 0.727875 2.4875 + N0 0.755869 0.203756 0.622211 N1 0.67669 0.39248 0.622937 N2 0.480481 0.278679 0.83155 + txt003 +STRI + V0 1.38201 0.384628 2.4875 V1 1.43241 0 2.4875 V2 1.46655 0 2.45469 + N0 0.537012 0.14476 0.831061 N1 0.556738 -4.5989e-16 0.830688 N2 0.783289 -1.94969e-16 0.621658 + txt003 +STRI + V0 1.46655 0 2.45469 V1 1.41495 0.393796 2.45469 V2 1.38201 0.384628 2.4875 + N0 0.783289 -1.94969e-16 0.621658 N1 0.755869 0.203756 0.622211 N2 0.537012 0.14476 0.831061 + txt003 +STRI + V0 0 1.46655 2.45469 V1 0.393796 1.41495 2.45469 V2 0.402778 1.44722 2.4 + N0 -0 0.783289 0.621658 N1 0.203756 0.755869 0.622211 N2 0.234929 0.871509 0.430442 + txt003 +STRI + V0 0.402778 1.44722 2.4 V1 0 1.5 2.4 V2 0 1.46655 2.45469 + N0 0.234929 0.871509 0.430442 N1 -0 0.902861 0.429934 N2 -0 0.783289 0.621658 + txt003 +STRI + V0 0.393796 1.41495 2.45469 V1 0.745225 1.26884 2.45469 V2 0.762222 1.29778 2.4 + N0 0.203756 0.755869 0.622211 N1 0.39248 0.67669 0.622937 N2 0.4527 0.780517 0.43111 + txt003 +STRI + V0 0.762222 1.29778 2.4 V1 0.402778 1.44722 2.4 V2 0.393796 1.41495 2.45469 + N0 0.4527 0.780517 0.43111 N1 0.234929 0.871509 0.430442 N2 0.203756 0.755869 0.622211 + txt003 +STRI + V0 0.745225 1.26884 2.45469 V1 1.04125 1.04125 2.45469 V2 1.065 1.065 2.4 + N0 0.39248 0.67669 0.622937 N1 0.552993 0.552993 0.623215 N2 0.637936 0.637936 0.431366 + txt003 +STRI + V0 1.065 1.065 2.4 V1 0.762222 1.29778 2.4 V2 0.745225 1.26884 2.45469 + N0 0.637936 0.637936 0.431366 N1 0.4527 0.780517 0.43111 N2 0.39248 0.67669 0.622937 + txt003 +STRI + V0 1.04125 1.04125 2.45469 V1 1.26884 0.745225 2.45469 V2 1.29778 0.762222 2.4 + N0 0.552993 0.552993 0.623215 N1 0.67669 0.39248 0.622937 N2 0.780517 0.4527 0.43111 + txt003 +STRI + V0 1.29778 0.762222 2.4 V1 1.065 1.065 2.4 V2 1.04125 1.04125 2.45469 + N0 0.780517 0.4527 0.43111 N1 0.637936 0.637936 0.431366 N2 0.552993 0.552993 0.623215 + txt003 +STRI + V0 1.26884 0.745225 2.45469 V1 1.41495 0.393796 2.45469 V2 1.44722 0.402778 2.4 + N0 0.67669 0.39248 0.622937 N1 0.755869 0.203756 0.622211 N2 0.871509 0.234929 0.430442 + txt003 +STRI + V0 1.44722 0.402778 2.4 V1 1.29778 0.762222 2.4 V2 1.26884 0.745225 2.45469 + N0 0.871509 0.234929 0.430442 N1 0.780517 0.4527 0.43111 N2 0.67669 0.39248 0.622937 + txt003 +STRI + V0 1.41495 0.393796 2.45469 V1 1.46655 0 2.45469 V2 1.5 0 2.4 + N0 0.755869 0.203756 0.622211 N1 0.783289 -1.94969e-16 0.621658 N2 0.902861 -6.81889e-17 0.429934 + txt003 +STRI + V0 1.5 0 2.4 V1 1.44722 0.402778 2.4 V2 1.41495 0.393796 2.45469 + N0 0.902861 -6.81889e-17 0.429934 N1 0.871509 0.234929 0.430442 N2 0.755869 0.203756 0.622211 + txt003 +STRI + V0 1.5 0 2.4 V1 1.44722 -0.402778 2.4 V2 1.56671 -0.436032 2.13785 + N0 0.902861 0 0.429934 N1 0.871509 -0.234929 0.430442 N2 0.875348 -0.235963 0.422003 + txt003 +STRI + V0 1.56671 -0.436032 2.13785 V1 1.62384 0 2.13785 V2 1.5 0 2.4 + N0 0.875348 -0.235963 0.422003 N1 0.906828 0 0.4215 N2 0.902861 0 0.429934 + txt003 +STRI + V0 1.44722 -0.402778 2.4 V1 1.29778 -0.762222 2.4 V2 1.40492 -0.825153 2.13785 + N0 0.871509 -0.234929 0.430442 N1 0.780517 -0.4527 0.43111 N2 0.783966 -0.4547 0.422664 + txt003 +STRI + V0 1.40492 -0.825153 2.13785 V1 1.56671 -0.436032 2.13785 V2 1.44722 -0.402778 2.4 + N0 0.783966 -0.4547 0.422664 N1 0.875348 -0.235963 0.422003 N2 0.871509 -0.234929 0.430442 + txt003 +STRI + V0 1.29778 -0.762222 2.4 V1 1.065 -1.065 2.4 V2 1.15293 -1.15293 2.13785 + N0 0.780517 -0.4527 0.43111 N1 0.637936 -0.637936 0.431366 N2 0.640758 -0.640758 0.422917 + txt003 +STRI + V0 1.15293 -1.15293 2.13785 V1 1.40492 -0.825153 2.13785 V2 1.29778 -0.762222 2.4 + N0 0.640758 -0.640758 0.422917 N1 0.783966 -0.4547 0.422664 N2 0.780517 -0.4527 0.43111 + txt003 +STRI + V0 1.065 -1.065 2.4 V1 0.762222 -1.29778 2.4 V2 0.825153 -1.40492 2.13785 + N0 0.637936 -0.637936 0.431366 N1 0.4527 -0.780517 0.43111 N2 0.4547 -0.783966 0.422664 + txt003 +STRI + V0 0.825153 -1.40492 2.13785 V1 1.15293 -1.15293 2.13785 V2 1.065 -1.065 2.4 + N0 0.4547 -0.783966 0.422664 N1 0.640758 -0.640758 0.422917 N2 0.637936 -0.637936 0.431366 + txt003 +STRI + V0 0.762222 -1.29778 2.4 V1 0.402778 -1.44722 2.4 V2 0.436032 -1.56671 2.13785 + N0 0.4527 -0.780517 0.43111 N1 0.234929 -0.871509 0.430442 N2 0.235963 -0.875348 0.422003 + txt003 +STRI + V0 0.436032 -1.56671 2.13785 V1 0.825153 -1.40492 2.13785 V2 0.762222 -1.29778 2.4 + N0 0.235963 -0.875348 0.422003 N1 0.4547 -0.783966 0.422664 N2 0.4527 -0.780517 0.43111 + txt003 +STRI + V0 0.402778 -1.44722 2.4 V1 0 -1.5 2.4 V2 2.22045e-16 -1.62384 2.13785 + N0 0.234929 -0.871509 0.430442 N1 -2.27296e-16 -0.902861 0.429934 N2 -2.05843e-16 -0.906828 0.4215 + txt003 +STRI + V0 2.22045e-16 -1.62384 2.13785 V1 0.436032 -1.56671 2.13785 V2 0.402778 -1.44722 2.4 + N0 -2.05843e-16 -0.906828 0.4215 N1 0.235963 -0.875348 0.422003 N2 0.234929 -0.871509 0.430442 + txt003 +STRI + V0 1.62384 0 2.13785 V1 1.56671 -0.436032 2.13785 V2 1.67949 -0.467421 1.87778 + N0 0.906828 0 0.4215 N1 0.875348 -0.235963 0.422003 N2 0.886771 -0.239043 0.395595 + txt003 +STRI + V0 1.67949 -0.467421 1.87778 V1 1.74074 0 1.87778 V2 1.62384 0 2.13785 + N0 0.886771 -0.239043 0.395595 N1 0.918633 0 0.395111 N2 0.906828 0 0.4215 + txt003 +STRI + V0 1.56671 -0.436032 2.13785 V1 1.40492 -0.825153 2.13785 V2 1.50606 -0.884554 1.87778 + N0 0.875348 -0.235963 0.422003 N1 0.783966 -0.4547 0.422664 N2 0.794229 -0.460653 0.39623 + txt003 +STRI + V0 1.50606 -0.884554 1.87778 V1 1.67949 -0.467421 1.87778 V2 1.56671 -0.436032 2.13785 + N0 0.794229 -0.460653 0.39623 N1 0.886771 -0.239043 0.395595 N2 0.875348 -0.235963 0.422003 + txt003 +STRI + V0 1.40492 -0.825153 2.13785 V1 1.15293 -1.15293 2.13785 V2 1.23593 -1.23593 1.87778 + N0 0.783966 -0.4547 0.422664 N1 0.640758 -0.640758 0.422917 N2 0.649156 -0.649156 0.396474 + txt003 +STRI + V0 1.23593 -1.23593 1.87778 V1 1.50606 -0.884554 1.87778 V2 1.40492 -0.825153 2.13785 + N0 0.649156 -0.649156 0.396474 N1 0.794229 -0.460653 0.39623 N2 0.783966 -0.4547 0.422664 + txt003 +STRI + V0 1.15293 -1.15293 2.13785 V1 0.825153 -1.40492 2.13785 V2 0.884554 -1.50606 1.87778 + N0 0.640758 -0.640758 0.422917 N1 0.4547 -0.783966 0.422664 N2 0.460653 -0.794229 0.39623 + txt003 +STRI + V0 0.884554 -1.50606 1.87778 V1 1.23593 -1.23593 1.87778 V2 1.15293 -1.15293 2.13785 + N0 0.460653 -0.794229 0.39623 N1 0.649156 -0.649156 0.396474 N2 0.640758 -0.640758 0.422917 + txt003 +STRI + V0 0.825153 -1.40492 2.13785 V1 0.436032 -1.56671 2.13785 V2 0.467421 -1.67949 1.87778 + N0 0.4547 -0.783966 0.422664 N1 0.235963 -0.875348 0.422003 N2 0.239043 -0.886771 0.395595 + txt003 +STRI + V0 0.467421 -1.67949 1.87778 V1 0.884554 -1.50606 1.87778 V2 0.825153 -1.40492 2.13785 + N0 0.239043 -0.886771 0.395595 N1 0.460653 -0.794229 0.39623 N2 0.4547 -0.783966 0.422664 + txt003 +STRI + V0 0.436032 -1.56671 2.13785 V1 2.22045e-16 -1.62384 2.13785 V2 0 -1.74074 1.87778 + N0 0.235963 -0.875348 0.422003 N1 -2.05843e-16 -0.906828 0.4215 N2 -1.79998e-16 -0.918633 0.395111 + txt003 +STRI + V0 0 -1.74074 1.87778 V1 0.467421 -1.67949 1.87778 V2 0.436032 -1.56671 2.13785 + N0 -1.79998e-16 -0.918633 0.395111 N1 0.239043 -0.886771 0.395595 N2 0.235963 -0.875348 0.422003 + txt003 +STRI + V0 1.74074 0 1.87778 V1 1.67949 -0.467421 1.87778 V2 1.77888 -0.495081 1.62188 + N0 0.918633 0 0.395111 N1 0.886771 -0.239043 0.395595 N2 0.90527 -0.244029 0.347757 + txt003 +STRI + V0 1.77888 -0.495081 1.62188 V1 1.84375 0 1.62188 V2 1.74074 0 1.87778 + N0 0.90527 -0.244029 0.347757 N1 0.937749 0 0.347314 N2 0.918633 0 0.395111 + txt003 +STRI + V0 1.67949 -0.467421 1.87778 V1 1.50606 -0.884554 1.87778 V2 1.59519 -0.936898 1.62188 + N0 0.886771 -0.239043 0.395595 N1 0.794229 -0.460653 0.39623 N2 0.810853 -0.470295 0.34834 + txt003 +STRI + V0 1.59519 -0.936898 1.62188 V1 1.77888 -0.495081 1.62188 V2 1.67949 -0.467421 1.87778 + N0 0.810853 -0.470295 0.34834 N1 0.90527 -0.244029 0.347757 N2 0.886771 -0.239043 0.395595 + txt003 +STRI + V0 1.50606 -0.884554 1.87778 V1 1.23593 -1.23593 1.87778 V2 1.30906 -1.30906 1.62188 + N0 0.794229 -0.460653 0.39623 N1 0.649156 -0.649156 0.396474 N2 0.662761 -0.662761 0.348563 + txt003 +STRI + V0 1.30906 -1.30906 1.62188 V1 1.59519 -0.936898 1.62188 V2 1.50606 -0.884554 1.87778 + N0 0.662761 -0.662761 0.348563 N1 0.810853 -0.470295 0.34834 N2 0.794229 -0.460653 0.39623 + txt003 +STRI + V0 1.23593 -1.23593 1.87778 V1 0.884554 -1.50606 1.87778 V2 0.936898 -1.59519 1.62187 + N0 0.649156 -0.649156 0.396474 N1 0.460653 -0.794229 0.39623 N2 0.470295 -0.810853 0.34834 + txt003 +STRI + V0 0.936898 -1.59519 1.62187 V1 1.30906 -1.30906 1.62188 V2 1.23593 -1.23593 1.87778 + N0 0.470295 -0.810853 0.34834 N1 0.662761 -0.662761 0.348563 N2 0.649156 -0.649156 0.396474 + txt003 +STRI + V0 0.884554 -1.50606 1.87778 V1 0.467421 -1.67949 1.87778 V2 0.495081 -1.77888 1.62187 + N0 0.460653 -0.794229 0.39623 N1 0.239043 -0.886771 0.395595 N2 0.244029 -0.90527 0.347757 + txt003 +STRI + V0 0.495081 -1.77888 1.62187 V1 0.936898 -1.59519 1.62187 V2 0.884554 -1.50606 1.87778 + N0 0.244029 -0.90527 0.347757 N1 0.470295 -0.810853 0.34834 N2 0.460653 -0.794229 0.39623 + txt003 +STRI + V0 0.467421 -1.67949 1.87778 V1 0 -1.74074 1.87778 V2 0 -1.84375 1.62187 + N0 0.239043 -0.886771 0.395595 N1 -1.79998e-16 -0.918633 0.395111 N2 -1.49384e-16 -0.937749 0.347314 + txt003 +STRI + V0 0 -1.84375 1.62187 V1 0.495081 -1.77888 1.62187 V2 0.467421 -1.67949 1.87778 + N0 -1.49384e-16 -0.937749 0.347314 N1 0.244029 -0.90527 0.347757 N2 0.239043 -0.886771 0.395595 + txt003 +STRI + V0 1.84375 0 1.62188 V1 1.77888 -0.495081 1.62188 V2 1.85816 -0.517147 1.37222 + N0 0.937749 0 0.347314 N1 0.90527 -0.244029 0.347757 N2 0.929073 -0.250446 0.272213 + txt003 +STRI + V0 1.85816 -0.517147 1.37222 V1 1.92593 0 1.37222 V2 1.84375 0 1.62188 + N0 0.929073 -0.250446 0.272213 N1 0.96234 0 0.271848 N2 0.937749 0 0.347314 + txt003 +STRI + V0 1.77888 -0.495081 1.62188 V1 1.59519 -0.936898 1.62188 V2 1.66628 -0.978656 1.37222 + N0 0.90527 -0.244029 0.347757 N1 0.810853 -0.470295 0.34834 N2 0.832247 -0.482704 0.272693 + txt003 +STRI + V0 1.66628 -0.978656 1.37222 V1 1.85816 -0.517147 1.37222 V2 1.77888 -0.495081 1.62188 + N0 0.832247 -0.482704 0.272693 N1 0.929073 -0.250446 0.272213 N2 0.90527 -0.244029 0.347757 + txt003 +STRI + V0 1.59519 -0.936898 1.62188 V1 1.30906 -1.30906 1.62188 V2 1.36741 -1.36741 1.37222 + N0 0.810853 -0.470295 0.34834 N1 0.662761 -0.662761 0.348563 N2 0.680271 -0.680271 0.272877 + txt003 +STRI + V0 1.36741 -1.36741 1.37222 V1 1.66628 -0.978656 1.37222 V2 1.59519 -0.936898 1.62188 + N0 0.680271 -0.680271 0.272877 N1 0.832247 -0.482704 0.272693 N2 0.810853 -0.470295 0.34834 + txt003 +STRI + V0 1.30906 -1.30906 1.62188 V1 0.936898 -1.59519 1.62187 V2 0.978656 -1.66628 1.37222 + N0 0.662761 -0.662761 0.348563 N1 0.470295 -0.810853 0.34834 N2 0.482704 -0.832247 0.272693 + txt003 +STRI + V0 0.978656 -1.66628 1.37222 V1 1.36741 -1.36741 1.37222 V2 1.30906 -1.30906 1.62188 + N0 0.482704 -0.832247 0.272693 N1 0.680271 -0.680271 0.272877 N2 0.662761 -0.662761 0.348563 + txt003 +STRI + V0 0.936898 -1.59519 1.62187 V1 0.495081 -1.77888 1.62187 V2 0.517147 -1.85816 1.37222 + N0 0.470295 -0.810853 0.34834 N1 0.244029 -0.90527 0.347757 N2 0.250446 -0.929073 0.272213 + txt003 +STRI + V0 0.517147 -1.85816 1.37222 V1 0.978656 -1.66628 1.37222 V2 0.936898 -1.59519 1.62187 + N0 0.250446 -0.929073 0.272213 N1 0.482704 -0.832247 0.272693 N2 0.470295 -0.810853 0.34834 + txt003 +STRI + V0 0.495081 -1.77888 1.62187 V1 0 -1.84375 1.62187 V2 2.22045e-16 -1.92593 1.37222 + N0 0.244029 -0.90527 0.347757 N1 -1.49384e-16 -0.937749 0.347314 N2 -1.11936e-16 -0.96234 0.271848 + txt003 +STRI + V0 2.22045e-16 -1.92593 1.37222 V1 0.517147 -1.85816 1.37222 V2 0.495081 -1.77888 1.62187 + N0 -1.11936e-16 -0.96234 0.271848 N1 0.250446 -0.929073 0.272213 N2 0.244029 -0.90527 0.347757 + txt003 +STRI + V0 1.92593 0 1.37222 V1 1.85816 -0.517147 1.37222 V2 1.91065 -0.531754 1.1309 + N0 0.96234 0 0.271848 N1 0.929073 -0.250446 0.272213 N2 0.953145 -0.256935 0.159686 + txt003 +STRI + V0 1.91065 -0.531754 1.1309 V1 1.98032 0 1.1309 V2 1.92593 0 1.37222 + N0 0.953145 -0.256935 0.159686 N1 0.987204 0 0.15946 N2 0.96234 0 0.271848 + txt003 +STRI + V0 1.85816 -0.517147 1.37222 V1 1.66628 -0.978656 1.37222 V2 1.71335 -1.0063 1.1309 + N0 0.929073 -0.250446 0.272213 N1 0.832247 -0.482704 0.272693 N2 0.853889 -0.495256 0.159982 + txt003 +STRI + V0 1.71335 -1.0063 1.1309 V1 1.91065 -0.531754 1.1309 V2 1.85816 -0.517147 1.37222 + N0 0.853889 -0.495256 0.159982 N1 0.953145 -0.256935 0.159686 N2 0.929073 -0.250446 0.272213 + txt003 +STRI + V0 1.66628 -0.978656 1.37222 V1 1.36741 -1.36741 1.37222 V2 1.40603 -1.40603 1.1309 + N0 0.832247 -0.482704 0.272693 N1 0.680271 -0.680271 0.272877 N2 0.697986 -0.697986 0.160096 + txt003 +STRI + V0 1.40603 -1.40603 1.1309 V1 1.71335 -1.0063 1.1309 V2 1.66628 -0.978656 1.37222 + N0 0.697986 -0.697986 0.160096 N1 0.853889 -0.495256 0.159982 N2 0.832247 -0.482704 0.272693 + txt003 +STRI + V0 1.36741 -1.36741 1.37222 V1 0.978656 -1.66628 1.37222 V2 1.0063 -1.71335 1.1309 + N0 0.680271 -0.680271 0.272877 N1 0.482704 -0.832247 0.272693 N2 0.495256 -0.853889 0.159982 + txt003 +STRI + V0 1.0063 -1.71335 1.1309 V1 1.40603 -1.40603 1.1309 V2 1.36741 -1.36741 1.37222 + N0 0.495256 -0.853889 0.159982 N1 0.697986 -0.697986 0.160096 N2 0.680271 -0.680271 0.272877 + txt003 +STRI + V0 0.978656 -1.66628 1.37222 V1 0.517147 -1.85816 1.37222 V2 0.531754 -1.91065 1.1309 + N0 0.482704 -0.832247 0.272693 N1 0.250446 -0.929073 0.272213 N2 0.256935 -0.953145 0.159686 + txt003 +STRI + V0 0.531754 -1.91065 1.1309 V1 1.0063 -1.71335 1.1309 V2 0.978656 -1.66628 1.37222 + N0 0.256935 -0.953145 0.159686 N1 0.495256 -0.853889 0.159982 N2 0.482704 -0.832247 0.272693 + txt003 +STRI + V0 0.517147 -1.85816 1.37222 V1 2.22045e-16 -1.92593 1.37222 V2 -2.22045e-16 -1.98032 1.1309 + N0 0.250446 -0.929073 0.272213 N1 -1.11936e-16 -0.96234 0.271848 N2 -6.38555e-17 -0.987204 0.15946 + txt003 +STRI + V0 -2.22045e-16 -1.98032 1.1309 V1 0.531754 -1.91065 1.1309 V2 0.517147 -1.85816 1.37222 + N0 -6.38555e-17 -0.987204 0.15946 N1 0.256935 -0.953145 0.159686 N2 0.250446 -0.929073 0.272213 + txt003 +STRI + V0 1.98032 0 1.1309 V1 1.91065 -0.531754 1.1309 V2 1.92963 -0.537037 0.9 + N0 0.987204 0 0.15946 N1 0.953145 -0.256935 0.159686 N2 0.965535 -0.260275 5.17854e-17 + txt003 +STRI + V0 1.92963 -0.537037 0.9 V1 2 0 0.9 V2 1.98032 0 1.1309 + N0 0.965535 -0.260275 5.17854e-17 N1 1 0 0 N2 0.987204 0 0.15946 + txt003 +STRI + V0 1.91065 -0.531754 1.1309 V1 1.71335 -1.0063 1.1309 V2 1.73037 -1.0163 0.9 + N0 0.953145 -0.256935 0.159686 N1 0.853889 -0.495256 0.159982 N2 0.865031 -0.501718 1.36587e-16 + txt003 +STRI + V0 1.73037 -1.0163 0.9 V1 1.92963 -0.537037 0.9 V2 1.91065 -0.531754 1.1309 + N0 0.865031 -0.501718 1.36587e-16 N1 0.965535 -0.260275 5.17854e-17 N2 0.953145 -0.256935 0.159686 + txt003 +STRI + V0 1.71335 -1.0063 1.1309 V1 1.40603 -1.40603 1.1309 V2 1.42 -1.42 0.9 + N0 0.853889 -0.495256 0.159982 N1 0.697986 -0.697986 0.160096 N2 0.707107 -0.707107 1.74455e-16 + txt003 +STRI + V0 1.42 -1.42 0.9 V1 1.73037 -1.0163 0.9 V2 1.71335 -1.0063 1.1309 + N0 0.707107 -0.707107 1.74455e-16 N1 0.865031 -0.501718 1.36587e-16 N2 0.853889 -0.495256 0.159982 + txt003 +STRI + V0 1.40603 -1.40603 1.1309 V1 1.0063 -1.71335 1.1309 V2 1.0163 -1.73037 0.9 + N0 0.697986 -0.697986 0.160096 N1 0.495256 -0.853889 0.159982 N2 0.501718 -0.865031 1.36587e-16 + txt003 +STRI + V0 1.0163 -1.73037 0.9 V1 1.42 -1.42 0.9 V2 1.40603 -1.40603 1.1309 + N0 0.501718 -0.865031 1.36587e-16 N1 0.707107 -0.707107 1.74455e-16 N2 0.697986 -0.697986 0.160096 + txt003 +STRI + V0 1.0063 -1.71335 1.1309 V1 0.531754 -1.91065 1.1309 V2 0.537037 -1.92963 0.9 + N0 0.495256 -0.853889 0.159982 N1 0.256935 -0.953145 0.159686 N2 0.260275 -0.965535 5.17854e-17 + txt003 +STRI + V0 0.537037 -1.92963 0.9 V1 1.0163 -1.73037 0.9 V2 1.0063 -1.71335 1.1309 + N0 0.260275 -0.965535 5.17854e-17 N1 0.501718 -0.865031 1.36587e-16 N2 0.495256 -0.853889 0.159982 + txt003 +STRI + V0 0.531754 -1.91065 1.1309 V1 -2.22045e-16 -1.98032 1.1309 V2 0 -2 0.9 + N0 0.256935 -0.953145 0.159686 N1 -6.38555e-17 -0.987204 0.15946 N2 0 -1 -0 + txt003 +STRI + V0 0 -2 0.9 V1 0.537037 -1.92963 0.9 V2 0.531754 -1.91065 1.1309 + N0 0 -1 -0 N1 0.260275 -0.965535 5.17854e-17 N2 0.256935 -0.953145 0.159686 + txt003 +STRI + V0 0 -1.5 2.4 V1 -0.402778 -1.44722 2.4 V2 -0.436032 -1.56671 2.13785 + N0 0 -0.902861 0.429934 N1 -0.234929 -0.871509 0.430442 N2 -0.235963 -0.875348 0.422003 + txt003 +STRI + V0 -0.436032 -1.56671 2.13785 V1 0 -1.62384 2.13785 V2 0 -1.5 2.4 + N0 -0.235963 -0.875348 0.422003 N1 0 -0.906828 0.4215 N2 0 -0.902861 0.429934 + txt003 +STRI + V0 -0.402778 -1.44722 2.4 V1 -0.762222 -1.29778 2.4 V2 -0.825153 -1.40492 2.13785 + N0 -0.234929 -0.871509 0.430442 N1 -0.4527 -0.780517 0.43111 N2 -0.4547 -0.783966 0.422664 + txt003 +STRI + V0 -0.825153 -1.40492 2.13785 V1 -0.436032 -1.56671 2.13785 V2 -0.402778 -1.44722 2.4 + N0 -0.4547 -0.783966 0.422664 N1 -0.235963 -0.875348 0.422003 N2 -0.234929 -0.871509 0.430442 + txt003 +STRI + V0 -0.762222 -1.29778 2.4 V1 -1.065 -1.065 2.4 V2 -1.15293 -1.15293 2.13785 + N0 -0.4527 -0.780517 0.43111 N1 -0.637936 -0.637936 0.431366 N2 -0.640758 -0.640758 0.422917 + txt003 +STRI + V0 -1.15293 -1.15293 2.13785 V1 -0.825153 -1.40492 2.13785 V2 -0.762222 -1.29778 2.4 + N0 -0.640758 -0.640758 0.422917 N1 -0.4547 -0.783966 0.422664 N2 -0.4527 -0.780517 0.43111 + txt003 +STRI + V0 -1.065 -1.065 2.4 V1 -1.29778 -0.762222 2.4 V2 -1.40492 -0.825153 2.13785 + N0 -0.637936 -0.637936 0.431366 N1 -0.780517 -0.4527 0.43111 N2 -0.783966 -0.4547 0.422664 + txt003 +STRI + V0 -1.40492 -0.825153 2.13785 V1 -1.15293 -1.15293 2.13785 V2 -1.065 -1.065 2.4 + N0 -0.783966 -0.4547 0.422664 N1 -0.640758 -0.640758 0.422917 N2 -0.637936 -0.637936 0.431366 + txt003 +STRI + V0 -1.29778 -0.762222 2.4 V1 -1.44722 -0.402778 2.4 V2 -1.56671 -0.436032 2.13785 + N0 -0.780517 -0.4527 0.43111 N1 -0.871509 -0.234929 0.430442 N2 -0.875348 -0.235963 0.422003 + txt003 +STRI + V0 -1.56671 -0.436032 2.13785 V1 -1.40492 -0.825153 2.13785 V2 -1.29778 -0.762222 2.4 + N0 -0.875348 -0.235963 0.422003 N1 -0.783966 -0.4547 0.422664 N2 -0.780517 -0.4527 0.43111 + txt003 +STRI + V0 -1.44722 -0.402778 2.4 V1 -1.5 0 2.4 V2 -1.62384 -2.22045e-16 2.13785 + N0 -0.871509 -0.234929 0.430442 N1 -0.902861 2.27296e-16 0.429934 N2 -0.906828 2.05843e-16 0.4215 + txt003 +STRI + V0 -1.62384 -2.22045e-16 2.13785 V1 -1.56671 -0.436032 2.13785 V2 -1.44722 -0.402778 2.4 + N0 -0.906828 2.05843e-16 0.4215 N1 -0.875348 -0.235963 0.422003 N2 -0.871509 -0.234929 0.430442 + txt003 +STRI + V0 0 -1.62384 2.13785 V1 -0.436032 -1.56671 2.13785 V2 -0.467421 -1.67949 1.87778 + N0 0 -0.906828 0.4215 N1 -0.235963 -0.875348 0.422003 N2 -0.239043 -0.886771 0.395595 + txt003 +STRI + V0 -0.467421 -1.67949 1.87778 V1 0 -1.74074 1.87778 V2 0 -1.62384 2.13785 + N0 -0.239043 -0.886771 0.395595 N1 0 -0.918633 0.395111 N2 0 -0.906828 0.4215 + txt003 +STRI + V0 -0.436032 -1.56671 2.13785 V1 -0.825153 -1.40492 2.13785 V2 -0.884554 -1.50606 1.87778 + N0 -0.235963 -0.875348 0.422003 N1 -0.4547 -0.783966 0.422664 N2 -0.460653 -0.794229 0.39623 + txt003 +STRI + V0 -0.884554 -1.50606 1.87778 V1 -0.467421 -1.67949 1.87778 V2 -0.436032 -1.56671 2.13785 + N0 -0.460653 -0.794229 0.39623 N1 -0.239043 -0.886771 0.395595 N2 -0.235963 -0.875348 0.422003 + txt003 +STRI + V0 -0.825153 -1.40492 2.13785 V1 -1.15293 -1.15293 2.13785 V2 -1.23593 -1.23593 1.87778 + N0 -0.4547 -0.783966 0.422664 N1 -0.640758 -0.640758 0.422917 N2 -0.649156 -0.649156 0.396474 + txt003 +STRI + V0 -1.23593 -1.23593 1.87778 V1 -0.884554 -1.50606 1.87778 V2 -0.825153 -1.40492 2.13785 + N0 -0.649156 -0.649156 0.396474 N1 -0.460653 -0.794229 0.39623 N2 -0.4547 -0.783966 0.422664 + txt003 +STRI + V0 -1.15293 -1.15293 2.13785 V1 -1.40492 -0.825153 2.13785 V2 -1.50606 -0.884554 1.87778 + N0 -0.640758 -0.640758 0.422917 N1 -0.783966 -0.4547 0.422664 N2 -0.794229 -0.460653 0.39623 + txt003 +STRI + V0 -1.50606 -0.884554 1.87778 V1 -1.23593 -1.23593 1.87778 V2 -1.15293 -1.15293 2.13785 + N0 -0.794229 -0.460653 0.39623 N1 -0.649156 -0.649156 0.396474 N2 -0.640758 -0.640758 0.422917 + txt003 +STRI + V0 -1.40492 -0.825153 2.13785 V1 -1.56671 -0.436032 2.13785 V2 -1.67949 -0.467421 1.87778 + N0 -0.783966 -0.4547 0.422664 N1 -0.875348 -0.235963 0.422003 N2 -0.886771 -0.239043 0.395595 + txt003 +STRI + V0 -1.67949 -0.467421 1.87778 V1 -1.50606 -0.884554 1.87778 V2 -1.40492 -0.825153 2.13785 + N0 -0.886771 -0.239043 0.395595 N1 -0.794229 -0.460653 0.39623 N2 -0.783966 -0.4547 0.422664 + txt003 +STRI + V0 -1.56671 -0.436032 2.13785 V1 -1.62384 -2.22045e-16 2.13785 V2 -1.74074 0 1.87778 + N0 -0.875348 -0.235963 0.422003 N1 -0.906828 2.05843e-16 0.4215 N2 -0.918633 1.79998e-16 0.395111 + txt003 +STRI + V0 -1.74074 0 1.87778 V1 -1.67949 -0.467421 1.87778 V2 -1.56671 -0.436032 2.13785 + N0 -0.918633 1.79998e-16 0.395111 N1 -0.886771 -0.239043 0.395595 N2 -0.875348 -0.235963 0.422003 + txt003 +STRI + V0 0 -1.74074 1.87778 V1 -0.467421 -1.67949 1.87778 V2 -0.495081 -1.77888 1.62188 + N0 0 -0.918633 0.395111 N1 -0.239043 -0.886771 0.395595 N2 -0.244029 -0.90527 0.347757 + txt003 +STRI + V0 -0.495081 -1.77888 1.62188 V1 0 -1.84375 1.62188 V2 0 -1.74074 1.87778 + N0 -0.244029 -0.90527 0.347757 N1 0 -0.937749 0.347314 N2 0 -0.918633 0.395111 + txt003 +STRI + V0 -0.467421 -1.67949 1.87778 V1 -0.884554 -1.50606 1.87778 V2 -0.936898 -1.59519 1.62188 + N0 -0.239043 -0.886771 0.395595 N1 -0.460653 -0.794229 0.39623 N2 -0.470295 -0.810853 0.34834 + txt003 +STRI + V0 -0.936898 -1.59519 1.62188 V1 -0.495081 -1.77888 1.62188 V2 -0.467421 -1.67949 1.87778 + N0 -0.470295 -0.810853 0.34834 N1 -0.244029 -0.90527 0.347757 N2 -0.239043 -0.886771 0.395595 + txt003 +STRI + V0 -0.884554 -1.50606 1.87778 V1 -1.23593 -1.23593 1.87778 V2 -1.30906 -1.30906 1.62188 + N0 -0.460653 -0.794229 0.39623 N1 -0.649156 -0.649156 0.396474 N2 -0.662761 -0.662761 0.348563 + txt003 +STRI + V0 -1.30906 -1.30906 1.62188 V1 -0.936898 -1.59519 1.62188 V2 -0.884554 -1.50606 1.87778 + N0 -0.662761 -0.662761 0.348563 N1 -0.470295 -0.810853 0.34834 N2 -0.460653 -0.794229 0.39623 + txt003 +STRI + V0 -1.23593 -1.23593 1.87778 V1 -1.50606 -0.884554 1.87778 V2 -1.59519 -0.936898 1.62187 + N0 -0.649156 -0.649156 0.396474 N1 -0.794229 -0.460653 0.39623 N2 -0.810853 -0.470295 0.34834 + txt003 +STRI + V0 -1.59519 -0.936898 1.62187 V1 -1.30906 -1.30906 1.62188 V2 -1.23593 -1.23593 1.87778 + N0 -0.810853 -0.470295 0.34834 N1 -0.662761 -0.662761 0.348563 N2 -0.649156 -0.649156 0.396474 + txt003 +STRI + V0 -1.50606 -0.884554 1.87778 V1 -1.67949 -0.467421 1.87778 V2 -1.77888 -0.495081 1.62187 + N0 -0.794229 -0.460653 0.39623 N1 -0.886771 -0.239043 0.395595 N2 -0.90527 -0.244029 0.347757 + txt003 +STRI + V0 -1.77888 -0.495081 1.62187 V1 -1.59519 -0.936898 1.62187 V2 -1.50606 -0.884554 1.87778 + N0 -0.90527 -0.244029 0.347757 N1 -0.810853 -0.470295 0.34834 N2 -0.794229 -0.460653 0.39623 + txt003 +STRI + V0 -1.67949 -0.467421 1.87778 V1 -1.74074 0 1.87778 V2 -1.84375 0 1.62187 + N0 -0.886771 -0.239043 0.395595 N1 -0.918633 1.79998e-16 0.395111 N2 -0.937749 1.49384e-16 0.347314 + txt003 +STRI + V0 -1.84375 0 1.62187 V1 -1.77888 -0.495081 1.62187 V2 -1.67949 -0.467421 1.87778 + N0 -0.937749 1.49384e-16 0.347314 N1 -0.90527 -0.244029 0.347757 N2 -0.886771 -0.239043 0.395595 + txt003 +STRI + V0 0 -1.84375 1.62188 V1 -0.495081 -1.77888 1.62188 V2 -0.517147 -1.85816 1.37222 + N0 0 -0.937749 0.347314 N1 -0.244029 -0.90527 0.347757 N2 -0.250446 -0.929073 0.272213 + txt003 +STRI + V0 -0.517147 -1.85816 1.37222 V1 0 -1.92593 1.37222 V2 0 -1.84375 1.62188 + N0 -0.250446 -0.929073 0.272213 N1 0 -0.96234 0.271848 N2 0 -0.937749 0.347314 + txt003 +STRI + V0 -0.495081 -1.77888 1.62188 V1 -0.936898 -1.59519 1.62188 V2 -0.978656 -1.66628 1.37222 + N0 -0.244029 -0.90527 0.347757 N1 -0.470295 -0.810853 0.34834 N2 -0.482704 -0.832247 0.272693 + txt003 +STRI + V0 -0.978656 -1.66628 1.37222 V1 -0.517147 -1.85816 1.37222 V2 -0.495081 -1.77888 1.62188 + N0 -0.482704 -0.832247 0.272693 N1 -0.250446 -0.929073 0.272213 N2 -0.244029 -0.90527 0.347757 + txt003 +STRI + V0 -0.936898 -1.59519 1.62188 V1 -1.30906 -1.30906 1.62188 V2 -1.36741 -1.36741 1.37222 + N0 -0.470295 -0.810853 0.34834 N1 -0.662761 -0.662761 0.348563 N2 -0.680271 -0.680271 0.272877 + txt003 +STRI + V0 -1.36741 -1.36741 1.37222 V1 -0.978656 -1.66628 1.37222 V2 -0.936898 -1.59519 1.62188 + N0 -0.680271 -0.680271 0.272877 N1 -0.482704 -0.832247 0.272693 N2 -0.470295 -0.810853 0.34834 + txt003 +STRI + V0 -1.30906 -1.30906 1.62188 V1 -1.59519 -0.936898 1.62187 V2 -1.66628 -0.978656 1.37222 + N0 -0.662761 -0.662761 0.348563 N1 -0.810853 -0.470295 0.34834 N2 -0.832247 -0.482704 0.272693 + txt003 +STRI + V0 -1.66628 -0.978656 1.37222 V1 -1.36741 -1.36741 1.37222 V2 -1.30906 -1.30906 1.62188 + N0 -0.832247 -0.482704 0.272693 N1 -0.680271 -0.680271 0.272877 N2 -0.662761 -0.662761 0.348563 + txt003 +STRI + V0 -1.59519 -0.936898 1.62187 V1 -1.77888 -0.495081 1.62187 V2 -1.85816 -0.517147 1.37222 + N0 -0.810853 -0.470295 0.34834 N1 -0.90527 -0.244029 0.347757 N2 -0.929073 -0.250446 0.272213 + txt003 +STRI + V0 -1.85816 -0.517147 1.37222 V1 -1.66628 -0.978656 1.37222 V2 -1.59519 -0.936898 1.62187 + N0 -0.929073 -0.250446 0.272213 N1 -0.832247 -0.482704 0.272693 N2 -0.810853 -0.470295 0.34834 + txt003 +STRI + V0 -1.77888 -0.495081 1.62187 V1 -1.84375 0 1.62187 V2 -1.92593 -2.22045e-16 1.37222 + N0 -0.90527 -0.244029 0.347757 N1 -0.937749 1.49384e-16 0.347314 N2 -0.96234 1.11936e-16 0.271848 + txt003 +STRI + V0 -1.92593 -2.22045e-16 1.37222 V1 -1.85816 -0.517147 1.37222 V2 -1.77888 -0.495081 1.62187 + N0 -0.96234 1.11936e-16 0.271848 N1 -0.929073 -0.250446 0.272213 N2 -0.90527 -0.244029 0.347757 + txt003 +STRI + V0 0 -1.92593 1.37222 V1 -0.517147 -1.85816 1.37222 V2 -0.531754 -1.91065 1.1309 + N0 0 -0.96234 0.271848 N1 -0.250446 -0.929073 0.272213 N2 -0.256935 -0.953145 0.159686 + txt003 +STRI + V0 -0.531754 -1.91065 1.1309 V1 0 -1.98032 1.1309 V2 0 -1.92593 1.37222 + N0 -0.256935 -0.953145 0.159686 N1 0 -0.987204 0.15946 N2 0 -0.96234 0.271848 + txt003 +STRI + V0 -0.517147 -1.85816 1.37222 V1 -0.978656 -1.66628 1.37222 V2 -1.0063 -1.71335 1.1309 + N0 -0.250446 -0.929073 0.272213 N1 -0.482704 -0.832247 0.272693 N2 -0.495256 -0.853889 0.159982 + txt003 +STRI + V0 -1.0063 -1.71335 1.1309 V1 -0.531754 -1.91065 1.1309 V2 -0.517147 -1.85816 1.37222 + N0 -0.495256 -0.853889 0.159982 N1 -0.256935 -0.953145 0.159686 N2 -0.250446 -0.929073 0.272213 + txt003 +STRI + V0 -0.978656 -1.66628 1.37222 V1 -1.36741 -1.36741 1.37222 V2 -1.40603 -1.40603 1.1309 + N0 -0.482704 -0.832247 0.272693 N1 -0.680271 -0.680271 0.272877 N2 -0.697986 -0.697986 0.160096 + txt003 +STRI + V0 -1.40603 -1.40603 1.1309 V1 -1.0063 -1.71335 1.1309 V2 -0.978656 -1.66628 1.37222 + N0 -0.697986 -0.697986 0.160096 N1 -0.495256 -0.853889 0.159982 N2 -0.482704 -0.832247 0.272693 + txt003 +STRI + V0 -1.36741 -1.36741 1.37222 V1 -1.66628 -0.978656 1.37222 V2 -1.71335 -1.0063 1.1309 + N0 -0.680271 -0.680271 0.272877 N1 -0.832247 -0.482704 0.272693 N2 -0.853889 -0.495256 0.159982 + txt003 +STRI + V0 -1.71335 -1.0063 1.1309 V1 -1.40603 -1.40603 1.1309 V2 -1.36741 -1.36741 1.37222 + N0 -0.853889 -0.495256 0.159982 N1 -0.697986 -0.697986 0.160096 N2 -0.680271 -0.680271 0.272877 + txt003 +STRI + V0 -1.66628 -0.978656 1.37222 V1 -1.85816 -0.517147 1.37222 V2 -1.91065 -0.531754 1.1309 + N0 -0.832247 -0.482704 0.272693 N1 -0.929073 -0.250446 0.272213 N2 -0.953145 -0.256935 0.159686 + txt003 +STRI + V0 -1.91065 -0.531754 1.1309 V1 -1.71335 -1.0063 1.1309 V2 -1.66628 -0.978656 1.37222 + N0 -0.953145 -0.256935 0.159686 N1 -0.853889 -0.495256 0.159982 N2 -0.832247 -0.482704 0.272693 + txt003 +STRI + V0 -1.85816 -0.517147 1.37222 V1 -1.92593 -2.22045e-16 1.37222 V2 -1.98032 2.22045e-16 1.1309 + N0 -0.929073 -0.250446 0.272213 N1 -0.96234 1.11936e-16 0.271848 N2 -0.987204 6.38555e-17 0.15946 + txt003 +STRI + V0 -1.98032 2.22045e-16 1.1309 V1 -1.91065 -0.531754 1.1309 V2 -1.85816 -0.517147 1.37222 + N0 -0.987204 6.38555e-17 0.15946 N1 -0.953145 -0.256935 0.159686 N2 -0.929073 -0.250446 0.272213 + txt003 +STRI + V0 0 -1.98032 1.1309 V1 -0.531754 -1.91065 1.1309 V2 -0.537037 -1.92963 0.9 + N0 0 -0.987204 0.15946 N1 -0.256935 -0.953145 0.159686 N2 -0.260275 -0.965535 5.17854e-17 + txt003 +STRI + V0 -0.537037 -1.92963 0.9 V1 0 -2 0.9 V2 0 -1.98032 1.1309 + N0 -0.260275 -0.965535 5.17854e-17 N1 -0 -1 -0 N2 0 -0.987204 0.15946 + txt003 +STRI + V0 -0.531754 -1.91065 1.1309 V1 -1.0063 -1.71335 1.1309 V2 -1.0163 -1.73037 0.9 + N0 -0.256935 -0.953145 0.159686 N1 -0.495256 -0.853889 0.159982 N2 -0.501718 -0.865031 1.36587e-16 + txt003 +STRI + V0 -1.0163 -1.73037 0.9 V1 -0.537037 -1.92963 0.9 V2 -0.531754 -1.91065 1.1309 + N0 -0.501718 -0.865031 1.36587e-16 N1 -0.260275 -0.965535 5.17854e-17 N2 -0.256935 -0.953145 0.159686 + txt003 +STRI + V0 -1.0063 -1.71335 1.1309 V1 -1.40603 -1.40603 1.1309 V2 -1.42 -1.42 0.9 + N0 -0.495256 -0.853889 0.159982 N1 -0.697986 -0.697986 0.160096 N2 -0.707107 -0.707107 1.74455e-16 + txt003 +STRI + V0 -1.42 -1.42 0.9 V1 -1.0163 -1.73037 0.9 V2 -1.0063 -1.71335 1.1309 + N0 -0.707107 -0.707107 1.74455e-16 N1 -0.501718 -0.865031 1.36587e-16 N2 -0.495256 -0.853889 0.159982 + txt003 +STRI + V0 -1.40603 -1.40603 1.1309 V1 -1.71335 -1.0063 1.1309 V2 -1.73037 -1.0163 0.9 + N0 -0.697986 -0.697986 0.160096 N1 -0.853889 -0.495256 0.159982 N2 -0.865031 -0.501718 1.36587e-16 + txt003 +STRI + V0 -1.73037 -1.0163 0.9 V1 -1.42 -1.42 0.9 V2 -1.40603 -1.40603 1.1309 + N0 -0.865031 -0.501718 1.36587e-16 N1 -0.707107 -0.707107 1.74455e-16 N2 -0.697986 -0.697986 0.160096 + txt003 +STRI + V0 -1.71335 -1.0063 1.1309 V1 -1.91065 -0.531754 1.1309 V2 -1.92963 -0.537037 0.9 + N0 -0.853889 -0.495256 0.159982 N1 -0.953145 -0.256935 0.159686 N2 -0.965535 -0.260275 5.17854e-17 + txt003 +STRI + V0 -1.92963 -0.537037 0.9 V1 -1.73037 -1.0163 0.9 V2 -1.71335 -1.0063 1.1309 + N0 -0.965535 -0.260275 5.17854e-17 N1 -0.865031 -0.501718 1.36587e-16 N2 -0.853889 -0.495256 0.159982 + txt003 +STRI + V0 -1.91065 -0.531754 1.1309 V1 -1.98032 2.22045e-16 1.1309 V2 -2 0 0.9 + N0 -0.953145 -0.256935 0.159686 N1 -0.987204 6.38555e-17 0.15946 N2 -1 0 0 + txt003 +STRI + V0 -2 0 0.9 V1 -1.92963 -0.537037 0.9 V2 -1.91065 -0.531754 1.1309 + N0 -1 0 0 N1 -0.965535 -0.260275 5.17854e-17 N2 -0.953145 -0.256935 0.159686 + txt003 +STRI + V0 -1.5 0 2.4 V1 -1.44722 0.402778 2.4 V2 -1.56671 0.436032 2.13785 + N0 -0.902861 0 0.429934 N1 -0.871509 0.234929 0.430442 N2 -0.875348 0.235963 0.422003 + txt003 +STRI + V0 -1.56671 0.436032 2.13785 V1 -1.62384 0 2.13785 V2 -1.5 0 2.4 + N0 -0.875348 0.235963 0.422003 N1 -0.906828 0 0.4215 N2 -0.902861 0 0.429934 + txt003 +STRI + V0 -1.44722 0.402778 2.4 V1 -1.29778 0.762222 2.4 V2 -1.40492 0.825153 2.13785 + N0 -0.871509 0.234929 0.430442 N1 -0.780517 0.4527 0.43111 N2 -0.783966 0.4547 0.422664 + txt003 +STRI + V0 -1.40492 0.825153 2.13785 V1 -1.56671 0.436032 2.13785 V2 -1.44722 0.402778 2.4 + N0 -0.783966 0.4547 0.422664 N1 -0.875348 0.235963 0.422003 N2 -0.871509 0.234929 0.430442 + txt003 +STRI + V0 -1.29778 0.762222 2.4 V1 -1.065 1.065 2.4 V2 -1.15293 1.15293 2.13785 + N0 -0.780517 0.4527 0.43111 N1 -0.637936 0.637936 0.431366 N2 -0.640758 0.640758 0.422917 + txt003 +STRI + V0 -1.15293 1.15293 2.13785 V1 -1.40492 0.825153 2.13785 V2 -1.29778 0.762222 2.4 + N0 -0.640758 0.640758 0.422917 N1 -0.783966 0.4547 0.422664 N2 -0.780517 0.4527 0.43111 + txt003 +STRI + V0 -1.065 1.065 2.4 V1 -0.762222 1.29778 2.4 V2 -0.825153 1.40492 2.13785 + N0 -0.637936 0.637936 0.431366 N1 -0.4527 0.780517 0.43111 N2 -0.4547 0.783966 0.422664 + txt003 +STRI + V0 -0.825153 1.40492 2.13785 V1 -1.15293 1.15293 2.13785 V2 -1.065 1.065 2.4 + N0 -0.4547 0.783966 0.422664 N1 -0.640758 0.640758 0.422917 N2 -0.637936 0.637936 0.431366 + txt003 +STRI + V0 -0.762222 1.29778 2.4 V1 -0.402778 1.44722 2.4 V2 -0.436032 1.56671 2.13785 + N0 -0.4527 0.780517 0.43111 N1 -0.234929 0.871509 0.430442 N2 -0.235963 0.875348 0.422003 + txt003 +STRI + V0 -0.436032 1.56671 2.13785 V1 -0.825153 1.40492 2.13785 V2 -0.762222 1.29778 2.4 + N0 -0.235963 0.875348 0.422003 N1 -0.4547 0.783966 0.422664 N2 -0.4527 0.780517 0.43111 + txt003 +STRI + V0 -0.402778 1.44722 2.4 V1 0 1.5 2.4 V2 -2.22045e-16 1.62384 2.13785 + N0 -0.234929 0.871509 0.430442 N1 2.27296e-16 0.902861 0.429934 N2 2.05843e-16 0.906828 0.4215 + txt003 +STRI + V0 -2.22045e-16 1.62384 2.13785 V1 -0.436032 1.56671 2.13785 V2 -0.402778 1.44722 2.4 + N0 2.05843e-16 0.906828 0.4215 N1 -0.235963 0.875348 0.422003 N2 -0.234929 0.871509 0.430442 + txt003 +STRI + V0 -1.62384 0 2.13785 V1 -1.56671 0.436032 2.13785 V2 -1.67949 0.467421 1.87778 + N0 -0.906828 0 0.4215 N1 -0.875348 0.235963 0.422003 N2 -0.886771 0.239043 0.395595 + txt003 +STRI + V0 -1.67949 0.467421 1.87778 V1 -1.74074 0 1.87778 V2 -1.62384 0 2.13785 + N0 -0.886771 0.239043 0.395595 N1 -0.918633 0 0.395111 N2 -0.906828 0 0.4215 + txt003 +STRI + V0 -1.56671 0.436032 2.13785 V1 -1.40492 0.825153 2.13785 V2 -1.50606 0.884554 1.87778 + N0 -0.875348 0.235963 0.422003 N1 -0.783966 0.4547 0.422664 N2 -0.794229 0.460653 0.39623 + txt003 +STRI + V0 -1.50606 0.884554 1.87778 V1 -1.67949 0.467421 1.87778 V2 -1.56671 0.436032 2.13785 + N0 -0.794229 0.460653 0.39623 N1 -0.886771 0.239043 0.395595 N2 -0.875348 0.235963 0.422003 + txt003 +STRI + V0 -1.40492 0.825153 2.13785 V1 -1.15293 1.15293 2.13785 V2 -1.23593 1.23593 1.87778 + N0 -0.783966 0.4547 0.422664 N1 -0.640758 0.640758 0.422917 N2 -0.649156 0.649156 0.396474 + txt003 +STRI + V0 -1.23593 1.23593 1.87778 V1 -1.50606 0.884554 1.87778 V2 -1.40492 0.825153 2.13785 + N0 -0.649156 0.649156 0.396474 N1 -0.794229 0.460653 0.39623 N2 -0.783966 0.4547 0.422664 + txt003 +STRI + V0 -1.15293 1.15293 2.13785 V1 -0.825153 1.40492 2.13785 V2 -0.884554 1.50606 1.87778 + N0 -0.640758 0.640758 0.422917 N1 -0.4547 0.783966 0.422664 N2 -0.460653 0.794229 0.39623 + txt003 +STRI + V0 -0.884554 1.50606 1.87778 V1 -1.23593 1.23593 1.87778 V2 -1.15293 1.15293 2.13785 + N0 -0.460653 0.794229 0.39623 N1 -0.649156 0.649156 0.396474 N2 -0.640758 0.640758 0.422917 + txt003 +STRI + V0 -0.825153 1.40492 2.13785 V1 -0.436032 1.56671 2.13785 V2 -0.467421 1.67949 1.87778 + N0 -0.4547 0.783966 0.422664 N1 -0.235963 0.875348 0.422003 N2 -0.239043 0.886771 0.395595 + txt003 +STRI + V0 -0.467421 1.67949 1.87778 V1 -0.884554 1.50606 1.87778 V2 -0.825153 1.40492 2.13785 + N0 -0.239043 0.886771 0.395595 N1 -0.460653 0.794229 0.39623 N2 -0.4547 0.783966 0.422664 + txt003 +STRI + V0 -0.436032 1.56671 2.13785 V1 -2.22045e-16 1.62384 2.13785 V2 0 1.74074 1.87778 + N0 -0.235963 0.875348 0.422003 N1 2.05843e-16 0.906828 0.4215 N2 1.79998e-16 0.918633 0.395111 + txt003 +STRI + V0 0 1.74074 1.87778 V1 -0.467421 1.67949 1.87778 V2 -0.436032 1.56671 2.13785 + N0 1.79998e-16 0.918633 0.395111 N1 -0.239043 0.886771 0.395595 N2 -0.235963 0.875348 0.422003 + txt003 +STRI + V0 -1.74074 0 1.87778 V1 -1.67949 0.467421 1.87778 V2 -1.77888 0.495081 1.62188 + N0 -0.918633 0 0.395111 N1 -0.886771 0.239043 0.395595 N2 -0.90527 0.244029 0.347757 + txt003 +STRI + V0 -1.77888 0.495081 1.62188 V1 -1.84375 0 1.62188 V2 -1.74074 0 1.87778 + N0 -0.90527 0.244029 0.347757 N1 -0.937749 0 0.347314 N2 -0.918633 0 0.395111 + txt003 +STRI + V0 -1.67949 0.467421 1.87778 V1 -1.50606 0.884554 1.87778 V2 -1.59519 0.936898 1.62188 + N0 -0.886771 0.239043 0.395595 N1 -0.794229 0.460653 0.39623 N2 -0.810853 0.470295 0.34834 + txt003 +STRI + V0 -1.59519 0.936898 1.62188 V1 -1.77888 0.495081 1.62188 V2 -1.67949 0.467421 1.87778 + N0 -0.810853 0.470295 0.34834 N1 -0.90527 0.244029 0.347757 N2 -0.886771 0.239043 0.395595 + txt003 +STRI + V0 -1.50606 0.884554 1.87778 V1 -1.23593 1.23593 1.87778 V2 -1.30906 1.30906 1.62188 + N0 -0.794229 0.460653 0.39623 N1 -0.649156 0.649156 0.396474 N2 -0.662761 0.662761 0.348563 + txt003 +STRI + V0 -1.30906 1.30906 1.62188 V1 -1.59519 0.936898 1.62188 V2 -1.50606 0.884554 1.87778 + N0 -0.662761 0.662761 0.348563 N1 -0.810853 0.470295 0.34834 N2 -0.794229 0.460653 0.39623 + txt003 +STRI + V0 -1.23593 1.23593 1.87778 V1 -0.884554 1.50606 1.87778 V2 -0.936898 1.59519 1.62187 + N0 -0.649156 0.649156 0.396474 N1 -0.460653 0.794229 0.39623 N2 -0.470295 0.810853 0.34834 + txt003 +STRI + V0 -0.936898 1.59519 1.62187 V1 -1.30906 1.30906 1.62188 V2 -1.23593 1.23593 1.87778 + N0 -0.470295 0.810853 0.34834 N1 -0.662761 0.662761 0.348563 N2 -0.649156 0.649156 0.396474 + txt003 +STRI + V0 -0.884554 1.50606 1.87778 V1 -0.467421 1.67949 1.87778 V2 -0.495081 1.77888 1.62187 + N0 -0.460653 0.794229 0.39623 N1 -0.239043 0.886771 0.395595 N2 -0.244029 0.90527 0.347757 + txt003 +STRI + V0 -0.495081 1.77888 1.62187 V1 -0.936898 1.59519 1.62187 V2 -0.884554 1.50606 1.87778 + N0 -0.244029 0.90527 0.347757 N1 -0.470295 0.810853 0.34834 N2 -0.460653 0.794229 0.39623 + txt003 +STRI + V0 -0.467421 1.67949 1.87778 V1 0 1.74074 1.87778 V2 0 1.84375 1.62187 + N0 -0.239043 0.886771 0.395595 N1 1.79998e-16 0.918633 0.395111 N2 1.49384e-16 0.937749 0.347314 + txt003 +STRI + V0 0 1.84375 1.62187 V1 -0.495081 1.77888 1.62187 V2 -0.467421 1.67949 1.87778 + N0 1.49384e-16 0.937749 0.347314 N1 -0.244029 0.90527 0.347757 N2 -0.239043 0.886771 0.395595 + txt003 +STRI + V0 -1.84375 0 1.62188 V1 -1.77888 0.495081 1.62188 V2 -1.85816 0.517147 1.37222 + N0 -0.937749 0 0.347314 N1 -0.90527 0.244029 0.347757 N2 -0.929073 0.250446 0.272213 + txt003 +STRI + V0 -1.85816 0.517147 1.37222 V1 -1.92593 0 1.37222 V2 -1.84375 0 1.62188 + N0 -0.929073 0.250446 0.272213 N1 -0.96234 0 0.271848 N2 -0.937749 0 0.347314 + txt003 +STRI + V0 -1.77888 0.495081 1.62188 V1 -1.59519 0.936898 1.62188 V2 -1.66628 0.978656 1.37222 + N0 -0.90527 0.244029 0.347757 N1 -0.810853 0.470295 0.34834 N2 -0.832247 0.482704 0.272693 + txt003 +STRI + V0 -1.66628 0.978656 1.37222 V1 -1.85816 0.517147 1.37222 V2 -1.77888 0.495081 1.62188 + N0 -0.832247 0.482704 0.272693 N1 -0.929073 0.250446 0.272213 N2 -0.90527 0.244029 0.347757 + txt003 +STRI + V0 -1.59519 0.936898 1.62188 V1 -1.30906 1.30906 1.62188 V2 -1.36741 1.36741 1.37222 + N0 -0.810853 0.470295 0.34834 N1 -0.662761 0.662761 0.348563 N2 -0.680271 0.680271 0.272877 + txt003 +STRI + V0 -1.36741 1.36741 1.37222 V1 -1.66628 0.978656 1.37222 V2 -1.59519 0.936898 1.62188 + N0 -0.680271 0.680271 0.272877 N1 -0.832247 0.482704 0.272693 N2 -0.810853 0.470295 0.34834 + txt003 +STRI + V0 -1.30906 1.30906 1.62188 V1 -0.936898 1.59519 1.62187 V2 -0.978656 1.66628 1.37222 + N0 -0.662761 0.662761 0.348563 N1 -0.470295 0.810853 0.34834 N2 -0.482704 0.832247 0.272693 + txt003 +STRI + V0 -0.978656 1.66628 1.37222 V1 -1.36741 1.36741 1.37222 V2 -1.30906 1.30906 1.62188 + N0 -0.482704 0.832247 0.272693 N1 -0.680271 0.680271 0.272877 N2 -0.662761 0.662761 0.348563 + txt003 +STRI + V0 -0.936898 1.59519 1.62187 V1 -0.495081 1.77888 1.62187 V2 -0.517147 1.85816 1.37222 + N0 -0.470295 0.810853 0.34834 N1 -0.244029 0.90527 0.347757 N2 -0.250446 0.929073 0.272213 + txt003 +STRI + V0 -0.517147 1.85816 1.37222 V1 -0.978656 1.66628 1.37222 V2 -0.936898 1.59519 1.62187 + N0 -0.250446 0.929073 0.272213 N1 -0.482704 0.832247 0.272693 N2 -0.470295 0.810853 0.34834 + txt003 +STRI + V0 -0.495081 1.77888 1.62187 V1 0 1.84375 1.62187 V2 -2.22045e-16 1.92593 1.37222 + N0 -0.244029 0.90527 0.347757 N1 1.49384e-16 0.937749 0.347314 N2 1.11936e-16 0.96234 0.271848 + txt003 +STRI + V0 -2.22045e-16 1.92593 1.37222 V1 -0.517147 1.85816 1.37222 V2 -0.495081 1.77888 1.62187 + N0 1.11936e-16 0.96234 0.271848 N1 -0.250446 0.929073 0.272213 N2 -0.244029 0.90527 0.347757 + txt003 +STRI + V0 -1.92593 0 1.37222 V1 -1.85816 0.517147 1.37222 V2 -1.91065 0.531754 1.1309 + N0 -0.96234 0 0.271848 N1 -0.929073 0.250446 0.272213 N2 -0.953145 0.256935 0.159686 + txt003 +STRI + V0 -1.91065 0.531754 1.1309 V1 -1.98032 0 1.1309 V2 -1.92593 0 1.37222 + N0 -0.953145 0.256935 0.159686 N1 -0.987204 0 0.15946 N2 -0.96234 0 0.271848 + txt003 +STRI + V0 -1.85816 0.517147 1.37222 V1 -1.66628 0.978656 1.37222 V2 -1.71335 1.0063 1.1309 + N0 -0.929073 0.250446 0.272213 N1 -0.832247 0.482704 0.272693 N2 -0.853889 0.495256 0.159982 + txt003 +STRI + V0 -1.71335 1.0063 1.1309 V1 -1.91065 0.531754 1.1309 V2 -1.85816 0.517147 1.37222 + N0 -0.853889 0.495256 0.159982 N1 -0.953145 0.256935 0.159686 N2 -0.929073 0.250446 0.272213 + txt003 +STRI + V0 -1.66628 0.978656 1.37222 V1 -1.36741 1.36741 1.37222 V2 -1.40603 1.40603 1.1309 + N0 -0.832247 0.482704 0.272693 N1 -0.680271 0.680271 0.272877 N2 -0.697986 0.697986 0.160096 + txt003 +STRI + V0 -1.40603 1.40603 1.1309 V1 -1.71335 1.0063 1.1309 V2 -1.66628 0.978656 1.37222 + N0 -0.697986 0.697986 0.160096 N1 -0.853889 0.495256 0.159982 N2 -0.832247 0.482704 0.272693 + txt003 +STRI + V0 -1.36741 1.36741 1.37222 V1 -0.978656 1.66628 1.37222 V2 -1.0063 1.71335 1.1309 + N0 -0.680271 0.680271 0.272877 N1 -0.482704 0.832247 0.272693 N2 -0.495256 0.853889 0.159982 + txt003 +STRI + V0 -1.0063 1.71335 1.1309 V1 -1.40603 1.40603 1.1309 V2 -1.36741 1.36741 1.37222 + N0 -0.495256 0.853889 0.159982 N1 -0.697986 0.697986 0.160096 N2 -0.680271 0.680271 0.272877 + txt003 +STRI + V0 -0.978656 1.66628 1.37222 V1 -0.517147 1.85816 1.37222 V2 -0.531754 1.91065 1.1309 + N0 -0.482704 0.832247 0.272693 N1 -0.250446 0.929073 0.272213 N2 -0.256935 0.953145 0.159686 + txt003 +STRI + V0 -0.531754 1.91065 1.1309 V1 -1.0063 1.71335 1.1309 V2 -0.978656 1.66628 1.37222 + N0 -0.256935 0.953145 0.159686 N1 -0.495256 0.853889 0.159982 N2 -0.482704 0.832247 0.272693 + txt003 +STRI + V0 -0.517147 1.85816 1.37222 V1 -2.22045e-16 1.92593 1.37222 V2 2.22045e-16 1.98032 1.1309 + N0 -0.250446 0.929073 0.272213 N1 1.11936e-16 0.96234 0.271848 N2 6.38555e-17 0.987204 0.15946 + txt003 +STRI + V0 2.22045e-16 1.98032 1.1309 V1 -0.531754 1.91065 1.1309 V2 -0.517147 1.85816 1.37222 + N0 6.38555e-17 0.987204 0.15946 N1 -0.256935 0.953145 0.159686 N2 -0.250446 0.929073 0.272213 + txt003 +STRI + V0 -1.98032 0 1.1309 V1 -1.91065 0.531754 1.1309 V2 -1.92963 0.537037 0.9 + N0 -0.987204 0 0.15946 N1 -0.953145 0.256935 0.159686 N2 -0.965535 0.260275 5.17854e-17 + txt003 +STRI + V0 -1.92963 0.537037 0.9 V1 -2 0 0.9 V2 -1.98032 0 1.1309 + N0 -0.965535 0.260275 5.17854e-17 N1 -1 0 0 N2 -0.987204 0 0.15946 + txt003 +STRI + V0 -1.91065 0.531754 1.1309 V1 -1.71335 1.0063 1.1309 V2 -1.73037 1.0163 0.9 + N0 -0.953145 0.256935 0.159686 N1 -0.853889 0.495256 0.159982 N2 -0.865031 0.501718 1.36587e-16 + txt003 +STRI + V0 -1.73037 1.0163 0.9 V1 -1.92963 0.537037 0.9 V2 -1.91065 0.531754 1.1309 + N0 -0.865031 0.501718 1.36587e-16 N1 -0.965535 0.260275 5.17854e-17 N2 -0.953145 0.256935 0.159686 + txt003 +STRI + V0 -1.71335 1.0063 1.1309 V1 -1.40603 1.40603 1.1309 V2 -1.42 1.42 0.9 + N0 -0.853889 0.495256 0.159982 N1 -0.697986 0.697986 0.160096 N2 -0.707107 0.707107 1.74455e-16 + txt003 +STRI + V0 -1.42 1.42 0.9 V1 -1.73037 1.0163 0.9 V2 -1.71335 1.0063 1.1309 + N0 -0.707107 0.707107 1.74455e-16 N1 -0.865031 0.501718 1.36587e-16 N2 -0.853889 0.495256 0.159982 + txt003 +STRI + V0 -1.40603 1.40603 1.1309 V1 -1.0063 1.71335 1.1309 V2 -1.0163 1.73037 0.9 + N0 -0.697986 0.697986 0.160096 N1 -0.495256 0.853889 0.159982 N2 -0.501718 0.865031 1.36587e-16 + txt003 +STRI + V0 -1.0163 1.73037 0.9 V1 -1.42 1.42 0.9 V2 -1.40603 1.40603 1.1309 + N0 -0.501718 0.865031 1.36587e-16 N1 -0.707107 0.707107 1.74455e-16 N2 -0.697986 0.697986 0.160096 + txt003 +STRI + V0 -1.0063 1.71335 1.1309 V1 -0.531754 1.91065 1.1309 V2 -0.537037 1.92963 0.9 + N0 -0.495256 0.853889 0.159982 N1 -0.256935 0.953145 0.159686 N2 -0.260275 0.965535 5.17854e-17 + txt003 +STRI + V0 -0.537037 1.92963 0.9 V1 -1.0163 1.73037 0.9 V2 -1.0063 1.71335 1.1309 + N0 -0.260275 0.965535 5.17854e-17 N1 -0.501718 0.865031 1.36587e-16 N2 -0.495256 0.853889 0.159982 + txt003 +STRI + V0 -0.531754 1.91065 1.1309 V1 2.22045e-16 1.98032 1.1309 V2 0 2 0.9 + N0 -0.256935 0.953145 0.159686 N1 6.38555e-17 0.987204 0.15946 N2 0 1 0 + txt003 +STRI + V0 0 2 0.9 V1 -0.537037 1.92963 0.9 V2 -0.531754 1.91065 1.1309 + N0 0 1 0 N1 -0.260275 0.965535 5.17854e-17 N2 -0.256935 0.953145 0.159686 + txt003 +STRI + V0 0 1.5 2.4 V1 0.402778 1.44722 2.4 V2 0.436032 1.56671 2.13785 + N0 -0 0.902861 0.429934 N1 0.234929 0.871509 0.430442 N2 0.235963 0.875348 0.422003 + txt003 +STRI + V0 0.436032 1.56671 2.13785 V1 0 1.62384 2.13785 V2 0 1.5 2.4 + N0 0.235963 0.875348 0.422003 N1 -0 0.906828 0.4215 N2 -0 0.902861 0.429934 + txt003 +STRI + V0 0.402778 1.44722 2.4 V1 0.762222 1.29778 2.4 V2 0.825153 1.40492 2.13785 + N0 0.234929 0.871509 0.430442 N1 0.4527 0.780517 0.43111 N2 0.4547 0.783966 0.422664 + txt003 +STRI + V0 0.825153 1.40492 2.13785 V1 0.436032 1.56671 2.13785 V2 0.402778 1.44722 2.4 + N0 0.4547 0.783966 0.422664 N1 0.235963 0.875348 0.422003 N2 0.234929 0.871509 0.430442 + txt003 +STRI + V0 0.762222 1.29778 2.4 V1 1.065 1.065 2.4 V2 1.15293 1.15293 2.13785 + N0 0.4527 0.780517 0.43111 N1 0.637936 0.637936 0.431366 N2 0.640758 0.640758 0.422917 + txt003 +STRI + V0 1.15293 1.15293 2.13785 V1 0.825153 1.40492 2.13785 V2 0.762222 1.29778 2.4 + N0 0.640758 0.640758 0.422917 N1 0.4547 0.783966 0.422664 N2 0.4527 0.780517 0.43111 + txt003 +STRI + V0 1.065 1.065 2.4 V1 1.29778 0.762222 2.4 V2 1.40492 0.825153 2.13785 + N0 0.637936 0.637936 0.431366 N1 0.780517 0.4527 0.43111 N2 0.783966 0.4547 0.422664 + txt003 +STRI + V0 1.40492 0.825153 2.13785 V1 1.15293 1.15293 2.13785 V2 1.065 1.065 2.4 + N0 0.783966 0.4547 0.422664 N1 0.640758 0.640758 0.422917 N2 0.637936 0.637936 0.431366 + txt003 +STRI + V0 1.29778 0.762222 2.4 V1 1.44722 0.402778 2.4 V2 1.56671 0.436032 2.13785 + N0 0.780517 0.4527 0.43111 N1 0.871509 0.234929 0.430442 N2 0.875348 0.235963 0.422003 + txt003 +STRI + V0 1.56671 0.436032 2.13785 V1 1.40492 0.825153 2.13785 V2 1.29778 0.762222 2.4 + N0 0.875348 0.235963 0.422003 N1 0.783966 0.4547 0.422664 N2 0.780517 0.4527 0.43111 + txt003 +STRI + V0 1.44722 0.402778 2.4 V1 1.5 0 2.4 V2 1.62384 2.22045e-16 2.13785 + N0 0.871509 0.234929 0.430442 N1 0.902861 -2.27296e-16 0.429934 N2 0.906828 -2.05843e-16 0.4215 + txt003 +STRI + V0 1.62384 2.22045e-16 2.13785 V1 1.56671 0.436032 2.13785 V2 1.44722 0.402778 2.4 + N0 0.906828 -2.05843e-16 0.4215 N1 0.875348 0.235963 0.422003 N2 0.871509 0.234929 0.430442 + txt003 +STRI + V0 0 1.62384 2.13785 V1 0.436032 1.56671 2.13785 V2 0.467421 1.67949 1.87778 + N0 -0 0.906828 0.4215 N1 0.235963 0.875348 0.422003 N2 0.239043 0.886771 0.395595 + txt003 +STRI + V0 0.467421 1.67949 1.87778 V1 0 1.74074 1.87778 V2 0 1.62384 2.13785 + N0 0.239043 0.886771 0.395595 N1 -0 0.918633 0.395111 N2 -0 0.906828 0.4215 + txt003 +STRI + V0 0.436032 1.56671 2.13785 V1 0.825153 1.40492 2.13785 V2 0.884554 1.50606 1.87778 + N0 0.235963 0.875348 0.422003 N1 0.4547 0.783966 0.422664 N2 0.460653 0.794229 0.39623 + txt003 +STRI + V0 0.884554 1.50606 1.87778 V1 0.467421 1.67949 1.87778 V2 0.436032 1.56671 2.13785 + N0 0.460653 0.794229 0.39623 N1 0.239043 0.886771 0.395595 N2 0.235963 0.875348 0.422003 + txt003 +STRI + V0 0.825153 1.40492 2.13785 V1 1.15293 1.15293 2.13785 V2 1.23593 1.23593 1.87778 + N0 0.4547 0.783966 0.422664 N1 0.640758 0.640758 0.422917 N2 0.649156 0.649156 0.396474 + txt003 +STRI + V0 1.23593 1.23593 1.87778 V1 0.884554 1.50606 1.87778 V2 0.825153 1.40492 2.13785 + N0 0.649156 0.649156 0.396474 N1 0.460653 0.794229 0.39623 N2 0.4547 0.783966 0.422664 + txt003 +STRI + V0 1.15293 1.15293 2.13785 V1 1.40492 0.825153 2.13785 V2 1.50606 0.884554 1.87778 + N0 0.640758 0.640758 0.422917 N1 0.783966 0.4547 0.422664 N2 0.794229 0.460653 0.39623 + txt003 +STRI + V0 1.50606 0.884554 1.87778 V1 1.23593 1.23593 1.87778 V2 1.15293 1.15293 2.13785 + N0 0.794229 0.460653 0.39623 N1 0.649156 0.649156 0.396474 N2 0.640758 0.640758 0.422917 + txt003 +STRI + V0 1.40492 0.825153 2.13785 V1 1.56671 0.436032 2.13785 V2 1.67949 0.467421 1.87778 + N0 0.783966 0.4547 0.422664 N1 0.875348 0.235963 0.422003 N2 0.886771 0.239043 0.395595 + txt003 +STRI + V0 1.67949 0.467421 1.87778 V1 1.50606 0.884554 1.87778 V2 1.40492 0.825153 2.13785 + N0 0.886771 0.239043 0.395595 N1 0.794229 0.460653 0.39623 N2 0.783966 0.4547 0.422664 + txt003 +STRI + V0 1.56671 0.436032 2.13785 V1 1.62384 2.22045e-16 2.13785 V2 1.74074 0 1.87778 + N0 0.875348 0.235963 0.422003 N1 0.906828 -2.05843e-16 0.4215 N2 0.918633 -1.79998e-16 0.395111 + txt003 +STRI + V0 1.74074 0 1.87778 V1 1.67949 0.467421 1.87778 V2 1.56671 0.436032 2.13785 + N0 0.918633 -1.79998e-16 0.395111 N1 0.886771 0.239043 0.395595 N2 0.875348 0.235963 0.422003 + txt003 +STRI + V0 0 1.74074 1.87778 V1 0.467421 1.67949 1.87778 V2 0.495081 1.77888 1.62188 + N0 -0 0.918633 0.395111 N1 0.239043 0.886771 0.395595 N2 0.244029 0.90527 0.347757 + txt003 +STRI + V0 0.495081 1.77888 1.62188 V1 0 1.84375 1.62188 V2 0 1.74074 1.87778 + N0 0.244029 0.90527 0.347757 N1 -0 0.937749 0.347314 N2 -0 0.918633 0.395111 + txt003 +STRI + V0 0.467421 1.67949 1.87778 V1 0.884554 1.50606 1.87778 V2 0.936898 1.59519 1.62188 + N0 0.239043 0.886771 0.395595 N1 0.460653 0.794229 0.39623 N2 0.470295 0.810853 0.34834 + txt003 +STRI + V0 0.936898 1.59519 1.62188 V1 0.495081 1.77888 1.62188 V2 0.467421 1.67949 1.87778 + N0 0.470295 0.810853 0.34834 N1 0.244029 0.90527 0.347757 N2 0.239043 0.886771 0.395595 + txt003 +STRI + V0 0.884554 1.50606 1.87778 V1 1.23593 1.23593 1.87778 V2 1.30906 1.30906 1.62188 + N0 0.460653 0.794229 0.39623 N1 0.649156 0.649156 0.396474 N2 0.662761 0.662761 0.348563 + txt003 +STRI + V0 1.30906 1.30906 1.62188 V1 0.936898 1.59519 1.62188 V2 0.884554 1.50606 1.87778 + N0 0.662761 0.662761 0.348563 N1 0.470295 0.810853 0.34834 N2 0.460653 0.794229 0.39623 + txt003 +STRI + V0 1.23593 1.23593 1.87778 V1 1.50606 0.884554 1.87778 V2 1.59519 0.936898 1.62187 + N0 0.649156 0.649156 0.396474 N1 0.794229 0.460653 0.39623 N2 0.810853 0.470295 0.34834 + txt003 +STRI + V0 1.59519 0.936898 1.62187 V1 1.30906 1.30906 1.62188 V2 1.23593 1.23593 1.87778 + N0 0.810853 0.470295 0.34834 N1 0.662761 0.662761 0.348563 N2 0.649156 0.649156 0.396474 + txt003 +STRI + V0 1.50606 0.884554 1.87778 V1 1.67949 0.467421 1.87778 V2 1.77888 0.495081 1.62187 + N0 0.794229 0.460653 0.39623 N1 0.886771 0.239043 0.395595 N2 0.90527 0.244029 0.347757 + txt003 +STRI + V0 1.77888 0.495081 1.62187 V1 1.59519 0.936898 1.62187 V2 1.50606 0.884554 1.87778 + N0 0.90527 0.244029 0.347757 N1 0.810853 0.470295 0.34834 N2 0.794229 0.460653 0.39623 + txt003 +STRI + V0 1.67949 0.467421 1.87778 V1 1.74074 0 1.87778 V2 1.84375 0 1.62187 + N0 0.886771 0.239043 0.395595 N1 0.918633 -1.79998e-16 0.395111 N2 0.937749 -1.49384e-16 0.347314 + txt003 +STRI + V0 1.84375 0 1.62187 V1 1.77888 0.495081 1.62187 V2 1.67949 0.467421 1.87778 + N0 0.937749 -1.49384e-16 0.347314 N1 0.90527 0.244029 0.347757 N2 0.886771 0.239043 0.395595 + txt003 +STRI + V0 0 1.84375 1.62188 V1 0.495081 1.77888 1.62188 V2 0.517147 1.85816 1.37222 + N0 -0 0.937749 0.347314 N1 0.244029 0.90527 0.347757 N2 0.250446 0.929073 0.272213 + txt003 +STRI + V0 0.517147 1.85816 1.37222 V1 0 1.92593 1.37222 V2 0 1.84375 1.62188 + N0 0.250446 0.929073 0.272213 N1 -0 0.96234 0.271848 N2 -0 0.937749 0.347314 + txt003 +STRI + V0 0.495081 1.77888 1.62188 V1 0.936898 1.59519 1.62188 V2 0.978656 1.66628 1.37222 + N0 0.244029 0.90527 0.347757 N1 0.470295 0.810853 0.34834 N2 0.482704 0.832247 0.272693 + txt003 +STRI + V0 0.978656 1.66628 1.37222 V1 0.517147 1.85816 1.37222 V2 0.495081 1.77888 1.62188 + N0 0.482704 0.832247 0.272693 N1 0.250446 0.929073 0.272213 N2 0.244029 0.90527 0.347757 + txt003 +STRI + V0 0.936898 1.59519 1.62188 V1 1.30906 1.30906 1.62188 V2 1.36741 1.36741 1.37222 + N0 0.470295 0.810853 0.34834 N1 0.662761 0.662761 0.348563 N2 0.680271 0.680271 0.272877 + txt003 +STRI + V0 1.36741 1.36741 1.37222 V1 0.978656 1.66628 1.37222 V2 0.936898 1.59519 1.62188 + N0 0.680271 0.680271 0.272877 N1 0.482704 0.832247 0.272693 N2 0.470295 0.810853 0.34834 + txt003 +STRI + V0 1.30906 1.30906 1.62188 V1 1.59519 0.936898 1.62187 V2 1.66628 0.978656 1.37222 + N0 0.662761 0.662761 0.348563 N1 0.810853 0.470295 0.34834 N2 0.832247 0.482704 0.272693 + txt003 +STRI + V0 1.66628 0.978656 1.37222 V1 1.36741 1.36741 1.37222 V2 1.30906 1.30906 1.62188 + N0 0.832247 0.482704 0.272693 N1 0.680271 0.680271 0.272877 N2 0.662761 0.662761 0.348563 + txt003 +STRI + V0 1.59519 0.936898 1.62187 V1 1.77888 0.495081 1.62187 V2 1.85816 0.517147 1.37222 + N0 0.810853 0.470295 0.34834 N1 0.90527 0.244029 0.347757 N2 0.929073 0.250446 0.272213 + txt003 +STRI + V0 1.85816 0.517147 1.37222 V1 1.66628 0.978656 1.37222 V2 1.59519 0.936898 1.62187 + N0 0.929073 0.250446 0.272213 N1 0.832247 0.482704 0.272693 N2 0.810853 0.470295 0.34834 + txt003 +STRI + V0 1.77888 0.495081 1.62187 V1 1.84375 0 1.62187 V2 1.92593 2.22045e-16 1.37222 + N0 0.90527 0.244029 0.347757 N1 0.937749 -1.49384e-16 0.347314 N2 0.96234 -1.11936e-16 0.271848 + txt003 +STRI + V0 1.92593 2.22045e-16 1.37222 V1 1.85816 0.517147 1.37222 V2 1.77888 0.495081 1.62187 + N0 0.96234 -1.11936e-16 0.271848 N1 0.929073 0.250446 0.272213 N2 0.90527 0.244029 0.347757 + txt003 +STRI + V0 0 1.92593 1.37222 V1 0.517147 1.85816 1.37222 V2 0.531754 1.91065 1.1309 + N0 -0 0.96234 0.271848 N1 0.250446 0.929073 0.272213 N2 0.256935 0.953145 0.159686 + txt003 +STRI + V0 0.531754 1.91065 1.1309 V1 0 1.98032 1.1309 V2 0 1.92593 1.37222 + N0 0.256935 0.953145 0.159686 N1 -0 0.987204 0.15946 N2 -0 0.96234 0.271848 + txt003 +STRI + V0 0.517147 1.85816 1.37222 V1 0.978656 1.66628 1.37222 V2 1.0063 1.71335 1.1309 + N0 0.250446 0.929073 0.272213 N1 0.482704 0.832247 0.272693 N2 0.495256 0.853889 0.159982 + txt003 +STRI + V0 1.0063 1.71335 1.1309 V1 0.531754 1.91065 1.1309 V2 0.517147 1.85816 1.37222 + N0 0.495256 0.853889 0.159982 N1 0.256935 0.953145 0.159686 N2 0.250446 0.929073 0.272213 + txt003 +STRI + V0 0.978656 1.66628 1.37222 V1 1.36741 1.36741 1.37222 V2 1.40603 1.40603 1.1309 + N0 0.482704 0.832247 0.272693 N1 0.680271 0.680271 0.272877 N2 0.697986 0.697986 0.160096 + txt003 +STRI + V0 1.40603 1.40603 1.1309 V1 1.0063 1.71335 1.1309 V2 0.978656 1.66628 1.37222 + N0 0.697986 0.697986 0.160096 N1 0.495256 0.853889 0.159982 N2 0.482704 0.832247 0.272693 + txt003 +STRI + V0 1.36741 1.36741 1.37222 V1 1.66628 0.978656 1.37222 V2 1.71335 1.0063 1.1309 + N0 0.680271 0.680271 0.272877 N1 0.832247 0.482704 0.272693 N2 0.853889 0.495256 0.159982 + txt003 +STRI + V0 1.71335 1.0063 1.1309 V1 1.40603 1.40603 1.1309 V2 1.36741 1.36741 1.37222 + N0 0.853889 0.495256 0.159982 N1 0.697986 0.697986 0.160096 N2 0.680271 0.680271 0.272877 + txt003 +STRI + V0 1.66628 0.978656 1.37222 V1 1.85816 0.517147 1.37222 V2 1.91065 0.531754 1.1309 + N0 0.832247 0.482704 0.272693 N1 0.929073 0.250446 0.272213 N2 0.953145 0.256935 0.159686 + txt003 +STRI + V0 1.91065 0.531754 1.1309 V1 1.71335 1.0063 1.1309 V2 1.66628 0.978656 1.37222 + N0 0.953145 0.256935 0.159686 N1 0.853889 0.495256 0.159982 N2 0.832247 0.482704 0.272693 + txt003 +STRI + V0 1.85816 0.517147 1.37222 V1 1.92593 2.22045e-16 1.37222 V2 1.98032 -2.22045e-16 1.1309 + N0 0.929073 0.250446 0.272213 N1 0.96234 -1.11936e-16 0.271848 N2 0.987204 -6.38555e-17 0.15946 + txt003 +STRI + V0 1.98032 -2.22045e-16 1.1309 V1 1.91065 0.531754 1.1309 V2 1.85816 0.517147 1.37222 + N0 0.987204 -6.38555e-17 0.15946 N1 0.953145 0.256935 0.159686 N2 0.929073 0.250446 0.272213 + txt003 +STRI + V0 0 1.98032 1.1309 V1 0.531754 1.91065 1.1309 V2 0.537037 1.92963 0.9 + N0 -0 0.987204 0.15946 N1 0.256935 0.953145 0.159686 N2 0.260275 0.965535 5.17854e-17 + txt003 +STRI + V0 0.537037 1.92963 0.9 V1 0 2 0.9 V2 0 1.98032 1.1309 + N0 0.260275 0.965535 5.17854e-17 N1 -0 1 0 N2 -0 0.987204 0.15946 + txt003 +STRI + V0 0.531754 1.91065 1.1309 V1 1.0063 1.71335 1.1309 V2 1.0163 1.73037 0.9 + N0 0.256935 0.953145 0.159686 N1 0.495256 0.853889 0.159982 N2 0.501718 0.865031 1.36587e-16 + txt003 +STRI + V0 1.0163 1.73037 0.9 V1 0.537037 1.92963 0.9 V2 0.531754 1.91065 1.1309 + N0 0.501718 0.865031 1.36587e-16 N1 0.260275 0.965535 5.17854e-17 N2 0.256935 0.953145 0.159686 + txt003 +STRI + V0 1.0063 1.71335 1.1309 V1 1.40603 1.40603 1.1309 V2 1.42 1.42 0.9 + N0 0.495256 0.853889 0.159982 N1 0.697986 0.697986 0.160096 N2 0.707107 0.707107 1.74455e-16 + txt003 +STRI + V0 1.42 1.42 0.9 V1 1.0163 1.73037 0.9 V2 1.0063 1.71335 1.1309 + N0 0.707107 0.707107 1.74455e-16 N1 0.501718 0.865031 1.36587e-16 N2 0.495256 0.853889 0.159982 + txt003 +STRI + V0 1.40603 1.40603 1.1309 V1 1.71335 1.0063 1.1309 V2 1.73037 1.0163 0.9 + N0 0.697986 0.697986 0.160096 N1 0.853889 0.495256 0.159982 N2 0.865031 0.501718 1.36587e-16 + txt003 +STRI + V0 1.73037 1.0163 0.9 V1 1.42 1.42 0.9 V2 1.40603 1.40603 1.1309 + N0 0.865031 0.501718 1.36587e-16 N1 0.707107 0.707107 1.74455e-16 N2 0.697986 0.697986 0.160096 + txt003 +STRI + V0 1.71335 1.0063 1.1309 V1 1.91065 0.531754 1.1309 V2 1.92963 0.537037 0.9 + N0 0.853889 0.495256 0.159982 N1 0.953145 0.256935 0.159686 N2 0.965535 0.260275 5.17854e-17 + txt003 +STRI + V0 1.92963 0.537037 0.9 V1 1.73037 1.0163 0.9 V2 1.71335 1.0063 1.1309 + N0 0.965535 0.260275 5.17854e-17 N1 0.865031 0.501718 1.36587e-16 N2 0.853889 0.495256 0.159982 + txt003 +STRI + V0 1.91065 0.531754 1.1309 V1 1.98032 -2.22045e-16 1.1309 V2 2 0 0.9 + N0 0.953145 0.256935 0.159686 N1 0.987204 -6.38555e-17 0.15946 N2 1 0 0 + txt003 +STRI + V0 2 0 0.9 V1 1.92963 0.537037 0.9 V2 1.91065 0.531754 1.1309 + N0 1 0 0 N1 0.965535 0.260275 5.17854e-17 N2 0.953145 0.256935 0.159686 + txt003 +STRI + V0 2 0 0.9 V1 1.92963 -0.537037 0.9 V2 1.8939 -0.527092 0.693403 + N0 1 0 0 N1 0.965535 -0.260275 0 N2 0.905874 -0.244192 -0.346067 + txt003 +STRI + V0 1.8939 -0.527092 0.693403 V1 1.96296 0 0.693403 V2 2 0 0.9 + N0 0.905874 -0.244192 -0.346067 N1 0.938373 0 -0.345625 N2 1 0 0 + txt003 +STRI + V0 1.92963 -0.537037 0.9 V1 1.73037 -1.0163 0.9 V2 1.69833 -0.997476 0.693403 + N0 0.965535 -0.260275 0 N1 0.865031 -0.501718 0 N2 0.811395 -0.470609 -0.346647 + txt003 +STRI + V0 1.69833 -0.997476 0.693403 V1 1.8939 -0.527092 0.693403 V2 1.92963 -0.537037 0.9 + N0 0.811395 -0.470609 -0.346647 N1 0.905874 -0.244192 -0.346067 N2 0.965535 -0.260275 0 + txt003 +STRI + V0 1.73037 -1.0163 0.9 V1 1.42 -1.42 0.9 V2 1.3937 -1.3937 0.693403 + N0 0.865031 -0.501718 0 N1 0.707107 -0.707107 0 N2 0.663205 -0.663205 -0.34687 + txt003 +STRI + V0 1.3937 -1.3937 0.693403 V1 1.69833 -0.997476 0.693403 V2 1.73037 -1.0163 0.9 + N0 0.663205 -0.663205 -0.34687 N1 0.811395 -0.470609 -0.346647 N2 0.865031 -0.501718 0 + txt003 +STRI + V0 1.42 -1.42 0.9 V1 1.0163 -1.73037 0.9 V2 0.997476 -1.69833 0.693403 + N0 0.707107 -0.707107 0 N1 0.501718 -0.865031 0 N2 0.470609 -0.811395 -0.346647 + txt003 +STRI + V0 0.997476 -1.69833 0.693403 V1 1.3937 -1.3937 0.693403 V2 1.42 -1.42 0.9 + N0 0.470609 -0.811395 -0.346647 N1 0.663205 -0.663205 -0.34687 N2 0.707107 -0.707107 0 + txt003 +STRI + V0 1.0163 -1.73037 0.9 V1 0.537037 -1.92963 0.9 V2 0.527092 -1.8939 0.693403 + N0 0.501718 -0.865031 0 N1 0.260275 -0.965535 0 N2 0.244192 -0.905874 -0.346067 + txt003 +STRI + V0 0.527092 -1.8939 0.693403 V1 0.997476 -1.69833 0.693403 V2 1.0163 -1.73037 0.9 + N0 0.244192 -0.905874 -0.346067 N1 0.470609 -0.811395 -0.346647 N2 0.501718 -0.865031 0 + txt003 +STRI + V0 0.537037 -1.92963 0.9 V1 0 -2 0.9 V2 2.22045e-16 -1.96296 0.693403 + N0 0.260275 -0.965535 0 N1 -0 -1 -0 N2 -3.49072e-17 -0.938373 -0.345625 + txt003 +STRI + V0 2.22045e-16 -1.96296 0.693403 V1 0.527092 -1.8939 0.693403 V2 0.537037 -1.92963 0.9 + N0 -3.49072e-17 -0.938373 -0.345625 N1 0.244192 -0.905874 -0.346067 N2 0.260275 -0.965535 0 + txt003 +STRI + V0 1.96296 0 0.693403 V1 1.8939 -0.527092 0.693403 V2 1.80456 -0.502229 0.522222 + N0 0.938373 0 -0.345625 N1 0.905874 -0.244192 -0.346067 N2 0.782908 -0.211045 -0.585248 + txt003 +STRI + V0 1.80456 -0.502229 0.522222 V1 1.87037 0 0.522222 V2 1.96296 0 0.693403 + N0 0.782908 -0.211045 -0.585248 N1 0.811257 0 -0.58469 N2 0.938373 0 -0.345625 + txt003 +STRI + V0 1.8939 -0.527092 0.693403 V1 1.69833 -0.997476 0.693403 V2 1.61822 -0.950425 0.522222 + N0 0.905874 -0.244192 -0.346067 N1 0.811395 -0.470609 -0.346647 N2 0.700957 -0.406555 -0.58598 + txt003 +STRI + V0 1.61822 -0.950425 0.522222 V1 1.80456 -0.502229 0.522222 V2 1.8939 -0.527092 0.693403 + N0 0.700957 -0.406555 -0.58598 N1 0.782908 -0.211045 -0.585248 N2 0.905874 -0.244192 -0.346067 + txt003 +STRI + V0 1.69833 -0.997476 0.693403 V1 1.3937 -1.3937 0.693403 V2 1.32796 -1.32796 0.522222 + N0 0.811395 -0.470609 -0.346647 N1 0.663205 -0.663205 -0.34687 N2 0.572843 -0.572843 -0.586261 + txt003 +STRI + V0 1.32796 -1.32796 0.522222 V1 1.61822 -0.950425 0.522222 V2 1.69833 -0.997476 0.693403 + N0 0.572843 -0.572843 -0.586261 N1 0.700957 -0.406555 -0.58598 N2 0.811395 -0.470609 -0.346647 + txt003 +STRI + V0 1.3937 -1.3937 0.693403 V1 0.997476 -1.69833 0.693403 V2 0.950425 -1.61822 0.522222 + N0 0.663205 -0.663205 -0.34687 N1 0.470609 -0.811395 -0.346647 N2 0.406555 -0.700957 -0.58598 + txt003 +STRI + V0 0.950425 -1.61822 0.522222 V1 1.32796 -1.32796 0.522222 V2 1.3937 -1.3937 0.693403 + N0 0.406555 -0.700957 -0.58598 N1 0.572843 -0.572843 -0.586261 N2 0.663205 -0.663205 -0.34687 + txt003 +STRI + V0 0.997476 -1.69833 0.693403 V1 0.527092 -1.8939 0.693403 V2 0.502229 -1.80456 0.522222 + N0 0.470609 -0.811395 -0.346647 N1 0.244192 -0.905874 -0.346067 N2 0.211045 -0.782908 -0.585248 + txt003 +STRI + V0 0.502229 -1.80456 0.522222 V1 0.950425 -1.61822 0.522222 V2 0.997476 -1.69833 0.693403 + N0 0.211045 -0.782908 -0.585248 N1 0.406555 -0.700957 -0.58598 N2 0.470609 -0.811395 -0.346647 + txt003 +STRI + V0 0.527092 -1.8939 0.693403 V1 2.22045e-16 -1.96296 0.693403 V2 2.22045e-16 -1.87037 0.522222 + N0 0.244192 -0.905874 -0.346067 N1 -3.49072e-17 -0.938373 -0.345625 N2 -6.19755e-17 -0.811257 -0.58469 + txt003 +STRI + V0 2.22045e-16 -1.87037 0.522222 V1 0.502229 -1.80456 0.522222 V2 0.527092 -1.8939 0.693403 + N0 -6.19755e-17 -0.811257 -0.58469 N1 0.211045 -0.782908 -0.585248 N2 0.244192 -0.905874 -0.346067 + txt003 +STRI + V0 1.87037 0 0.522222 V1 1.80456 -0.502229 0.522222 V2 1.68843 -0.469907 0.384375 + N0 0.811257 0 -0.58469 N1 0.782908 -0.211045 -0.585248 N2 0.673539 -0.181563 -0.716506 + txt003 +STRI + V0 1.68843 -0.469907 0.384375 V1 1.75 0 0.384375 V2 1.87037 0 0.522222 + N0 0.673539 -0.181563 -0.716506 N1 0.6981 0 -0.716 N2 0.811257 0 -0.58469 + txt003 +STRI + V0 1.80456 -0.502229 0.522222 V1 1.61822 -0.950425 0.522222 V2 1.51407 -0.889259 0.384375 + N0 0.782908 -0.211045 -0.585248 N1 0.700957 -0.406555 -0.58598 N2 0.602839 -0.349647 -0.717169 + txt003 +STRI + V0 1.51407 -0.889259 0.384375 V1 1.68843 -0.469907 0.384375 V2 1.80456 -0.502229 0.522222 + N0 0.602839 -0.349647 -0.717169 N1 0.673539 -0.181563 -0.716506 N2 0.782908 -0.211045 -0.585248 + txt003 +STRI + V0 1.61822 -0.950425 0.522222 V1 1.32796 -1.32796 0.522222 V2 1.2425 -1.2425 0.384375 + N0 0.700957 -0.406555 -0.58598 N1 0.572843 -0.572843 -0.586261 N2 0.492597 -0.492597 -0.717423 + txt003 +STRI + V0 1.2425 -1.2425 0.384375 V1 1.51407 -0.889259 0.384375 V2 1.61822 -0.950425 0.522222 + N0 0.492597 -0.492597 -0.717423 N1 0.602839 -0.349647 -0.717169 N2 0.700957 -0.406555 -0.58598 + txt003 +STRI + V0 1.32796 -1.32796 0.522222 V1 0.950425 -1.61822 0.522222 V2 0.889259 -1.51407 0.384375 + N0 0.572843 -0.572843 -0.586261 N1 0.406555 -0.700957 -0.58598 N2 0.349647 -0.602839 -0.717169 + txt003 +STRI + V0 0.889259 -1.51407 0.384375 V1 1.2425 -1.2425 0.384375 V2 1.32796 -1.32796 0.522222 + N0 0.349647 -0.602839 -0.717169 N1 0.492597 -0.492597 -0.717423 N2 0.572843 -0.572843 -0.586261 + txt003 +STRI + V0 0.950425 -1.61822 0.522222 V1 0.502229 -1.80456 0.522222 V2 0.469907 -1.68843 0.384375 + N0 0.406555 -0.700957 -0.58598 N1 0.211045 -0.782908 -0.585248 N2 0.181563 -0.673539 -0.716506 + txt003 +STRI + V0 0.469907 -1.68843 0.384375 V1 0.889259 -1.51407 0.384375 V2 0.950425 -1.61822 0.522222 + N0 0.181563 -0.673539 -0.716506 N1 0.349647 -0.602839 -0.717169 N2 0.406555 -0.700957 -0.58598 + txt003 +STRI + V0 0.502229 -1.80456 0.522222 V1 2.22045e-16 -1.87037 0.522222 V2 2.22045e-16 -1.75 0.384375 + N0 0.211045 -0.782908 -0.585248 N1 -6.19755e-17 -0.811257 -0.58469 N2 -8.11143e-17 -0.6981 -0.716 + txt003 +STRI + V0 2.22045e-16 -1.75 0.384375 V1 0.469907 -1.68843 0.384375 V2 0.502229 -1.80456 0.522222 + N0 -8.11143e-17 -0.6981 -0.716 N1 0.181563 -0.673539 -0.716506 N2 0.211045 -0.782908 -0.585248 + txt003 +STRI + V0 1.75 0 0.384375 V1 1.68843 -0.469907 0.384375 V2 1.57229 -0.437586 0.277778 + N0 0.6981 0 -0.716 N1 0.673539 -0.181563 -0.716506 N2 0.61392 -0.165491 -0.771826 + txt003 +STRI + V0 1.57229 -0.437586 0.277778 V1 1.62963 0 0.277778 V2 1.75 0 0.384375 + N0 0.61392 -0.165491 -0.771826 N1 0.636383 0 -0.771373 N2 0.6981 0 -0.716 + txt003 +STRI + V0 1.68843 -0.469907 0.384375 V1 1.51407 -0.889259 0.384375 V2 1.40993 -0.828093 0.277778 + N0 0.673539 -0.181563 -0.716506 N1 0.602839 -0.349647 -0.717169 N2 0.549392 -0.318647 -0.77242 + txt003 +STRI + V0 1.40993 -0.828093 0.277778 V1 1.57229 -0.437586 0.277778 V2 1.68843 -0.469907 0.384375 + N0 0.549392 -0.318647 -0.77242 N1 0.61392 -0.165491 -0.771826 N2 0.673539 -0.181563 -0.716506 + txt003 +STRI + V0 1.51407 -0.889259 0.384375 V1 1.2425 -1.2425 0.384375 V2 1.15704 -1.15704 0.277778 + N0 0.602839 -0.349647 -0.717169 N1 0.492597 -0.492597 -0.717423 N2 0.448897 -0.448897 -0.772647 + txt003 +STRI + V0 1.15704 -1.15704 0.277778 V1 1.40993 -0.828093 0.277778 V2 1.51407 -0.889259 0.384375 + N0 0.448897 -0.448897 -0.772647 N1 0.549392 -0.318647 -0.77242 N2 0.602839 -0.349647 -0.717169 + txt003 +STRI + V0 1.2425 -1.2425 0.384375 V1 0.889259 -1.51407 0.384375 V2 0.828093 -1.40993 0.277778 + N0 0.492597 -0.492597 -0.717423 N1 0.349647 -0.602839 -0.717169 N2 0.318647 -0.549392 -0.77242 + txt003 +STRI + V0 0.828093 -1.40993 0.277778 V1 1.15704 -1.15704 0.277778 V2 1.2425 -1.2425 0.384375 + N0 0.318647 -0.549392 -0.77242 N1 0.448897 -0.448897 -0.772647 N2 0.492597 -0.492597 -0.717423 + txt003 +STRI + V0 0.889259 -1.51407 0.384375 V1 0.469907 -1.68843 0.384375 V2 0.437586 -1.57229 0.277778 + N0 0.349647 -0.602839 -0.717169 N1 0.181563 -0.673539 -0.716506 N2 0.165491 -0.61392 -0.771826 + txt003 +STRI + V0 0.437586 -1.57229 0.277778 V1 0.828093 -1.40993 0.277778 V2 0.889259 -1.51407 0.384375 + N0 0.165491 -0.61392 -0.771826 N1 0.318647 -0.549392 -0.77242 N2 0.349647 -0.602839 -0.717169 + txt003 +STRI + V0 0.469907 -1.68843 0.384375 V1 2.22045e-16 -1.75 0.384375 V2 0 -1.62963 0.277778 + N0 0.181563 -0.673539 -0.716506 N1 -8.11143e-17 -0.6981 -0.716 N2 -1.97068e-16 -0.636383 -0.771373 + txt003 +STRI + V0 0 -1.62963 0.277778 V1 0.437586 -1.57229 0.277778 V2 0.469907 -1.68843 0.384375 + N0 -1.97068e-16 -0.636383 -0.771373 N1 0.165491 -0.61392 -0.771826 N2 0.181563 -0.673539 -0.716506 + txt003 +STRI + V0 1.62963 0 0.277778 V1 1.57229 -0.437586 0.277778 V2 1.48296 -0.412723 0.200347 + N0 0.636383 0 -0.771373 N1 0.61392 -0.165491 -0.771826 N2 0.651276 -0.175561 -0.738253 + txt003 +STRI + V0 1.48296 -0.412723 0.200347 V1 1.53704 0 0.200347 V2 1.62963 0 0.277778 + N0 0.651276 -0.175561 -0.738253 N1 0.675056 0 -0.737766 N2 0.636383 0 -0.771373 + txt003 +STRI + V0 1.57229 -0.437586 0.277778 V1 1.40993 -0.828093 0.277778 V2 1.32982 -0.781043 0.200347 + N0 0.61392 -0.165491 -0.771826 N1 0.549392 -0.318647 -0.77242 N2 0.582878 -0.338069 -0.738893 + txt003 +STRI + V0 1.32982 -0.781043 0.200347 V1 1.48296 -0.412723 0.200347 V2 1.57229 -0.437586 0.277778 + N0 0.582878 -0.338069 -0.738893 N1 0.651276 -0.175561 -0.738253 N2 0.61392 -0.165491 -0.771826 + txt003 +STRI + V0 1.40993 -0.828093 0.277778 V1 1.15704 -1.15704 0.277778 V2 1.0913 -1.0913 0.200347 + N0 0.549392 -0.318647 -0.77242 N1 0.448897 -0.448897 -0.772647 N2 0.476275 -0.476275 -0.739137 + txt003 +STRI + V0 1.0913 -1.0913 0.200347 V1 1.32982 -0.781043 0.200347 V2 1.40993 -0.828093 0.277778 + N0 0.476275 -0.476275 -0.739137 N1 0.582878 -0.338069 -0.738893 N2 0.549392 -0.318647 -0.77242 + txt003 +STRI + V0 1.15704 -1.15704 0.277778 V1 0.828093 -1.40993 0.277778 V2 0.781043 -1.32982 0.200347 + N0 0.448897 -0.448897 -0.772647 N1 0.318647 -0.549392 -0.77242 N2 0.338069 -0.582878 -0.738893 + txt003 +STRI + V0 0.781043 -1.32982 0.200347 V1 1.0913 -1.0913 0.200347 V2 1.15704 -1.15704 0.277778 + N0 0.338069 -0.582878 -0.738893 N1 0.476275 -0.476275 -0.739137 N2 0.448897 -0.448897 -0.772647 + txt003 +STRI + V0 0.828093 -1.40993 0.277778 V1 0.437586 -1.57229 0.277778 V2 0.412723 -1.48296 0.200347 + N0 0.318647 -0.549392 -0.77242 N1 0.165491 -0.61392 -0.771826 N2 0.175561 -0.651276 -0.738253 + txt003 +STRI + V0 0.412723 -1.48296 0.200347 V1 0.781043 -1.32982 0.200347 V2 0.828093 -1.40993 0.277778 + N0 0.175561 -0.651276 -0.738253 N1 0.338069 -0.582878 -0.738893 N2 0.318647 -0.549392 -0.77242 + txt003 +STRI + V0 0.437586 -1.57229 0.277778 V1 0 -1.62963 0.277778 V2 0 -1.53704 0.200347 + N0 0.165491 -0.61392 -0.771826 N1 -1.97068e-16 -0.636383 -0.771373 N2 -9.51605e-17 -0.675056 -0.737766 + txt003 +STRI + V0 0 -1.53704 0.200347 V1 0.412723 -1.48296 0.200347 V2 0.437586 -1.57229 0.277778 + N0 -9.51605e-17 -0.675056 -0.737766 N1 0.175561 -0.651276 -0.738253 N2 0.165491 -0.61392 -0.771826 + txt003 +STRI + V0 1.53704 0 0.200347 V1 1.48296 -0.412723 0.200347 V2 1.44722 -0.402778 0.15 + N0 0.675056 0 -0.737766 N1 0.651276 -0.175561 -0.738253 N2 0.965535 -0.260275 0 + txt003 +STRI + V0 1.44722 -0.402778 0.15 V1 1.5 0 0.15 V2 1.53704 0 0.200347 + N0 0.965535 -0.260275 0 N1 1 0 0 N2 0.675056 0 -0.737766 + txt003 +STRI + V0 1.48296 -0.412723 0.200347 V1 1.32982 -0.781043 0.200347 V2 1.29778 -0.762222 0.15 + N0 0.651276 -0.175561 -0.738253 N1 0.582878 -0.338069 -0.738893 N2 0.865031 -0.501718 0 + txt003 +STRI + V0 1.29778 -0.762222 0.15 V1 1.44722 -0.402778 0.15 V2 1.48296 -0.412723 0.200347 + N0 0.865031 -0.501718 0 N1 0.965535 -0.260275 0 N2 0.651276 -0.175561 -0.738253 + txt003 +STRI + V0 1.32982 -0.781043 0.200347 V1 1.0913 -1.0913 0.200347 V2 1.065 -1.065 0.15 + N0 0.582878 -0.338069 -0.738893 N1 0.476275 -0.476275 -0.739137 N2 0.707107 -0.707107 0 + txt003 +STRI + V0 1.065 -1.065 0.15 V1 1.29778 -0.762222 0.15 V2 1.32982 -0.781043 0.200347 + N0 0.707107 -0.707107 0 N1 0.865031 -0.501718 0 N2 0.582878 -0.338069 -0.738893 + txt003 +STRI + V0 1.0913 -1.0913 0.200347 V1 0.781043 -1.32982 0.200347 V2 0.762222 -1.29778 0.15 + N0 0.476275 -0.476275 -0.739137 N1 0.338069 -0.582878 -0.738893 N2 0.501718 -0.865031 0 + txt003 +STRI + V0 0.762222 -1.29778 0.15 V1 1.065 -1.065 0.15 V2 1.0913 -1.0913 0.200347 + N0 0.501718 -0.865031 0 N1 0.707107 -0.707107 0 N2 0.476275 -0.476275 -0.739137 + txt003 +STRI + V0 0.781043 -1.32982 0.200347 V1 0.412723 -1.48296 0.200347 V2 0.402778 -1.44722 0.15 + N0 0.338069 -0.582878 -0.738893 N1 0.175561 -0.651276 -0.738253 N2 0.260275 -0.965535 0 + txt003 +STRI + V0 0.402778 -1.44722 0.15 V1 0.762222 -1.29778 0.15 V2 0.781043 -1.32982 0.200347 + N0 0.260275 -0.965535 0 N1 0.501718 -0.865031 0 N2 0.338069 -0.582878 -0.738893 + txt003 +STRI + V0 0.412723 -1.48296 0.200347 V1 0 -1.53704 0.200347 V2 0 -1.5 0.15 + N0 0.175561 -0.651276 -0.738253 N1 -9.51605e-17 -0.675056 -0.737766 N2 -0 -1 -0 + txt003 +STRI + V0 0 -1.5 0.15 V1 0.402778 -1.44722 0.15 V2 0.412723 -1.48296 0.200347 + N0 -0 -1 -0 N1 0.260275 -0.965535 0 N2 0.175561 -0.651276 -0.738253 + txt003 +STRI + V0 0 -2 0.9 V1 -0.537037 -1.92963 0.9 V2 -0.527092 -1.8939 0.693403 + N0 -0 -1 -0 N1 -0.260275 -0.965535 -0 N2 -0.244192 -0.905874 -0.346067 + txt003 +STRI + V0 -0.527092 -1.8939 0.693403 V1 0 -1.96296 0.693403 V2 0 -2 0.9 + N0 -0.244192 -0.905874 -0.346067 N1 -0 -0.938373 -0.345625 N2 -0 -1 -0 + txt003 +STRI + V0 -0.537037 -1.92963 0.9 V1 -1.0163 -1.73037 0.9 V2 -0.997476 -1.69833 0.693403 + N0 -0.260275 -0.965535 -0 N1 -0.501718 -0.865031 -0 N2 -0.470609 -0.811395 -0.346647 + txt003 +STRI + V0 -0.997476 -1.69833 0.693403 V1 -0.527092 -1.8939 0.693403 V2 -0.537037 -1.92963 0.9 + N0 -0.470609 -0.811395 -0.346647 N1 -0.244192 -0.905874 -0.346067 N2 -0.260275 -0.965535 -0 + txt003 +STRI + V0 -1.0163 -1.73037 0.9 V1 -1.42 -1.42 0.9 V2 -1.3937 -1.3937 0.693403 + N0 -0.501718 -0.865031 -0 N1 -0.707107 -0.707107 -0 N2 -0.663205 -0.663205 -0.34687 + txt003 +STRI + V0 -1.3937 -1.3937 0.693403 V1 -0.997476 -1.69833 0.693403 V2 -1.0163 -1.73037 0.9 + N0 -0.663205 -0.663205 -0.34687 N1 -0.470609 -0.811395 -0.346647 N2 -0.501718 -0.865031 -0 + txt003 +STRI + V0 -1.42 -1.42 0.9 V1 -1.73037 -1.0163 0.9 V2 -1.69833 -0.997476 0.693403 + N0 -0.707107 -0.707107 -0 N1 -0.865031 -0.501718 -0 N2 -0.811395 -0.470609 -0.346647 + txt003 +STRI + V0 -1.69833 -0.997476 0.693403 V1 -1.3937 -1.3937 0.693403 V2 -1.42 -1.42 0.9 + N0 -0.811395 -0.470609 -0.346647 N1 -0.663205 -0.663205 -0.34687 N2 -0.707107 -0.707107 -0 + txt003 +STRI + V0 -1.73037 -1.0163 0.9 V1 -1.92963 -0.537037 0.9 V2 -1.8939 -0.527092 0.693403 + N0 -0.865031 -0.501718 -0 N1 -0.965535 -0.260275 -0 N2 -0.905874 -0.244192 -0.346067 + txt003 +STRI + V0 -1.8939 -0.527092 0.693403 V1 -1.69833 -0.997476 0.693403 V2 -1.73037 -1.0163 0.9 + N0 -0.905874 -0.244192 -0.346067 N1 -0.811395 -0.470609 -0.346647 N2 -0.865031 -0.501718 -0 + txt003 +STRI + V0 -1.92963 -0.537037 0.9 V1 -2 0 0.9 V2 -1.96296 -2.22045e-16 0.693403 + N0 -0.965535 -0.260275 -0 N1 -1 0 0 N2 -0.938373 3.49072e-17 -0.345625 + txt003 +STRI + V0 -1.96296 -2.22045e-16 0.693403 V1 -1.8939 -0.527092 0.693403 V2 -1.92963 -0.537037 0.9 + N0 -0.938373 3.49072e-17 -0.345625 N1 -0.905874 -0.244192 -0.346067 N2 -0.965535 -0.260275 -0 + txt003 +STRI + V0 0 -1.96296 0.693403 V1 -0.527092 -1.8939 0.693403 V2 -0.502229 -1.80456 0.522222 + N0 -0 -0.938373 -0.345625 N1 -0.244192 -0.905874 -0.346067 N2 -0.211045 -0.782908 -0.585248 + txt003 +STRI + V0 -0.502229 -1.80456 0.522222 V1 0 -1.87037 0.522222 V2 0 -1.96296 0.693403 + N0 -0.211045 -0.782908 -0.585248 N1 -0 -0.811257 -0.58469 N2 -0 -0.938373 -0.345625 + txt003 +STRI + V0 -0.527092 -1.8939 0.693403 V1 -0.997476 -1.69833 0.693403 V2 -0.950425 -1.61822 0.522222 + N0 -0.244192 -0.905874 -0.346067 N1 -0.470609 -0.811395 -0.346647 N2 -0.406555 -0.700957 -0.58598 + txt003 +STRI + V0 -0.950425 -1.61822 0.522222 V1 -0.502229 -1.80456 0.522222 V2 -0.527092 -1.8939 0.693403 + N0 -0.406555 -0.700957 -0.58598 N1 -0.211045 -0.782908 -0.585248 N2 -0.244192 -0.905874 -0.346067 + txt003 +STRI + V0 -0.997476 -1.69833 0.693403 V1 -1.3937 -1.3937 0.693403 V2 -1.32796 -1.32796 0.522222 + N0 -0.470609 -0.811395 -0.346647 N1 -0.663205 -0.663205 -0.34687 N2 -0.572843 -0.572843 -0.586261 + txt003 +STRI + V0 -1.32796 -1.32796 0.522222 V1 -0.950425 -1.61822 0.522222 V2 -0.997476 -1.69833 0.693403 + N0 -0.572843 -0.572843 -0.586261 N1 -0.406555 -0.700957 -0.58598 N2 -0.470609 -0.811395 -0.346647 + txt003 +STRI + V0 -1.3937 -1.3937 0.693403 V1 -1.69833 -0.997476 0.693403 V2 -1.61822 -0.950425 0.522222 + N0 -0.663205 -0.663205 -0.34687 N1 -0.811395 -0.470609 -0.346647 N2 -0.700957 -0.406555 -0.58598 + txt003 +STRI + V0 -1.61822 -0.950425 0.522222 V1 -1.32796 -1.32796 0.522222 V2 -1.3937 -1.3937 0.693403 + N0 -0.700957 -0.406555 -0.58598 N1 -0.572843 -0.572843 -0.586261 N2 -0.663205 -0.663205 -0.34687 + txt003 +STRI + V0 -1.69833 -0.997476 0.693403 V1 -1.8939 -0.527092 0.693403 V2 -1.80456 -0.502229 0.522222 + N0 -0.811395 -0.470609 -0.346647 N1 -0.905874 -0.244192 -0.346067 N2 -0.782908 -0.211045 -0.585248 + txt003 +STRI + V0 -1.80456 -0.502229 0.522222 V1 -1.61822 -0.950425 0.522222 V2 -1.69833 -0.997476 0.693403 + N0 -0.782908 -0.211045 -0.585248 N1 -0.700957 -0.406555 -0.58598 N2 -0.811395 -0.470609 -0.346647 + txt003 +STRI + V0 -1.8939 -0.527092 0.693403 V1 -1.96296 -2.22045e-16 0.693403 V2 -1.87037 -2.22045e-16 0.522222 + N0 -0.905874 -0.244192 -0.346067 N1 -0.938373 3.49072e-17 -0.345625 N2 -0.811257 6.19755e-17 -0.58469 + txt003 +STRI + V0 -1.87037 -2.22045e-16 0.522222 V1 -1.80456 -0.502229 0.522222 V2 -1.8939 -0.527092 0.693403 + N0 -0.811257 6.19755e-17 -0.58469 N1 -0.782908 -0.211045 -0.585248 N2 -0.905874 -0.244192 -0.346067 + txt003 +STRI + V0 0 -1.87037 0.522222 V1 -0.502229 -1.80456 0.522222 V2 -0.469907 -1.68843 0.384375 + N0 -0 -0.811257 -0.58469 N1 -0.211045 -0.782908 -0.585248 N2 -0.181563 -0.673539 -0.716506 + txt003 +STRI + V0 -0.469907 -1.68843 0.384375 V1 0 -1.75 0.384375 V2 0 -1.87037 0.522222 + N0 -0.181563 -0.673539 -0.716506 N1 -0 -0.6981 -0.716 N2 -0 -0.811257 -0.58469 + txt003 +STRI + V0 -0.502229 -1.80456 0.522222 V1 -0.950425 -1.61822 0.522222 V2 -0.889259 -1.51407 0.384375 + N0 -0.211045 -0.782908 -0.585248 N1 -0.406555 -0.700957 -0.58598 N2 -0.349647 -0.602839 -0.717169 + txt003 +STRI + V0 -0.889259 -1.51407 0.384375 V1 -0.469907 -1.68843 0.384375 V2 -0.502229 -1.80456 0.522222 + N0 -0.349647 -0.602839 -0.717169 N1 -0.181563 -0.673539 -0.716506 N2 -0.211045 -0.782908 -0.585248 + txt003 +STRI + V0 -0.950425 -1.61822 0.522222 V1 -1.32796 -1.32796 0.522222 V2 -1.2425 -1.2425 0.384375 + N0 -0.406555 -0.700957 -0.58598 N1 -0.572843 -0.572843 -0.586261 N2 -0.492597 -0.492597 -0.717423 + txt003 +STRI + V0 -1.2425 -1.2425 0.384375 V1 -0.889259 -1.51407 0.384375 V2 -0.950425 -1.61822 0.522222 + N0 -0.492597 -0.492597 -0.717423 N1 -0.349647 -0.602839 -0.717169 N2 -0.406555 -0.700957 -0.58598 + txt003 +STRI + V0 -1.32796 -1.32796 0.522222 V1 -1.61822 -0.950425 0.522222 V2 -1.51407 -0.889259 0.384375 + N0 -0.572843 -0.572843 -0.586261 N1 -0.700957 -0.406555 -0.58598 N2 -0.602839 -0.349647 -0.717169 + txt003 +STRI + V0 -1.51407 -0.889259 0.384375 V1 -1.2425 -1.2425 0.384375 V2 -1.32796 -1.32796 0.522222 + N0 -0.602839 -0.349647 -0.717169 N1 -0.492597 -0.492597 -0.717423 N2 -0.572843 -0.572843 -0.586261 + txt003 +STRI + V0 -1.61822 -0.950425 0.522222 V1 -1.80456 -0.502229 0.522222 V2 -1.68843 -0.469907 0.384375 + N0 -0.700957 -0.406555 -0.58598 N1 -0.782908 -0.211045 -0.585248 N2 -0.673539 -0.181563 -0.716506 + txt003 +STRI + V0 -1.68843 -0.469907 0.384375 V1 -1.51407 -0.889259 0.384375 V2 -1.61822 -0.950425 0.522222 + N0 -0.673539 -0.181563 -0.716506 N1 -0.602839 -0.349647 -0.717169 N2 -0.700957 -0.406555 -0.58598 + txt003 +STRI + V0 -1.80456 -0.502229 0.522222 V1 -1.87037 -2.22045e-16 0.522222 V2 -1.75 -2.22045e-16 0.384375 + N0 -0.782908 -0.211045 -0.585248 N1 -0.811257 6.19755e-17 -0.58469 N2 -0.6981 8.11143e-17 -0.716 + txt003 +STRI + V0 -1.75 -2.22045e-16 0.384375 V1 -1.68843 -0.469907 0.384375 V2 -1.80456 -0.502229 0.522222 + N0 -0.6981 8.11143e-17 -0.716 N1 -0.673539 -0.181563 -0.716506 N2 -0.782908 -0.211045 -0.585248 + txt003 +STRI + V0 0 -1.75 0.384375 V1 -0.469907 -1.68843 0.384375 V2 -0.437586 -1.57229 0.277778 + N0 -0 -0.6981 -0.716 N1 -0.181563 -0.673539 -0.716506 N2 -0.165491 -0.61392 -0.771826 + txt003 +STRI + V0 -0.437586 -1.57229 0.277778 V1 0 -1.62963 0.277778 V2 0 -1.75 0.384375 + N0 -0.165491 -0.61392 -0.771826 N1 -0 -0.636383 -0.771373 N2 -0 -0.6981 -0.716 + txt003 +STRI + V0 -0.469907 -1.68843 0.384375 V1 -0.889259 -1.51407 0.384375 V2 -0.828093 -1.40993 0.277778 + N0 -0.181563 -0.673539 -0.716506 N1 -0.349647 -0.602839 -0.717169 N2 -0.318647 -0.549392 -0.77242 + txt003 +STRI + V0 -0.828093 -1.40993 0.277778 V1 -0.437586 -1.57229 0.277778 V2 -0.469907 -1.68843 0.384375 + N0 -0.318647 -0.549392 -0.77242 N1 -0.165491 -0.61392 -0.771826 N2 -0.181563 -0.673539 -0.716506 + txt003 +STRI + V0 -0.889259 -1.51407 0.384375 V1 -1.2425 -1.2425 0.384375 V2 -1.15704 -1.15704 0.277778 + N0 -0.349647 -0.602839 -0.717169 N1 -0.492597 -0.492597 -0.717423 N2 -0.448897 -0.448897 -0.772647 + txt003 +STRI + V0 -1.15704 -1.15704 0.277778 V1 -0.828093 -1.40993 0.277778 V2 -0.889259 -1.51407 0.384375 + N0 -0.448897 -0.448897 -0.772647 N1 -0.318647 -0.549392 -0.77242 N2 -0.349647 -0.602839 -0.717169 + txt003 +STRI + V0 -1.2425 -1.2425 0.384375 V1 -1.51407 -0.889259 0.384375 V2 -1.40993 -0.828093 0.277778 + N0 -0.492597 -0.492597 -0.717423 N1 -0.602839 -0.349647 -0.717169 N2 -0.549392 -0.318647 -0.77242 + txt003 +STRI + V0 -1.40993 -0.828093 0.277778 V1 -1.15704 -1.15704 0.277778 V2 -1.2425 -1.2425 0.384375 + N0 -0.549392 -0.318647 -0.77242 N1 -0.448897 -0.448897 -0.772647 N2 -0.492597 -0.492597 -0.717423 + txt003 +STRI + V0 -1.51407 -0.889259 0.384375 V1 -1.68843 -0.469907 0.384375 V2 -1.57229 -0.437586 0.277778 + N0 -0.602839 -0.349647 -0.717169 N1 -0.673539 -0.181563 -0.716506 N2 -0.61392 -0.165491 -0.771826 + txt003 +STRI + V0 -1.57229 -0.437586 0.277778 V1 -1.40993 -0.828093 0.277778 V2 -1.51407 -0.889259 0.384375 + N0 -0.61392 -0.165491 -0.771826 N1 -0.549392 -0.318647 -0.77242 N2 -0.602839 -0.349647 -0.717169 + txt003 +STRI + V0 -1.68843 -0.469907 0.384375 V1 -1.75 -2.22045e-16 0.384375 V2 -1.62963 0 0.277778 + N0 -0.673539 -0.181563 -0.716506 N1 -0.6981 8.11143e-17 -0.716 N2 -0.636383 1.97068e-16 -0.771373 + txt003 +STRI + V0 -1.62963 0 0.277778 V1 -1.57229 -0.437586 0.277778 V2 -1.68843 -0.469907 0.384375 + N0 -0.636383 1.97068e-16 -0.771373 N1 -0.61392 -0.165491 -0.771826 N2 -0.673539 -0.181563 -0.716506 + txt003 +STRI + V0 0 -1.62963 0.277778 V1 -0.437586 -1.57229 0.277778 V2 -0.412723 -1.48296 0.200347 + N0 -0 -0.636383 -0.771373 N1 -0.165491 -0.61392 -0.771826 N2 -0.175561 -0.651276 -0.738253 + txt003 +STRI + V0 -0.412723 -1.48296 0.200347 V1 0 -1.53704 0.200347 V2 0 -1.62963 0.277778 + N0 -0.175561 -0.651276 -0.738253 N1 -0 -0.675056 -0.737766 N2 -0 -0.636383 -0.771373 + txt003 +STRI + V0 -0.437586 -1.57229 0.277778 V1 -0.828093 -1.40993 0.277778 V2 -0.781043 -1.32982 0.200347 + N0 -0.165491 -0.61392 -0.771826 N1 -0.318647 -0.549392 -0.77242 N2 -0.338069 -0.582878 -0.738893 + txt003 +STRI + V0 -0.781043 -1.32982 0.200347 V1 -0.412723 -1.48296 0.200347 V2 -0.437586 -1.57229 0.277778 + N0 -0.338069 -0.582878 -0.738893 N1 -0.175561 -0.651276 -0.738253 N2 -0.165491 -0.61392 -0.771826 + txt003 +STRI + V0 -0.828093 -1.40993 0.277778 V1 -1.15704 -1.15704 0.277778 V2 -1.0913 -1.0913 0.200347 + N0 -0.318647 -0.549392 -0.77242 N1 -0.448897 -0.448897 -0.772647 N2 -0.476275 -0.476275 -0.739137 + txt003 +STRI + V0 -1.0913 -1.0913 0.200347 V1 -0.781043 -1.32982 0.200347 V2 -0.828093 -1.40993 0.277778 + N0 -0.476275 -0.476275 -0.739137 N1 -0.338069 -0.582878 -0.738893 N2 -0.318647 -0.549392 -0.77242 + txt003 +STRI + V0 -1.15704 -1.15704 0.277778 V1 -1.40993 -0.828093 0.277778 V2 -1.32982 -0.781043 0.200347 + N0 -0.448897 -0.448897 -0.772647 N1 -0.549392 -0.318647 -0.77242 N2 -0.582878 -0.338069 -0.738893 + txt003 +STRI + V0 -1.32982 -0.781043 0.200347 V1 -1.0913 -1.0913 0.200347 V2 -1.15704 -1.15704 0.277778 + N0 -0.582878 -0.338069 -0.738893 N1 -0.476275 -0.476275 -0.739137 N2 -0.448897 -0.448897 -0.772647 + txt003 +STRI + V0 -1.40993 -0.828093 0.277778 V1 -1.57229 -0.437586 0.277778 V2 -1.48296 -0.412723 0.200347 + N0 -0.549392 -0.318647 -0.77242 N1 -0.61392 -0.165491 -0.771826 N2 -0.651276 -0.175561 -0.738253 + txt003 +STRI + V0 -1.48296 -0.412723 0.200347 V1 -1.32982 -0.781043 0.200347 V2 -1.40993 -0.828093 0.277778 + N0 -0.651276 -0.175561 -0.738253 N1 -0.582878 -0.338069 -0.738893 N2 -0.549392 -0.318647 -0.77242 + txt003 +STRI + V0 -1.57229 -0.437586 0.277778 V1 -1.62963 0 0.277778 V2 -1.53704 0 0.200347 + N0 -0.61392 -0.165491 -0.771826 N1 -0.636383 1.97068e-16 -0.771373 N2 -0.675056 9.51605e-17 -0.737766 + txt003 +STRI + V0 -1.53704 0 0.200347 V1 -1.48296 -0.412723 0.200347 V2 -1.57229 -0.437586 0.277778 + N0 -0.675056 9.51605e-17 -0.737766 N1 -0.651276 -0.175561 -0.738253 N2 -0.61392 -0.165491 -0.771826 + txt003 +STRI + V0 0 -1.53704 0.200347 V1 -0.412723 -1.48296 0.200347 V2 -0.402778 -1.44722 0.15 + N0 -0 -0.675056 -0.737766 N1 -0.175561 -0.651276 -0.738253 N2 -0.260275 -0.965535 -0 + txt003 +STRI + V0 -0.402778 -1.44722 0.15 V1 0 -1.5 0.15 V2 0 -1.53704 0.200347 + N0 -0.260275 -0.965535 -0 N1 -0 -1 -0 N2 -0 -0.675056 -0.737766 + txt003 +STRI + V0 -0.412723 -1.48296 0.200347 V1 -0.781043 -1.32982 0.200347 V2 -0.762222 -1.29778 0.15 + N0 -0.175561 -0.651276 -0.738253 N1 -0.338069 -0.582878 -0.738893 N2 -0.501718 -0.865031 -0 + txt003 +STRI + V0 -0.762222 -1.29778 0.15 V1 -0.402778 -1.44722 0.15 V2 -0.412723 -1.48296 0.200347 + N0 -0.501718 -0.865031 -0 N1 -0.260275 -0.965535 -0 N2 -0.175561 -0.651276 -0.738253 + txt003 +STRI + V0 -0.781043 -1.32982 0.200347 V1 -1.0913 -1.0913 0.200347 V2 -1.065 -1.065 0.15 + N0 -0.338069 -0.582878 -0.738893 N1 -0.476275 -0.476275 -0.739137 N2 -0.707107 -0.707107 -0 + txt003 +STRI + V0 -1.065 -1.065 0.15 V1 -0.762222 -1.29778 0.15 V2 -0.781043 -1.32982 0.200347 + N0 -0.707107 -0.707107 -0 N1 -0.501718 -0.865031 -0 N2 -0.338069 -0.582878 -0.738893 + txt003 +STRI + V0 -1.0913 -1.0913 0.200347 V1 -1.32982 -0.781043 0.200347 V2 -1.29778 -0.762222 0.15 + N0 -0.476275 -0.476275 -0.739137 N1 -0.582878 -0.338069 -0.738893 N2 -0.865031 -0.501718 -0 + txt003 +STRI + V0 -1.29778 -0.762222 0.15 V1 -1.065 -1.065 0.15 V2 -1.0913 -1.0913 0.200347 + N0 -0.865031 -0.501718 -0 N1 -0.707107 -0.707107 -0 N2 -0.476275 -0.476275 -0.739137 + txt003 +STRI + V0 -1.32982 -0.781043 0.200347 V1 -1.48296 -0.412723 0.200347 V2 -1.44722 -0.402778 0.15 + N0 -0.582878 -0.338069 -0.738893 N1 -0.651276 -0.175561 -0.738253 N2 -0.965535 -0.260275 -0 + txt003 +STRI + V0 -1.44722 -0.402778 0.15 V1 -1.29778 -0.762222 0.15 V2 -1.32982 -0.781043 0.200347 + N0 -0.965535 -0.260275 -0 N1 -0.865031 -0.501718 -0 N2 -0.582878 -0.338069 -0.738893 + txt003 +STRI + V0 -1.48296 -0.412723 0.200347 V1 -1.53704 0 0.200347 V2 -1.5 0 0.15 + N0 -0.651276 -0.175561 -0.738253 N1 -0.675056 9.51605e-17 -0.737766 N2 -1 0 0 + txt003 +STRI + V0 -1.5 0 0.15 V1 -1.44722 -0.402778 0.15 V2 -1.48296 -0.412723 0.200347 + N0 -1 0 0 N1 -0.965535 -0.260275 -0 N2 -0.651276 -0.175561 -0.738253 + txt003 +STRI + V0 -2 0 0.9 V1 -1.92963 0.537037 0.9 V2 -1.8939 0.527092 0.693403 + N0 -1 0 0 N1 -0.965535 0.260275 0 N2 -0.905874 0.244192 -0.346067 + txt003 +STRI + V0 -1.8939 0.527092 0.693403 V1 -1.96296 0 0.693403 V2 -2 0 0.9 + N0 -0.905874 0.244192 -0.346067 N1 -0.938373 0 -0.345625 N2 -1 0 0 + txt003 +STRI + V0 -1.92963 0.537037 0.9 V1 -1.73037 1.0163 0.9 V2 -1.69833 0.997476 0.693403 + N0 -0.965535 0.260275 0 N1 -0.865031 0.501718 0 N2 -0.811395 0.470609 -0.346647 + txt003 +STRI + V0 -1.69833 0.997476 0.693403 V1 -1.8939 0.527092 0.693403 V2 -1.92963 0.537037 0.9 + N0 -0.811395 0.470609 -0.346647 N1 -0.905874 0.244192 -0.346067 N2 -0.965535 0.260275 0 + txt003 +STRI + V0 -1.73037 1.0163 0.9 V1 -1.42 1.42 0.9 V2 -1.3937 1.3937 0.693403 + N0 -0.865031 0.501718 0 N1 -0.707107 0.707107 0 N2 -0.663205 0.663205 -0.34687 + txt003 +STRI + V0 -1.3937 1.3937 0.693403 V1 -1.69833 0.997476 0.693403 V2 -1.73037 1.0163 0.9 + N0 -0.663205 0.663205 -0.34687 N1 -0.811395 0.470609 -0.346647 N2 -0.865031 0.501718 0 + txt003 +STRI + V0 -1.42 1.42 0.9 V1 -1.0163 1.73037 0.9 V2 -0.997476 1.69833 0.693403 + N0 -0.707107 0.707107 0 N1 -0.501718 0.865031 0 N2 -0.470609 0.811395 -0.346647 + txt003 +STRI + V0 -0.997476 1.69833 0.693403 V1 -1.3937 1.3937 0.693403 V2 -1.42 1.42 0.9 + N0 -0.470609 0.811395 -0.346647 N1 -0.663205 0.663205 -0.34687 N2 -0.707107 0.707107 0 + txt003 +STRI + V0 -1.0163 1.73037 0.9 V1 -0.537037 1.92963 0.9 V2 -0.527092 1.8939 0.693403 + N0 -0.501718 0.865031 0 N1 -0.260275 0.965535 0 N2 -0.244192 0.905874 -0.346067 + txt003 +STRI + V0 -0.527092 1.8939 0.693403 V1 -0.997476 1.69833 0.693403 V2 -1.0163 1.73037 0.9 + N0 -0.244192 0.905874 -0.346067 N1 -0.470609 0.811395 -0.346647 N2 -0.501718 0.865031 0 + txt003 +STRI + V0 -0.537037 1.92963 0.9 V1 0 2 0.9 V2 -2.22045e-16 1.96296 0.693403 + N0 -0.260275 0.965535 0 N1 -0 1 0 N2 3.49072e-17 0.938373 -0.345625 + txt003 +STRI + V0 -2.22045e-16 1.96296 0.693403 V1 -0.527092 1.8939 0.693403 V2 -0.537037 1.92963 0.9 + N0 3.49072e-17 0.938373 -0.345625 N1 -0.244192 0.905874 -0.346067 N2 -0.260275 0.965535 0 + txt003 +STRI + V0 -1.96296 0 0.693403 V1 -1.8939 0.527092 0.693403 V2 -1.80456 0.502229 0.522222 + N0 -0.938373 0 -0.345625 N1 -0.905874 0.244192 -0.346067 N2 -0.782908 0.211045 -0.585248 + txt003 +STRI + V0 -1.80456 0.502229 0.522222 V1 -1.87037 0 0.522222 V2 -1.96296 0 0.693403 + N0 -0.782908 0.211045 -0.585248 N1 -0.811257 0 -0.58469 N2 -0.938373 0 -0.345625 + txt003 +STRI + V0 -1.8939 0.527092 0.693403 V1 -1.69833 0.997476 0.693403 V2 -1.61822 0.950425 0.522222 + N0 -0.905874 0.244192 -0.346067 N1 -0.811395 0.470609 -0.346647 N2 -0.700957 0.406555 -0.58598 + txt003 +STRI + V0 -1.61822 0.950425 0.522222 V1 -1.80456 0.502229 0.522222 V2 -1.8939 0.527092 0.693403 + N0 -0.700957 0.406555 -0.58598 N1 -0.782908 0.211045 -0.585248 N2 -0.905874 0.244192 -0.346067 + txt003 +STRI + V0 -1.69833 0.997476 0.693403 V1 -1.3937 1.3937 0.693403 V2 -1.32796 1.32796 0.522222 + N0 -0.811395 0.470609 -0.346647 N1 -0.663205 0.663205 -0.34687 N2 -0.572843 0.572843 -0.586261 + txt003 +STRI + V0 -1.32796 1.32796 0.522222 V1 -1.61822 0.950425 0.522222 V2 -1.69833 0.997476 0.693403 + N0 -0.572843 0.572843 -0.586261 N1 -0.700957 0.406555 -0.58598 N2 -0.811395 0.470609 -0.346647 + txt003 +STRI + V0 -1.3937 1.3937 0.693403 V1 -0.997476 1.69833 0.693403 V2 -0.950425 1.61822 0.522222 + N0 -0.663205 0.663205 -0.34687 N1 -0.470609 0.811395 -0.346647 N2 -0.406555 0.700957 -0.58598 + txt003 +STRI + V0 -0.950425 1.61822 0.522222 V1 -1.32796 1.32796 0.522222 V2 -1.3937 1.3937 0.693403 + N0 -0.406555 0.700957 -0.58598 N1 -0.572843 0.572843 -0.586261 N2 -0.663205 0.663205 -0.34687 + txt003 +STRI + V0 -0.997476 1.69833 0.693403 V1 -0.527092 1.8939 0.693403 V2 -0.502229 1.80456 0.522222 + N0 -0.470609 0.811395 -0.346647 N1 -0.244192 0.905874 -0.346067 N2 -0.211045 0.782908 -0.585248 + txt003 +STRI + V0 -0.502229 1.80456 0.522222 V1 -0.950425 1.61822 0.522222 V2 -0.997476 1.69833 0.693403 + N0 -0.211045 0.782908 -0.585248 N1 -0.406555 0.700957 -0.58598 N2 -0.470609 0.811395 -0.346647 + txt003 +STRI + V0 -0.527092 1.8939 0.693403 V1 -2.22045e-16 1.96296 0.693403 V2 -2.22045e-16 1.87037 0.522222 + N0 -0.244192 0.905874 -0.346067 N1 3.49072e-17 0.938373 -0.345625 N2 6.19755e-17 0.811257 -0.58469 + txt003 +STRI + V0 -2.22045e-16 1.87037 0.522222 V1 -0.502229 1.80456 0.522222 V2 -0.527092 1.8939 0.693403 + N0 6.19755e-17 0.811257 -0.58469 N1 -0.211045 0.782908 -0.585248 N2 -0.244192 0.905874 -0.346067 + txt003 +STRI + V0 -1.87037 0 0.522222 V1 -1.80456 0.502229 0.522222 V2 -1.68843 0.469907 0.384375 + N0 -0.811257 0 -0.58469 N1 -0.782908 0.211045 -0.585248 N2 -0.673539 0.181563 -0.716506 + txt003 +STRI + V0 -1.68843 0.469907 0.384375 V1 -1.75 0 0.384375 V2 -1.87037 0 0.522222 + N0 -0.673539 0.181563 -0.716506 N1 -0.6981 0 -0.716 N2 -0.811257 0 -0.58469 + txt003 +STRI + V0 -1.80456 0.502229 0.522222 V1 -1.61822 0.950425 0.522222 V2 -1.51407 0.889259 0.384375 + N0 -0.782908 0.211045 -0.585248 N1 -0.700957 0.406555 -0.58598 N2 -0.602839 0.349647 -0.717169 + txt003 +STRI + V0 -1.51407 0.889259 0.384375 V1 -1.68843 0.469907 0.384375 V2 -1.80456 0.502229 0.522222 + N0 -0.602839 0.349647 -0.717169 N1 -0.673539 0.181563 -0.716506 N2 -0.782908 0.211045 -0.585248 + txt003 +STRI + V0 -1.61822 0.950425 0.522222 V1 -1.32796 1.32796 0.522222 V2 -1.2425 1.2425 0.384375 + N0 -0.700957 0.406555 -0.58598 N1 -0.572843 0.572843 -0.586261 N2 -0.492597 0.492597 -0.717423 + txt003 +STRI + V0 -1.2425 1.2425 0.384375 V1 -1.51407 0.889259 0.384375 V2 -1.61822 0.950425 0.522222 + N0 -0.492597 0.492597 -0.717423 N1 -0.602839 0.349647 -0.717169 N2 -0.700957 0.406555 -0.58598 + txt003 +STRI + V0 -1.32796 1.32796 0.522222 V1 -0.950425 1.61822 0.522222 V2 -0.889259 1.51407 0.384375 + N0 -0.572843 0.572843 -0.586261 N1 -0.406555 0.700957 -0.58598 N2 -0.349647 0.602839 -0.717169 + txt003 +STRI + V0 -0.889259 1.51407 0.384375 V1 -1.2425 1.2425 0.384375 V2 -1.32796 1.32796 0.522222 + N0 -0.349647 0.602839 -0.717169 N1 -0.492597 0.492597 -0.717423 N2 -0.572843 0.572843 -0.586261 + txt003 +STRI + V0 -0.950425 1.61822 0.522222 V1 -0.502229 1.80456 0.522222 V2 -0.469907 1.68843 0.384375 + N0 -0.406555 0.700957 -0.58598 N1 -0.211045 0.782908 -0.585248 N2 -0.181563 0.673539 -0.716506 + txt003 +STRI + V0 -0.469907 1.68843 0.384375 V1 -0.889259 1.51407 0.384375 V2 -0.950425 1.61822 0.522222 + N0 -0.181563 0.673539 -0.716506 N1 -0.349647 0.602839 -0.717169 N2 -0.406555 0.700957 -0.58598 + txt003 +STRI + V0 -0.502229 1.80456 0.522222 V1 -2.22045e-16 1.87037 0.522222 V2 -2.22045e-16 1.75 0.384375 + N0 -0.211045 0.782908 -0.585248 N1 6.19755e-17 0.811257 -0.58469 N2 8.11143e-17 0.6981 -0.716 + txt003 +STRI + V0 -2.22045e-16 1.75 0.384375 V1 -0.469907 1.68843 0.384375 V2 -0.502229 1.80456 0.522222 + N0 8.11143e-17 0.6981 -0.716 N1 -0.181563 0.673539 -0.716506 N2 -0.211045 0.782908 -0.585248 + txt003 +STRI + V0 -1.75 0 0.384375 V1 -1.68843 0.469907 0.384375 V2 -1.57229 0.437586 0.277778 + N0 -0.6981 0 -0.716 N1 -0.673539 0.181563 -0.716506 N2 -0.61392 0.165491 -0.771826 + txt003 +STRI + V0 -1.57229 0.437586 0.277778 V1 -1.62963 0 0.277778 V2 -1.75 0 0.384375 + N0 -0.61392 0.165491 -0.771826 N1 -0.636383 0 -0.771373 N2 -0.6981 0 -0.716 + txt003 +STRI + V0 -1.68843 0.469907 0.384375 V1 -1.51407 0.889259 0.384375 V2 -1.40993 0.828093 0.277778 + N0 -0.673539 0.181563 -0.716506 N1 -0.602839 0.349647 -0.717169 N2 -0.549392 0.318647 -0.77242 + txt003 +STRI + V0 -1.40993 0.828093 0.277778 V1 -1.57229 0.437586 0.277778 V2 -1.68843 0.469907 0.384375 + N0 -0.549392 0.318647 -0.77242 N1 -0.61392 0.165491 -0.771826 N2 -0.673539 0.181563 -0.716506 + txt003 +STRI + V0 -1.51407 0.889259 0.384375 V1 -1.2425 1.2425 0.384375 V2 -1.15704 1.15704 0.277778 + N0 -0.602839 0.349647 -0.717169 N1 -0.492597 0.492597 -0.717423 N2 -0.448897 0.448897 -0.772647 + txt003 +STRI + V0 -1.15704 1.15704 0.277778 V1 -1.40993 0.828093 0.277778 V2 -1.51407 0.889259 0.384375 + N0 -0.448897 0.448897 -0.772647 N1 -0.549392 0.318647 -0.77242 N2 -0.602839 0.349647 -0.717169 + txt003 +STRI + V0 -1.2425 1.2425 0.384375 V1 -0.889259 1.51407 0.384375 V2 -0.828093 1.40993 0.277778 + N0 -0.492597 0.492597 -0.717423 N1 -0.349647 0.602839 -0.717169 N2 -0.318647 0.549392 -0.77242 + txt003 +STRI + V0 -0.828093 1.40993 0.277778 V1 -1.15704 1.15704 0.277778 V2 -1.2425 1.2425 0.384375 + N0 -0.318647 0.549392 -0.77242 N1 -0.448897 0.448897 -0.772647 N2 -0.492597 0.492597 -0.717423 + txt003 +STRI + V0 -0.889259 1.51407 0.384375 V1 -0.469907 1.68843 0.384375 V2 -0.437586 1.57229 0.277778 + N0 -0.349647 0.602839 -0.717169 N1 -0.181563 0.673539 -0.716506 N2 -0.165491 0.61392 -0.771826 + txt003 +STRI + V0 -0.437586 1.57229 0.277778 V1 -0.828093 1.40993 0.277778 V2 -0.889259 1.51407 0.384375 + N0 -0.165491 0.61392 -0.771826 N1 -0.318647 0.549392 -0.77242 N2 -0.349647 0.602839 -0.717169 + txt003 +STRI + V0 -0.469907 1.68843 0.384375 V1 -2.22045e-16 1.75 0.384375 V2 0 1.62963 0.277778 + N0 -0.181563 0.673539 -0.716506 N1 8.11143e-17 0.6981 -0.716 N2 1.97068e-16 0.636383 -0.771373 + txt003 +STRI + V0 0 1.62963 0.277778 V1 -0.437586 1.57229 0.277778 V2 -0.469907 1.68843 0.384375 + N0 1.97068e-16 0.636383 -0.771373 N1 -0.165491 0.61392 -0.771826 N2 -0.181563 0.673539 -0.716506 + txt003 +STRI + V0 -1.62963 0 0.277778 V1 -1.57229 0.437586 0.277778 V2 -1.48296 0.412723 0.200347 + N0 -0.636383 0 -0.771373 N1 -0.61392 0.165491 -0.771826 N2 -0.651276 0.175561 -0.738253 + txt003 +STRI + V0 -1.48296 0.412723 0.200347 V1 -1.53704 0 0.200347 V2 -1.62963 0 0.277778 + N0 -0.651276 0.175561 -0.738253 N1 -0.675056 0 -0.737766 N2 -0.636383 0 -0.771373 + txt003 +STRI + V0 -1.57229 0.437586 0.277778 V1 -1.40993 0.828093 0.277778 V2 -1.32982 0.781043 0.200347 + N0 -0.61392 0.165491 -0.771826 N1 -0.549392 0.318647 -0.77242 N2 -0.582878 0.338069 -0.738893 + txt003 +STRI + V0 -1.32982 0.781043 0.200347 V1 -1.48296 0.412723 0.200347 V2 -1.57229 0.437586 0.277778 + N0 -0.582878 0.338069 -0.738893 N1 -0.651276 0.175561 -0.738253 N2 -0.61392 0.165491 -0.771826 + txt003 +STRI + V0 -1.40993 0.828093 0.277778 V1 -1.15704 1.15704 0.277778 V2 -1.0913 1.0913 0.200347 + N0 -0.549392 0.318647 -0.77242 N1 -0.448897 0.448897 -0.772647 N2 -0.476275 0.476275 -0.739137 + txt003 +STRI + V0 -1.0913 1.0913 0.200347 V1 -1.32982 0.781043 0.200347 V2 -1.40993 0.828093 0.277778 + N0 -0.476275 0.476275 -0.739137 N1 -0.582878 0.338069 -0.738893 N2 -0.549392 0.318647 -0.77242 + txt003 +STRI + V0 -1.15704 1.15704 0.277778 V1 -0.828093 1.40993 0.277778 V2 -0.781043 1.32982 0.200347 + N0 -0.448897 0.448897 -0.772647 N1 -0.318647 0.549392 -0.77242 N2 -0.338069 0.582878 -0.738893 + txt003 +STRI + V0 -0.781043 1.32982 0.200347 V1 -1.0913 1.0913 0.200347 V2 -1.15704 1.15704 0.277778 + N0 -0.338069 0.582878 -0.738893 N1 -0.476275 0.476275 -0.739137 N2 -0.448897 0.448897 -0.772647 + txt003 +STRI + V0 -0.828093 1.40993 0.277778 V1 -0.437586 1.57229 0.277778 V2 -0.412723 1.48296 0.200347 + N0 -0.318647 0.549392 -0.77242 N1 -0.165491 0.61392 -0.771826 N2 -0.175561 0.651276 -0.738253 + txt003 +STRI + V0 -0.412723 1.48296 0.200347 V1 -0.781043 1.32982 0.200347 V2 -0.828093 1.40993 0.277778 + N0 -0.175561 0.651276 -0.738253 N1 -0.338069 0.582878 -0.738893 N2 -0.318647 0.549392 -0.77242 + txt003 +STRI + V0 -0.437586 1.57229 0.277778 V1 0 1.62963 0.277778 V2 0 1.53704 0.200347 + N0 -0.165491 0.61392 -0.771826 N1 1.97068e-16 0.636383 -0.771373 N2 9.51605e-17 0.675056 -0.737766 + txt003 +STRI + V0 0 1.53704 0.200347 V1 -0.412723 1.48296 0.200347 V2 -0.437586 1.57229 0.277778 + N0 9.51605e-17 0.675056 -0.737766 N1 -0.175561 0.651276 -0.738253 N2 -0.165491 0.61392 -0.771826 + txt003 +STRI + V0 -1.53704 0 0.200347 V1 -1.48296 0.412723 0.200347 V2 -1.44722 0.402778 0.15 + N0 -0.675056 0 -0.737766 N1 -0.651276 0.175561 -0.738253 N2 -0.965535 0.260275 0 + txt003 +STRI + V0 -1.44722 0.402778 0.15 V1 -1.5 0 0.15 V2 -1.53704 0 0.200347 + N0 -0.965535 0.260275 0 N1 -1 0 0 N2 -0.675056 0 -0.737766 + txt003 +STRI + V0 -1.48296 0.412723 0.200347 V1 -1.32982 0.781043 0.200347 V2 -1.29778 0.762222 0.15 + N0 -0.651276 0.175561 -0.738253 N1 -0.582878 0.338069 -0.738893 N2 -0.865031 0.501718 0 + txt003 +STRI + V0 -1.29778 0.762222 0.15 V1 -1.44722 0.402778 0.15 V2 -1.48296 0.412723 0.200347 + N0 -0.865031 0.501718 0 N1 -0.965535 0.260275 0 N2 -0.651276 0.175561 -0.738253 + txt003 +STRI + V0 -1.32982 0.781043 0.200347 V1 -1.0913 1.0913 0.200347 V2 -1.065 1.065 0.15 + N0 -0.582878 0.338069 -0.738893 N1 -0.476275 0.476275 -0.739137 N2 -0.707107 0.707107 0 + txt003 +STRI + V0 -1.065 1.065 0.15 V1 -1.29778 0.762222 0.15 V2 -1.32982 0.781043 0.200347 + N0 -0.707107 0.707107 0 N1 -0.865031 0.501718 0 N2 -0.582878 0.338069 -0.738893 + txt003 +STRI + V0 -1.0913 1.0913 0.200347 V1 -0.781043 1.32982 0.200347 V2 -0.762222 1.29778 0.15 + N0 -0.476275 0.476275 -0.739137 N1 -0.338069 0.582878 -0.738893 N2 -0.501718 0.865031 0 + txt003 +STRI + V0 -0.762222 1.29778 0.15 V1 -1.065 1.065 0.15 V2 -1.0913 1.0913 0.200347 + N0 -0.501718 0.865031 0 N1 -0.707107 0.707107 0 N2 -0.476275 0.476275 -0.739137 + txt003 +STRI + V0 -0.781043 1.32982 0.200347 V1 -0.412723 1.48296 0.200347 V2 -0.402778 1.44722 0.15 + N0 -0.338069 0.582878 -0.738893 N1 -0.175561 0.651276 -0.738253 N2 -0.260275 0.965535 0 + txt003 +STRI + V0 -0.402778 1.44722 0.15 V1 -0.762222 1.29778 0.15 V2 -0.781043 1.32982 0.200347 + N0 -0.260275 0.965535 0 N1 -0.501718 0.865031 0 N2 -0.338069 0.582878 -0.738893 + txt003 +STRI + V0 -0.412723 1.48296 0.200347 V1 0 1.53704 0.200347 V2 0 1.5 0.15 + N0 -0.175561 0.651276 -0.738253 N1 9.51605e-17 0.675056 -0.737766 N2 -0 1 0 + txt003 +STRI + V0 0 1.5 0.15 V1 -0.402778 1.44722 0.15 V2 -0.412723 1.48296 0.200347 + N0 -0 1 0 N1 -0.260275 0.965535 0 N2 -0.175561 0.651276 -0.738253 + txt003 +STRI + V0 0 2 0.9 V1 0.537037 1.92963 0.9 V2 0.527092 1.8939 0.693403 + N0 -0 1 0 N1 0.260275 0.965535 0 N2 0.244192 0.905874 -0.346067 + txt003 +STRI + V0 0.527092 1.8939 0.693403 V1 0 1.96296 0.693403 V2 0 2 0.9 + N0 0.244192 0.905874 -0.346067 N1 0 0.938373 -0.345625 N2 -0 1 0 + txt003 +STRI + V0 0.537037 1.92963 0.9 V1 1.0163 1.73037 0.9 V2 0.997476 1.69833 0.693403 + N0 0.260275 0.965535 0 N1 0.501718 0.865031 0 N2 0.470609 0.811395 -0.346647 + txt003 +STRI + V0 0.997476 1.69833 0.693403 V1 0.527092 1.8939 0.693403 V2 0.537037 1.92963 0.9 + N0 0.470609 0.811395 -0.346647 N1 0.244192 0.905874 -0.346067 N2 0.260275 0.965535 0 + txt003 +STRI + V0 1.0163 1.73037 0.9 V1 1.42 1.42 0.9 V2 1.3937 1.3937 0.693403 + N0 0.501718 0.865031 0 N1 0.707107 0.707107 0 N2 0.663205 0.663205 -0.34687 + txt003 +STRI + V0 1.3937 1.3937 0.693403 V1 0.997476 1.69833 0.693403 V2 1.0163 1.73037 0.9 + N0 0.663205 0.663205 -0.34687 N1 0.470609 0.811395 -0.346647 N2 0.501718 0.865031 0 + txt003 +STRI + V0 1.42 1.42 0.9 V1 1.73037 1.0163 0.9 V2 1.69833 0.997476 0.693403 + N0 0.707107 0.707107 0 N1 0.865031 0.501718 0 N2 0.811395 0.470609 -0.346647 + txt003 +STRI + V0 1.69833 0.997476 0.693403 V1 1.3937 1.3937 0.693403 V2 1.42 1.42 0.9 + N0 0.811395 0.470609 -0.346647 N1 0.663205 0.663205 -0.34687 N2 0.707107 0.707107 0 + txt003 +STRI + V0 1.73037 1.0163 0.9 V1 1.92963 0.537037 0.9 V2 1.8939 0.527092 0.693403 + N0 0.865031 0.501718 0 N1 0.965535 0.260275 0 N2 0.905874 0.244192 -0.346067 + txt003 +STRI + V0 1.8939 0.527092 0.693403 V1 1.69833 0.997476 0.693403 V2 1.73037 1.0163 0.9 + N0 0.905874 0.244192 -0.346067 N1 0.811395 0.470609 -0.346647 N2 0.865031 0.501718 0 + txt003 +STRI + V0 1.92963 0.537037 0.9 V1 2 0 0.9 V2 1.96296 2.22045e-16 0.693403 + N0 0.965535 0.260275 0 N1 1 0 0 N2 0.938373 -3.49072e-17 -0.345625 + txt003 +STRI + V0 1.96296 2.22045e-16 0.693403 V1 1.8939 0.527092 0.693403 V2 1.92963 0.537037 0.9 + N0 0.938373 -3.49072e-17 -0.345625 N1 0.905874 0.244192 -0.346067 N2 0.965535 0.260275 0 + txt003 +STRI + V0 0 1.96296 0.693403 V1 0.527092 1.8939 0.693403 V2 0.502229 1.80456 0.522222 + N0 0 0.938373 -0.345625 N1 0.244192 0.905874 -0.346067 N2 0.211045 0.782908 -0.585248 + txt003 +STRI + V0 0.502229 1.80456 0.522222 V1 0 1.87037 0.522222 V2 0 1.96296 0.693403 + N0 0.211045 0.782908 -0.585248 N1 0 0.811257 -0.58469 N2 0 0.938373 -0.345625 + txt003 +STRI + V0 0.527092 1.8939 0.693403 V1 0.997476 1.69833 0.693403 V2 0.950425 1.61822 0.522222 + N0 0.244192 0.905874 -0.346067 N1 0.470609 0.811395 -0.346647 N2 0.406555 0.700957 -0.58598 + txt003 +STRI + V0 0.950425 1.61822 0.522222 V1 0.502229 1.80456 0.522222 V2 0.527092 1.8939 0.693403 + N0 0.406555 0.700957 -0.58598 N1 0.211045 0.782908 -0.585248 N2 0.244192 0.905874 -0.346067 + txt003 +STRI + V0 0.997476 1.69833 0.693403 V1 1.3937 1.3937 0.693403 V2 1.32796 1.32796 0.522222 + N0 0.470609 0.811395 -0.346647 N1 0.663205 0.663205 -0.34687 N2 0.572843 0.572843 -0.586261 + txt003 +STRI + V0 1.32796 1.32796 0.522222 V1 0.950425 1.61822 0.522222 V2 0.997476 1.69833 0.693403 + N0 0.572843 0.572843 -0.586261 N1 0.406555 0.700957 -0.58598 N2 0.470609 0.811395 -0.346647 + txt003 +STRI + V0 1.3937 1.3937 0.693403 V1 1.69833 0.997476 0.693403 V2 1.61822 0.950425 0.522222 + N0 0.663205 0.663205 -0.34687 N1 0.811395 0.470609 -0.346647 N2 0.700957 0.406555 -0.58598 + txt003 +STRI + V0 1.61822 0.950425 0.522222 V1 1.32796 1.32796 0.522222 V2 1.3937 1.3937 0.693403 + N0 0.700957 0.406555 -0.58598 N1 0.572843 0.572843 -0.586261 N2 0.663205 0.663205 -0.34687 + txt003 +STRI + V0 1.69833 0.997476 0.693403 V1 1.8939 0.527092 0.693403 V2 1.80456 0.502229 0.522222 + N0 0.811395 0.470609 -0.346647 N1 0.905874 0.244192 -0.346067 N2 0.782908 0.211045 -0.585248 + txt003 +STRI + V0 1.80456 0.502229 0.522222 V1 1.61822 0.950425 0.522222 V2 1.69833 0.997476 0.693403 + N0 0.782908 0.211045 -0.585248 N1 0.700957 0.406555 -0.58598 N2 0.811395 0.470609 -0.346647 + txt003 +STRI + V0 1.8939 0.527092 0.693403 V1 1.96296 2.22045e-16 0.693403 V2 1.87037 2.22045e-16 0.522222 + N0 0.905874 0.244192 -0.346067 N1 0.938373 -3.49072e-17 -0.345625 N2 0.811257 -6.19755e-17 -0.58469 + txt003 +STRI + V0 1.87037 2.22045e-16 0.522222 V1 1.80456 0.502229 0.522222 V2 1.8939 0.527092 0.693403 + N0 0.811257 -6.19755e-17 -0.58469 N1 0.782908 0.211045 -0.585248 N2 0.905874 0.244192 -0.346067 + txt003 +STRI + V0 0 1.87037 0.522222 V1 0.502229 1.80456 0.522222 V2 0.469907 1.68843 0.384375 + N0 0 0.811257 -0.58469 N1 0.211045 0.782908 -0.585248 N2 0.181563 0.673539 -0.716506 + txt003 +STRI + V0 0.469907 1.68843 0.384375 V1 0 1.75 0.384375 V2 0 1.87037 0.522222 + N0 0.181563 0.673539 -0.716506 N1 0 0.6981 -0.716 N2 0 0.811257 -0.58469 + txt003 +STRI + V0 0.502229 1.80456 0.522222 V1 0.950425 1.61822 0.522222 V2 0.889259 1.51407 0.384375 + N0 0.211045 0.782908 -0.585248 N1 0.406555 0.700957 -0.58598 N2 0.349647 0.602839 -0.717169 + txt003 +STRI + V0 0.889259 1.51407 0.384375 V1 0.469907 1.68843 0.384375 V2 0.502229 1.80456 0.522222 + N0 0.349647 0.602839 -0.717169 N1 0.181563 0.673539 -0.716506 N2 0.211045 0.782908 -0.585248 + txt003 +STRI + V0 0.950425 1.61822 0.522222 V1 1.32796 1.32796 0.522222 V2 1.2425 1.2425 0.384375 + N0 0.406555 0.700957 -0.58598 N1 0.572843 0.572843 -0.586261 N2 0.492597 0.492597 -0.717423 + txt003 +STRI + V0 1.2425 1.2425 0.384375 V1 0.889259 1.51407 0.384375 V2 0.950425 1.61822 0.522222 + N0 0.492597 0.492597 -0.717423 N1 0.349647 0.602839 -0.717169 N2 0.406555 0.700957 -0.58598 + txt003 +STRI + V0 1.32796 1.32796 0.522222 V1 1.61822 0.950425 0.522222 V2 1.51407 0.889259 0.384375 + N0 0.572843 0.572843 -0.586261 N1 0.700957 0.406555 -0.58598 N2 0.602839 0.349647 -0.717169 + txt003 +STRI + V0 1.51407 0.889259 0.384375 V1 1.2425 1.2425 0.384375 V2 1.32796 1.32796 0.522222 + N0 0.602839 0.349647 -0.717169 N1 0.492597 0.492597 -0.717423 N2 0.572843 0.572843 -0.586261 + txt003 +STRI + V0 1.61822 0.950425 0.522222 V1 1.80456 0.502229 0.522222 V2 1.68843 0.469907 0.384375 + N0 0.700957 0.406555 -0.58598 N1 0.782908 0.211045 -0.585248 N2 0.673539 0.181563 -0.716506 + txt003 +STRI + V0 1.68843 0.469907 0.384375 V1 1.51407 0.889259 0.384375 V2 1.61822 0.950425 0.522222 + N0 0.673539 0.181563 -0.716506 N1 0.602839 0.349647 -0.717169 N2 0.700957 0.406555 -0.58598 + txt003 +STRI + V0 1.80456 0.502229 0.522222 V1 1.87037 2.22045e-16 0.522222 V2 1.75 2.22045e-16 0.384375 + N0 0.782908 0.211045 -0.585248 N1 0.811257 -6.19755e-17 -0.58469 N2 0.6981 -8.11143e-17 -0.716 + txt003 +STRI + V0 1.75 2.22045e-16 0.384375 V1 1.68843 0.469907 0.384375 V2 1.80456 0.502229 0.522222 + N0 0.6981 -8.11143e-17 -0.716 N1 0.673539 0.181563 -0.716506 N2 0.782908 0.211045 -0.585248 + txt003 +STRI + V0 0 1.75 0.384375 V1 0.469907 1.68843 0.384375 V2 0.437586 1.57229 0.277778 + N0 0 0.6981 -0.716 N1 0.181563 0.673539 -0.716506 N2 0.165491 0.61392 -0.771826 + txt003 +STRI + V0 0.437586 1.57229 0.277778 V1 0 1.62963 0.277778 V2 0 1.75 0.384375 + N0 0.165491 0.61392 -0.771826 N1 0 0.636383 -0.771373 N2 0 0.6981 -0.716 + txt003 +STRI + V0 0.469907 1.68843 0.384375 V1 0.889259 1.51407 0.384375 V2 0.828093 1.40993 0.277778 + N0 0.181563 0.673539 -0.716506 N1 0.349647 0.602839 -0.717169 N2 0.318647 0.549392 -0.77242 + txt003 +STRI + V0 0.828093 1.40993 0.277778 V1 0.437586 1.57229 0.277778 V2 0.469907 1.68843 0.384375 + N0 0.318647 0.549392 -0.77242 N1 0.165491 0.61392 -0.771826 N2 0.181563 0.673539 -0.716506 + txt003 +STRI + V0 0.889259 1.51407 0.384375 V1 1.2425 1.2425 0.384375 V2 1.15704 1.15704 0.277778 + N0 0.349647 0.602839 -0.717169 N1 0.492597 0.492597 -0.717423 N2 0.448897 0.448897 -0.772647 + txt003 +STRI + V0 1.15704 1.15704 0.277778 V1 0.828093 1.40993 0.277778 V2 0.889259 1.51407 0.384375 + N0 0.448897 0.448897 -0.772647 N1 0.318647 0.549392 -0.77242 N2 0.349647 0.602839 -0.717169 + txt003 +STRI + V0 1.2425 1.2425 0.384375 V1 1.51407 0.889259 0.384375 V2 1.40993 0.828093 0.277778 + N0 0.492597 0.492597 -0.717423 N1 0.602839 0.349647 -0.717169 N2 0.549392 0.318647 -0.77242 + txt003 +STRI + V0 1.40993 0.828093 0.277778 V1 1.15704 1.15704 0.277778 V2 1.2425 1.2425 0.384375 + N0 0.549392 0.318647 -0.77242 N1 0.448897 0.448897 -0.772647 N2 0.492597 0.492597 -0.717423 + txt003 +STRI + V0 1.51407 0.889259 0.384375 V1 1.68843 0.469907 0.384375 V2 1.57229 0.437586 0.277778 + N0 0.602839 0.349647 -0.717169 N1 0.673539 0.181563 -0.716506 N2 0.61392 0.165491 -0.771826 + txt003 +STRI + V0 1.57229 0.437586 0.277778 V1 1.40993 0.828093 0.277778 V2 1.51407 0.889259 0.384375 + N0 0.61392 0.165491 -0.771826 N1 0.549392 0.318647 -0.77242 N2 0.602839 0.349647 -0.717169 + txt003 +STRI + V0 1.68843 0.469907 0.384375 V1 1.75 2.22045e-16 0.384375 V2 1.62963 0 0.277778 + N0 0.673539 0.181563 -0.716506 N1 0.6981 -8.11143e-17 -0.716 N2 0.636383 -1.97068e-16 -0.771373 + txt003 +STRI + V0 1.62963 0 0.277778 V1 1.57229 0.437586 0.277778 V2 1.68843 0.469907 0.384375 + N0 0.636383 -1.97068e-16 -0.771373 N1 0.61392 0.165491 -0.771826 N2 0.673539 0.181563 -0.716506 + txt003 +STRI + V0 0 1.62963 0.277778 V1 0.437586 1.57229 0.277778 V2 0.412723 1.48296 0.200347 + N0 0 0.636383 -0.771373 N1 0.165491 0.61392 -0.771826 N2 0.175561 0.651276 -0.738253 + txt003 +STRI + V0 0.412723 1.48296 0.200347 V1 0 1.53704 0.200347 V2 0 1.62963 0.277778 + N0 0.175561 0.651276 -0.738253 N1 0 0.675056 -0.737766 N2 0 0.636383 -0.771373 + txt003 +STRI + V0 0.437586 1.57229 0.277778 V1 0.828093 1.40993 0.277778 V2 0.781043 1.32982 0.200347 + N0 0.165491 0.61392 -0.771826 N1 0.318647 0.549392 -0.77242 N2 0.338069 0.582878 -0.738893 + txt003 +STRI + V0 0.781043 1.32982 0.200347 V1 0.412723 1.48296 0.200347 V2 0.437586 1.57229 0.277778 + N0 0.338069 0.582878 -0.738893 N1 0.175561 0.651276 -0.738253 N2 0.165491 0.61392 -0.771826 + txt003 +STRI + V0 0.828093 1.40993 0.277778 V1 1.15704 1.15704 0.277778 V2 1.0913 1.0913 0.200347 + N0 0.318647 0.549392 -0.77242 N1 0.448897 0.448897 -0.772647 N2 0.476275 0.476275 -0.739137 + txt003 +STRI + V0 1.0913 1.0913 0.200347 V1 0.781043 1.32982 0.200347 V2 0.828093 1.40993 0.277778 + N0 0.476275 0.476275 -0.739137 N1 0.338069 0.582878 -0.738893 N2 0.318647 0.549392 -0.77242 + txt003 +STRI + V0 1.15704 1.15704 0.277778 V1 1.40993 0.828093 0.277778 V2 1.32982 0.781043 0.200347 + N0 0.448897 0.448897 -0.772647 N1 0.549392 0.318647 -0.77242 N2 0.582878 0.338069 -0.738893 + txt003 +STRI + V0 1.32982 0.781043 0.200347 V1 1.0913 1.0913 0.200347 V2 1.15704 1.15704 0.277778 + N0 0.582878 0.338069 -0.738893 N1 0.476275 0.476275 -0.739137 N2 0.448897 0.448897 -0.772647 + txt003 +STRI + V0 1.40993 0.828093 0.277778 V1 1.57229 0.437586 0.277778 V2 1.48296 0.412723 0.200347 + N0 0.549392 0.318647 -0.77242 N1 0.61392 0.165491 -0.771826 N2 0.651276 0.175561 -0.738253 + txt003 +STRI + V0 1.48296 0.412723 0.200347 V1 1.32982 0.781043 0.200347 V2 1.40993 0.828093 0.277778 + N0 0.651276 0.175561 -0.738253 N1 0.582878 0.338069 -0.738893 N2 0.549392 0.318647 -0.77242 + txt003 +STRI + V0 1.57229 0.437586 0.277778 V1 1.62963 0 0.277778 V2 1.53704 0 0.200347 + N0 0.61392 0.165491 -0.771826 N1 0.636383 -1.97068e-16 -0.771373 N2 0.675056 -9.51605e-17 -0.737766 + txt003 +STRI + V0 1.53704 0 0.200347 V1 1.48296 0.412723 0.200347 V2 1.57229 0.437586 0.277778 + N0 0.675056 -9.51605e-17 -0.737766 N1 0.651276 0.175561 -0.738253 N2 0.61392 0.165491 -0.771826 + txt003 +STRI + V0 0 1.53704 0.200347 V1 0.412723 1.48296 0.200347 V2 0.402778 1.44722 0.15 + N0 0 0.675056 -0.737766 N1 0.175561 0.651276 -0.738253 N2 0.260275 0.965535 0 + txt003 +STRI + V0 0.402778 1.44722 0.15 V1 0 1.5 0.15 V2 0 1.53704 0.200347 + N0 0.260275 0.965535 0 N1 -0 1 0 N2 0 0.675056 -0.737766 + txt003 +STRI + V0 0.412723 1.48296 0.200347 V1 0.781043 1.32982 0.200347 V2 0.762222 1.29778 0.15 + N0 0.175561 0.651276 -0.738253 N1 0.338069 0.582878 -0.738893 N2 0.501718 0.865031 0 + txt003 +STRI + V0 0.762222 1.29778 0.15 V1 0.402778 1.44722 0.15 V2 0.412723 1.48296 0.200347 + N0 0.501718 0.865031 0 N1 0.260275 0.965535 0 N2 0.175561 0.651276 -0.738253 + txt003 +STRI + V0 0.781043 1.32982 0.200347 V1 1.0913 1.0913 0.200347 V2 1.065 1.065 0.15 + N0 0.338069 0.582878 -0.738893 N1 0.476275 0.476275 -0.739137 N2 0.707107 0.707107 0 + txt003 +STRI + V0 1.065 1.065 0.15 V1 0.762222 1.29778 0.15 V2 0.781043 1.32982 0.200347 + N0 0.707107 0.707107 0 N1 0.501718 0.865031 0 N2 0.338069 0.582878 -0.738893 + txt003 +STRI + V0 1.0913 1.0913 0.200347 V1 1.32982 0.781043 0.200347 V2 1.29778 0.762222 0.15 + N0 0.476275 0.476275 -0.739137 N1 0.582878 0.338069 -0.738893 N2 0.865031 0.501718 0 + txt003 +STRI + V0 1.29778 0.762222 0.15 V1 1.065 1.065 0.15 V2 1.0913 1.0913 0.200347 + N0 0.865031 0.501718 0 N1 0.707107 0.707107 0 N2 0.476275 0.476275 -0.739137 + txt003 +STRI + V0 1.32982 0.781043 0.200347 V1 1.48296 0.412723 0.200347 V2 1.44722 0.402778 0.15 + N0 0.582878 0.338069 -0.738893 N1 0.651276 0.175561 -0.738253 N2 0.965535 0.260275 0 + txt003 +STRI + V0 1.44722 0.402778 0.15 V1 1.29778 0.762222 0.15 V2 1.32982 0.781043 0.200347 + N0 0.965535 0.260275 0 N1 0.865031 0.501718 0 N2 0.582878 0.338069 -0.738893 + txt003 +STRI + V0 1.48296 0.412723 0.200347 V1 1.53704 0 0.200347 V2 1.5 0 0.15 + N0 0.651276 0.175561 -0.738253 N1 0.675056 -9.51605e-17 -0.737766 N2 1 0 0 + txt003 +STRI + V0 1.5 0 0.15 V1 1.44722 0.402778 0.15 V2 1.48296 0.412723 0.200347 + N0 1 0 0 N1 0.965535 0.260275 0 N2 0.651276 0.175561 -0.738253 + txt003 +STRI + V0 -1.6 0 2.025 V1 -1.59259 -0.125 2.04167 V2 -1.92704 -0.125 2.04055 + N0 -0 -0 -1 N1 -0 -0.298275 -0.95448 N2 0.0104256 -0.297446 -0.954682 + txt003 +STRI + V0 -1.92704 -0.125 2.04055 V1 -1.92454 0 2.02396 V2 -1.6 0 2.025 + N0 0.0104256 -0.297446 -0.954682 N1 0.0104645 0 -0.999945 N2 -0 -0 -1 + txt003 +STRI + V0 -1.59259 -0.125 2.04167 V1 -1.57407 -0.2 2.08333 V2 -1.9333 -0.2 2.08202 + N0 -0 -0.298275 -0.95448 N1 -0 -0.707107 -0.707107 N2 0.00846382 -0.706077 -0.708084 + txt003 +STRI + V0 -1.9333 -0.2 2.08202 V1 -1.92704 -0.125 2.04055 V2 -1.59259 -0.125 2.04167 + N0 0.00846382 -0.706077 -0.708084 N1 0.0104256 -0.297446 -0.954682 N2 -0 -0.298275 -0.95448 + txt003 +STRI + V0 -1.57407 -0.2 2.08333 V1 -1.55 -0.225 2.1375 V2 -1.94144 -0.225 2.13594 + N0 -0 -0.707107 -0.707107 N1 0 -1 0 N2 -1.61364e-18 -1 -2.43505e-19 + txt003 +STRI + V0 -1.94144 -0.225 2.13594 V1 -1.9333 -0.2 2.08202 V2 -1.57407 -0.2 2.08333 + N0 -1.61364e-18 -1 -2.43505e-19 N1 0.00846382 -0.706077 -0.708084 N2 -0 -0.707107 -0.707107 + txt003 +STRI + V0 -1.55 -0.225 2.1375 V1 -1.52593 -0.2 2.19167 V2 -1.94957 -0.2 2.18985 + N0 0 -1 0 N1 0 -0.707107 0.707107 N2 -0.00997559 -0.706181 0.707961 + txt003 +STRI + V0 -1.94957 -0.2 2.18985 V1 -1.94144 -0.225 2.13594 V2 -1.55 -0.225 2.1375 + N0 -0.00997559 -0.706181 0.707961 N1 -1.61364e-18 -1 -2.43505e-19 N2 0 -1 0 + txt003 +STRI + V0 -1.52593 -0.2 2.19167 V1 -1.50741 -0.125 2.23333 V2 -1.95583 -0.125 2.23133 + N0 0 -0.707107 0.707107 N1 0 -0.298275 0.95448 N2 -0.0140841 -0.297589 0.95459 + txt003 +STRI + V0 -1.95583 -0.125 2.23133 V1 -1.94957 -0.2 2.18985 V2 -1.52593 -0.2 2.19167 + N0 -0.0140841 -0.297589 0.95459 N1 -0.00997559 -0.706181 0.707961 N2 0 -0.707107 0.707107 + txt003 +STRI + V0 -1.50741 -0.125 2.23333 V1 -1.5 0 2.25 V2 -1.95833 0 2.24792 + N0 0 -0.298275 0.95448 N1 0 1.97373e-15 1 N2 -0.0149983 1.96426e-15 0.999888 + txt003 +STRI + V0 -1.95833 0 2.24792 V1 -1.95583 -0.125 2.23133 V2 -1.50741 -0.125 2.23333 + N0 -0.0149983 1.96426e-15 0.999888 N1 -0.0140841 -0.297589 0.95459 N2 0 -0.298275 0.95448 + txt003 +STRI + V0 -1.92454 0 2.02396 V1 -1.92704 -0.125 2.04055 V2 -2.20645 -0.125 2.03272 + N0 0.0104645 0 -0.999945 N1 0.0104256 -0.297446 -0.954682 N2 0.0510028 -0.296675 -0.953616 + txt003 +STRI + V0 -2.20645 -0.125 2.03272 V1 -2.1963 0 2.01667 V2 -1.92454 0 2.02396 + N0 0.0510028 -0.296675 -0.953616 N1 0.0510696 0 -0.998695 N2 0.0104645 0 -0.999945 + txt003 +STRI + V0 -1.92704 -0.125 2.04055 V1 -1.9333 -0.2 2.08202 V2 -2.23182 -0.2 2.07284 + N0 0.0104256 -0.297446 -0.954682 N1 0.00846382 -0.706077 -0.708084 N2 0.0415994 -0.706072 -0.706918 + txt003 +STRI + V0 -2.23182 -0.2 2.07284 V1 -2.20645 -0.125 2.03272 V2 -1.92704 -0.125 2.04055 + N0 0.0415994 -0.706072 -0.706918 N1 0.0510028 -0.296675 -0.953616 N2 0.0104256 -0.297446 -0.954682 + txt003 +STRI + V0 -1.9333 -0.2 2.08202 V1 -1.94144 -0.225 2.13594 V2 -2.26481 -0.225 2.125 + N0 0.00846382 -0.706077 -0.708084 N1 -1.61364e-18 -1 -2.43505e-19 N2 -7.69071e-18 -1 -4.86421e-18 + txt003 +STRI + V0 -2.26481 -0.225 2.125 V1 -2.23182 -0.2 2.07284 V2 -1.9333 -0.2 2.08202 + N0 -7.69071e-18 -1 -4.86421e-18 N1 0.0415994 -0.706072 -0.706918 N2 0.00846382 -0.706077 -0.708084 + txt003 +STRI + V0 -1.94144 -0.225 2.13594 V1 -1.94957 -0.2 2.18985 V2 -2.29781 -0.2 2.17716 + N0 -1.61364e-18 -1 -2.43505e-19 N1 -0.00997559 -0.706181 0.707961 N2 -0.0493858 -0.708239 0.704243 + txt003 +STRI + V0 -2.29781 -0.2 2.17716 V1 -2.26481 -0.225 2.125 V2 -1.94144 -0.225 2.13594 + N0 -0.0493858 -0.708239 0.704243 N1 -7.69071e-18 -1 -4.86421e-18 N2 -1.61364e-18 -1 -2.43505e-19 + txt003 +STRI + V0 -1.94957 -0.2 2.18985 V1 -1.95583 -0.125 2.23133 V2 -2.32318 -0.125 2.21728 + N0 -0.00997559 -0.706181 0.707961 N1 -0.0140841 -0.297589 0.95459 N2 -0.0701017 -0.299663 0.951466 + txt003 +STRI + V0 -2.32318 -0.125 2.21728 V1 -2.29781 -0.2 2.17716 V2 -1.94957 -0.2 2.18985 + N0 -0.0701017 -0.299663 0.951466 N1 -0.0493858 -0.708239 0.704243 N2 -0.00997559 -0.706181 0.707961 + txt003 +STRI + V0 -1.95583 -0.125 2.23133 V1 -1.95833 0 2.24792 V2 -2.33333 0 2.23333 + N0 -0.0140841 -0.297589 0.95459 N1 -0.0149983 1.96426e-15 0.999888 N2 -0.0747899 1.66682e-15 0.997199 + txt003 +STRI + V0 -2.33333 0 2.23333 V1 -2.32318 -0.125 2.21728 V2 -1.95583 -0.125 2.23133 + N0 -0.0747899 1.66682e-15 0.997199 N1 -0.0701017 -0.299663 0.951466 N2 -0.0140841 -0.297589 0.95459 + txt003 +STRI + V0 -2.1963 0 2.01667 V1 -2.20645 -0.125 2.03272 V2 -2.42824 -0.125 2.01146 + N0 0.0510696 0 -0.998695 N1 0.0510028 -0.296675 -0.953616 N2 0.148104 -0.301279 -0.941964 + txt003 +STRI + V0 -2.42824 -0.125 2.01146 V1 -2.4125 0 1.99687 V2 -2.1963 0 2.01667 + N0 0.148104 -0.301279 -0.941964 N1 0.14834 0 -0.988936 N2 0.0510696 0 -0.998695 + txt003 +STRI + V0 -2.20645 -0.125 2.03272 V1 -2.23182 -0.2 2.07284 V2 -2.46759 -0.2 2.04792 + N0 0.0510028 -0.296675 -0.953616 N1 0.0415994 -0.706072 -0.706918 N2 0.119688 -0.715388 -0.6884 + txt003 +STRI + V0 -2.46759 -0.2 2.04792 V1 -2.42824 -0.125 2.01146 V2 -2.20645 -0.125 2.03272 + N0 0.119688 -0.715388 -0.6884 N1 0.148104 -0.301279 -0.941964 N2 0.0510028 -0.296675 -0.953616 + txt003 +STRI + V0 -2.23182 -0.2 2.07284 V1 -2.26481 -0.225 2.125 V2 -2.51875 -0.225 2.09531 + N0 0.0415994 -0.706072 -0.706918 N1 -7.69071e-18 -1 -4.86421e-18 N2 -1.96915e-17 -1 -2.12543e-17 + txt003 +STRI + V0 -2.51875 -0.225 2.09531 V1 -2.46759 -0.2 2.04792 V2 -2.23182 -0.2 2.07284 + N0 -1.96915e-17 -1 -2.12543e-17 N1 0.119688 -0.715388 -0.6884 N2 0.0415994 -0.706072 -0.706918 + txt003 +STRI + V0 -2.26481 -0.225 2.125 V1 -2.29781 -0.2 2.17716 V2 -2.56991 -0.2 2.14271 + N0 -7.69071e-18 -1 -4.86421e-18 N1 -0.0493858 -0.708239 0.704243 N2 -0.141352 -0.724137 0.675015 + txt003 +STRI + V0 -2.56991 -0.2 2.14271 V1 -2.51875 -0.225 2.09531 V2 -2.26481 -0.225 2.125 + N0 -0.141352 -0.724137 0.675015 N1 -1.96915e-17 -1 -2.12543e-17 N2 -7.69071e-18 -1 -4.86421e-18 + txt003 +STRI + V0 -2.29781 -0.2 2.17716 V1 -2.32318 -0.125 2.21728 V2 -2.60926 -0.125 2.17917 + N0 -0.0493858 -0.708239 0.704243 N1 -0.0701017 -0.299663 0.951466 N2 -0.204668 -0.313917 0.927128 + txt003 +STRI + V0 -2.60926 -0.125 2.17917 V1 -2.56991 -0.2 2.14271 V2 -2.29781 -0.2 2.17716 + N0 -0.204668 -0.313917 0.927128 N1 -0.141352 -0.724137 0.675015 N2 -0.0493858 -0.708239 0.704243 + txt003 +STRI + V0 -2.32318 -0.125 2.21728 V1 -2.33333 0 2.23333 V2 -2.625 0 2.19375 + N0 -0.0701017 -0.299663 0.951466 N1 -0.0747899 1.66682e-15 0.997199 N2 -0.219512 1.81728e-15 0.97561 + txt003 +STRI + V0 -2.625 0 2.19375 V1 -2.60926 -0.125 2.17917 V2 -2.32318 -0.125 2.21728 + N0 -0.219512 1.81728e-15 0.97561 N1 -0.204668 -0.313917 0.927128 N2 -0.0701017 -0.299663 0.951466 + txt003 +STRI + V0 -2.4125 0 1.99687 V1 -2.42824 -0.125 2.01146 V2 -2.58985 -0.125 1.97006 + N0 0.14834 0 -0.988936 N1 0.148104 -0.301279 -0.941964 N2 0.359682 -0.323804 -0.875089 + txt003 +STRI + V0 -2.58985 -0.125 1.97006 V1 -2.57037 0 1.95833 V2 -2.4125 0 1.99687 + N0 0.359682 -0.323804 -0.875089 N1 0.364399 0 -0.931243 N2 0.14834 0 -0.988936 + txt003 +STRI + V0 -2.42824 -0.125 2.01146 V1 -2.46759 -0.2 2.04792 V2 -2.63855 -0.2 1.99938 + N0 0.148104 -0.301279 -0.941964 N1 0.119688 -0.715388 -0.6884 N2 0.275915 -0.747596 -0.604128 + txt003 +STRI + V0 -2.63855 -0.2 1.99938 V1 -2.58985 -0.125 1.97006 V2 -2.42824 -0.125 2.01146 + N0 0.275915 -0.747596 -0.604128 N1 0.359682 -0.323804 -0.875089 N2 0.148104 -0.301279 -0.941964 + txt003 +STRI + V0 -2.46759 -0.2 2.04792 V1 -2.51875 -0.225 2.09531 V2 -2.70185 -0.225 2.0375 + N0 0.119688 -0.715388 -0.6884 N1 -1.96915e-17 -1 -2.12543e-17 N2 -3.40413e-17 -1 -5.65364e-17 + txt003 +STRI + V0 -2.70185 -0.225 2.0375 V1 -2.63855 -0.2 1.99938 V2 -2.46759 -0.2 2.04792 + N0 -3.40413e-17 -1 -5.65364e-17 N1 0.275915 -0.747596 -0.604128 N2 0.119688 -0.715388 -0.6884 + txt003 +STRI + V0 -2.51875 -0.225 2.09531 V1 -2.56991 -0.2 2.14271 V2 -2.76516 -0.2 2.07562 + N0 -1.96915e-17 -1 -2.12543e-17 N1 -0.141352 -0.724137 0.675015 N2 -0.313659 -0.763673 0.564289 + txt003 +STRI + V0 -2.76516 -0.2 2.07562 V1 -2.70185 -0.225 2.0375 V2 -2.51875 -0.225 2.09531 + N0 -0.313659 -0.763673 0.564289 N1 -3.40413e-17 -1 -5.65364e-17 N2 -1.96915e-17 -1 -2.12543e-17 + txt003 +STRI + V0 -2.56991 -0.2 2.14271 V1 -2.60926 -0.125 2.17917 V2 -2.81385 -0.125 2.10494 + N0 -0.141352 -0.724137 0.675015 N1 -0.204668 -0.313917 0.927128 N2 -0.474611 -0.350859 0.807244 + txt003 +STRI + V0 -2.81385 -0.125 2.10494 V1 -2.76516 -0.2 2.07562 V2 -2.56991 -0.2 2.14271 + N0 -0.474611 -0.350859 0.807244 N1 -0.313659 -0.763673 0.564289 N2 -0.141352 -0.724137 0.675015 + txt003 +STRI + V0 -2.60926 -0.125 2.17917 V1 -2.625 0 2.19375 V2 -2.83333 0 2.11667 + N0 -0.204668 -0.313917 0.927128 N1 -0.219512 1.81728e-15 0.97561 N2 -0.514496 1.6713e-15 0.857493 + txt003 +STRI + V0 -2.83333 0 2.11667 V1 -2.81385 -0.125 2.10494 V2 -2.60926 -0.125 2.17917 + N0 -0.514496 1.6713e-15 0.857493 N1 -0.474611 -0.350859 0.807244 N2 -0.204668 -0.313917 0.927128 + txt003 +STRI + V0 -2.57037 0 1.95833 V1 -2.58985 -0.125 1.97006 V2 -2.6887 -0.125 1.90181 + N0 0.364399 0 -0.931243 N1 0.359682 -0.323804 -0.875089 N2 0.727532 -0.37029 -0.577566 + txt003 +STRI + V0 -2.6887 -0.125 1.90181 V1 -2.66713 0 1.89479 V2 -2.57037 0 1.95833 + N0 0.727532 -0.37029 -0.577566 N1 0.767382 0 -0.64119 N2 0.364399 0 -0.931243 + txt003 +STRI + V0 -2.58985 -0.125 1.97006 V1 -2.63855 -0.2 1.99938 V2 -2.74263 -0.2 1.91937 + N0 0.359682 -0.323804 -0.875089 N1 0.275915 -0.747596 -0.604128 N2 0.497152 -0.792374 -0.35353 + txt003 +STRI + V0 -2.74263 -0.2 1.91937 V1 -2.6887 -0.125 1.90181 V2 -2.58985 -0.125 1.97006 + N0 0.497152 -0.792374 -0.35353 N1 0.727532 -0.37029 -0.577566 N2 0.359682 -0.323804 -0.875089 + txt003 +STRI + V0 -2.63855 -0.2 1.99938 V1 -2.70185 -0.225 2.0375 V2 -2.81273 -0.225 1.94219 + N0 0.275915 -0.747596 -0.604128 N1 -3.40413e-17 -1 -5.65364e-17 N2 -3.3285e-17 -1 -1.02253e-16 + txt003 +STRI + V0 -2.81273 -0.225 1.94219 V1 -2.74263 -0.2 1.91937 V2 -2.63855 -0.2 1.99938 + N0 -3.3285e-17 -1 -1.02253e-16 N1 0.497152 -0.792374 -0.35353 N2 0.275915 -0.747596 -0.604128 + txt003 +STRI + V0 -2.70185 -0.225 2.0375 V1 -2.76516 -0.2 2.07562 V2 -2.88284 -0.2 1.96501 + N0 -3.40413e-17 -1 -5.65364e-17 N1 -0.313659 -0.763673 0.564289 N2 -0.519903 -0.799556 0.300684 + txt003 +STRI + V0 -2.88284 -0.2 1.96501 V1 -2.81273 -0.225 1.94219 V2 -2.70185 -0.225 2.0375 + N0 -0.519903 -0.799556 0.300684 N1 -3.3285e-17 -1 -1.02253e-16 N2 -3.40413e-17 -1 -5.65364e-17 + txt003 +STRI + V0 -2.76516 -0.2 2.07562 V1 -2.81385 -0.125 2.10494 V2 -2.93676 -0.125 1.98256 + N0 -0.313659 -0.763673 0.564289 N1 -0.474611 -0.350859 0.807244 N2 -0.810111 -0.385772 0.441476 + txt003 +STRI + V0 -2.93676 -0.125 1.98256 V1 -2.88284 -0.2 1.96501 V2 -2.76516 -0.2 2.07562 + N0 -0.810111 -0.385772 0.441476 N1 -0.519903 -0.799556 0.300684 N2 -0.313659 -0.763673 0.564289 + txt003 +STRI + V0 -2.81385 -0.125 2.10494 V1 -2.83333 0 2.11667 V2 -2.95833 0 1.98958 + N0 -0.474611 -0.350859 0.807244 N1 -0.514496 1.6713e-15 0.857493 N2 -0.882353 9.28814e-16 0.470588 + txt003 +STRI + V0 -2.95833 0 1.98958 V1 -2.93676 -0.125 1.98256 V2 -2.81385 -0.125 2.10494 + N0 -0.882353 9.28814e-16 0.470588 N1 -0.810111 -0.385772 0.441476 N2 -0.474611 -0.350859 0.807244 + txt003 +STRI + V0 -2.66713 0 1.89479 V1 -2.6887 -0.125 1.90181 V2 -2.72222 -0.125 1.8 + N0 0.767382 0 -0.64119 N1 0.727532 -0.37029 -0.577566 N2 0.923077 -0.384615 2.05733e-15 + txt003 +STRI + V0 -2.72222 -0.125 1.8 V1 -2.7 0 1.8 V2 -2.66713 0 1.89479 + N0 0.923077 -0.384615 2.05733e-15 N1 1 0 2.63164e-15 N2 0.767382 0 -0.64119 + txt003 +STRI + V0 -2.6887 -0.125 1.90181 V1 -2.74263 -0.2 1.91937 V2 -2.77778 -0.2 1.8 + N0 0.727532 -0.37029 -0.577566 N1 0.497152 -0.792374 -0.35353 N2 0.6 -0.8 8.24322e-16 + txt003 +STRI + V0 -2.77778 -0.2 1.8 V1 -2.72222 -0.125 1.8 V2 -2.6887 -0.125 1.90181 + N0 0.6 -0.8 8.24322e-16 N1 0.923077 -0.384615 2.05733e-15 N2 0.727532 -0.37029 -0.577566 + txt003 +STRI + V0 -2.74263 -0.2 1.91937 V1 -2.81273 -0.225 1.94219 V2 -2.85 -0.225 1.8 + N0 0.497152 -0.792374 -0.35353 N1 -3.3285e-17 -1 -1.02253e-16 N2 -1.21738e-31 -1 -1.23358e-16 + txt003 +STRI + V0 -2.85 -0.225 1.8 V1 -2.77778 -0.2 1.8 V2 -2.74263 -0.2 1.91937 + N0 -1.21738e-31 -1 -1.23358e-16 N1 0.6 -0.8 8.24322e-16 N2 0.497152 -0.792374 -0.35353 + txt003 +STRI + V0 -2.81273 -0.225 1.94219 V1 -2.88284 -0.2 1.96501 V2 -2.92222 -0.2 1.8 + N0 -3.3285e-17 -1 -1.02253e-16 N1 -0.519903 -0.799556 0.300684 N2 -0.6 -0.8 -3.10757e-16 + txt003 +STRI + V0 -2.92222 -0.2 1.8 V1 -2.85 -0.225 1.8 V2 -2.81273 -0.225 1.94219 + N0 -0.6 -0.8 -3.10757e-16 N1 -1.21738e-31 -1 -1.23358e-16 N2 -3.3285e-17 -1 -1.02253e-16 + txt003 +STRI + V0 -2.88284 -0.2 1.96501 V1 -2.93676 -0.125 1.98256 V2 -2.97778 -0.125 1.8 + N0 -0.519903 -0.799556 0.300684 N1 -0.810111 -0.385772 0.441476 N2 -0.923077 -0.384615 -1.1396e-16 + txt003 +STRI + V0 -2.97778 -0.125 1.8 V1 -2.92222 -0.2 1.8 V2 -2.88284 -0.2 1.96501 + N0 -0.923077 -0.384615 -1.1396e-16 N1 -0.6 -0.8 -3.10757e-16 N2 -0.519903 -0.799556 0.300684 + txt003 +STRI + V0 -2.93676 -0.125 1.98256 V1 -2.95833 0 1.98958 V2 -3 0 1.8 + N0 -0.810111 -0.385772 0.441476 N1 -0.882353 9.28814e-16 0.470588 N2 -1 -4.93432e-16 -0 + txt003 +STRI + V0 -3 0 1.8 V1 -2.97778 -0.125 1.8 V2 -2.93676 -0.125 1.98256 + N0 -1 -4.93432e-16 -0 N1 -0.923077 -0.384615 -1.1396e-16 N2 -0.810111 -0.385772 0.441476 + txt003 +STRI + V0 -1.5 0 2.25 V1 -1.50741 0.125 2.23333 V2 -1.95583 0.125 2.23133 + N0 0 -0 1 N1 0 0.298275 0.95448 N2 -0.0140841 0.297589 0.95459 + txt003 +STRI + V0 -1.95583 0.125 2.23133 V1 -1.95833 0 2.24792 V2 -1.5 0 2.25 + N0 -0.0140841 0.297589 0.95459 N1 -0.0149983 0 0.999888 N2 0 -0 1 + txt003 +STRI + V0 -1.50741 0.125 2.23333 V1 -1.52593 0.2 2.19167 V2 -1.94957 0.2 2.18985 + N0 0 0.298275 0.95448 N1 0 0.707107 0.707107 N2 -0.00997559 0.706181 0.707961 + txt003 +STRI + V0 -1.94957 0.2 2.18985 V1 -1.95583 0.125 2.23133 V2 -1.50741 0.125 2.23333 + N0 -0.00997559 0.706181 0.707961 N1 -0.0140841 0.297589 0.95459 N2 0 0.298275 0.95448 + txt003 +STRI + V0 -1.52593 0.2 2.19167 V1 -1.55 0.225 2.1375 V2 -1.94144 0.225 2.13594 + N0 0 0.707107 0.707107 N1 0 1 0 N2 -1.61364e-18 1 -2.43505e-19 + txt003 +STRI + V0 -1.94144 0.225 2.13594 V1 -1.94957 0.2 2.18985 V2 -1.52593 0.2 2.19167 + N0 -1.61364e-18 1 -2.43505e-19 N1 -0.00997559 0.706181 0.707961 N2 0 0.707107 0.707107 + txt003 +STRI + V0 -1.55 0.225 2.1375 V1 -1.57407 0.2 2.08333 V2 -1.9333 0.2 2.08202 + N0 0 1 0 N1 0 0.707107 -0.707107 N2 0.00846382 0.706077 -0.708084 + txt003 +STRI + V0 -1.9333 0.2 2.08202 V1 -1.94144 0.225 2.13594 V2 -1.55 0.225 2.1375 + N0 0.00846382 0.706077 -0.708084 N1 -1.61364e-18 1 -2.43505e-19 N2 0 1 0 + txt003 +STRI + V0 -1.57407 0.2 2.08333 V1 -1.59259 0.125 2.04167 V2 -1.92704 0.125 2.04055 + N0 0 0.707107 -0.707107 N1 0 0.298275 -0.95448 N2 0.0104256 0.297446 -0.954682 + txt003 +STRI + V0 -1.92704 0.125 2.04055 V1 -1.9333 0.2 2.08202 V2 -1.57407 0.2 2.08333 + N0 0.0104256 0.297446 -0.954682 N1 0.00846382 0.706077 -0.708084 N2 0 0.707107 -0.707107 + txt003 +STRI + V0 -1.59259 0.125 2.04167 V1 -1.6 0 2.025 V2 -1.92454 0 2.02396 + N0 0 0.298275 -0.95448 N1 -0 -4.93432e-16 -1 N2 0.0104645 -4.86951e-16 -0.999945 + txt003 +STRI + V0 -1.92454 0 2.02396 V1 -1.92704 0.125 2.04055 V2 -1.59259 0.125 2.04167 + N0 0.0104645 -4.86951e-16 -0.999945 N1 0.0104256 0.297446 -0.954682 N2 0 0.298275 -0.95448 + txt003 +STRI + V0 -1.95833 0 2.24792 V1 -1.95583 0.125 2.23133 V2 -2.32318 0.125 2.21728 + N0 -0.0149983 0 0.999888 N1 -0.0140841 0.297589 0.95459 N2 -0.0701017 0.299663 0.951466 + txt003 +STRI + V0 -2.32318 0.125 2.21728 V1 -2.33333 0 2.23333 V2 -1.95833 0 2.24792 + N0 -0.0701017 0.299663 0.951466 N1 -0.0747899 0 0.997199 N2 -0.0149983 0 0.999888 + txt003 +STRI + V0 -1.95583 0.125 2.23133 V1 -1.94957 0.2 2.18985 V2 -2.29781 0.2 2.17716 + N0 -0.0140841 0.297589 0.95459 N1 -0.00997559 0.706181 0.707961 N2 -0.0493858 0.708239 0.704243 + txt003 +STRI + V0 -2.29781 0.2 2.17716 V1 -2.32318 0.125 2.21728 V2 -1.95583 0.125 2.23133 + N0 -0.0493858 0.708239 0.704243 N1 -0.0701017 0.299663 0.951466 N2 -0.0140841 0.297589 0.95459 + txt003 +STRI + V0 -1.94957 0.2 2.18985 V1 -1.94144 0.225 2.13594 V2 -2.26481 0.225 2.125 + N0 -0.00997559 0.706181 0.707961 N1 -1.61364e-18 1 -2.43505e-19 N2 -7.69071e-18 1 -4.86421e-18 + txt003 +STRI + V0 -2.26481 0.225 2.125 V1 -2.29781 0.2 2.17716 V2 -1.94957 0.2 2.18985 + N0 -7.69071e-18 1 -4.86421e-18 N1 -0.0493858 0.708239 0.704243 N2 -0.00997559 0.706181 0.707961 + txt003 +STRI + V0 -1.94144 0.225 2.13594 V1 -1.9333 0.2 2.08202 V2 -2.23182 0.2 2.07284 + N0 -1.61364e-18 1 -2.43505e-19 N1 0.00846382 0.706077 -0.708084 N2 0.0415994 0.706072 -0.706918 + txt003 +STRI + V0 -2.23182 0.2 2.07284 V1 -2.26481 0.225 2.125 V2 -1.94144 0.225 2.13594 + N0 0.0415994 0.706072 -0.706918 N1 -7.69071e-18 1 -4.86421e-18 N2 -1.61364e-18 1 -2.43505e-19 + txt003 +STRI + V0 -1.9333 0.2 2.08202 V1 -1.92704 0.125 2.04055 V2 -2.20645 0.125 2.03272 + N0 0.00846382 0.706077 -0.708084 N1 0.0104256 0.297446 -0.954682 N2 0.0510028 0.296675 -0.953616 + txt003 +STRI + V0 -2.20645 0.125 2.03272 V1 -2.23182 0.2 2.07284 V2 -1.9333 0.2 2.08202 + N0 0.0510028 0.296675 -0.953616 N1 0.0415994 0.706072 -0.706918 N2 0.00846382 0.706077 -0.708084 + txt003 +STRI + V0 -1.92704 0.125 2.04055 V1 -1.92454 0 2.02396 V2 -2.1963 0 2.01667 + N0 0.0104256 0.297446 -0.954682 N1 0.0104645 -4.86951e-16 -0.999945 N2 0.0510696 -2.08595e-16 -0.998695 + txt003 +STRI + V0 -2.1963 0 2.01667 V1 -2.20645 0.125 2.03272 V2 -1.92704 0.125 2.04055 + N0 0.0510696 -2.08595e-16 -0.998695 N1 0.0510028 0.296675 -0.953616 N2 0.0104256 0.297446 -0.954682 + txt003 +STRI + V0 -2.33333 0 2.23333 V1 -2.32318 0.125 2.21728 V2 -2.60926 0.125 2.17917 + N0 -0.0747899 0 0.997199 N1 -0.0701017 0.299663 0.951466 N2 -0.204668 0.313917 0.927128 + txt003 +STRI + V0 -2.60926 0.125 2.17917 V1 -2.625 0 2.19375 V2 -2.33333 0 2.23333 + N0 -0.204668 0.313917 0.927128 N1 -0.219512 0 0.97561 N2 -0.0747899 0 0.997199 + txt003 +STRI + V0 -2.32318 0.125 2.21728 V1 -2.29781 0.2 2.17716 V2 -2.56991 0.2 2.14271 + N0 -0.0701017 0.299663 0.951466 N1 -0.0493858 0.708239 0.704243 N2 -0.141352 0.724137 0.675015 + txt003 +STRI + V0 -2.56991 0.2 2.14271 V1 -2.60926 0.125 2.17917 V2 -2.32318 0.125 2.21728 + N0 -0.141352 0.724137 0.675015 N1 -0.204668 0.313917 0.927128 N2 -0.0701017 0.299663 0.951466 + txt003 +STRI + V0 -2.29781 0.2 2.17716 V1 -2.26481 0.225 2.125 V2 -2.51875 0.225 2.09531 + N0 -0.0493858 0.708239 0.704243 N1 -7.69071e-18 1 -4.86421e-18 N2 -1.96915e-17 1 -2.12543e-17 + txt003 +STRI + V0 -2.51875 0.225 2.09531 V1 -2.56991 0.2 2.14271 V2 -2.29781 0.2 2.17716 + N0 -1.96915e-17 1 -2.12543e-17 N1 -0.141352 0.724137 0.675015 N2 -0.0493858 0.708239 0.704243 + txt003 +STRI + V0 -2.26481 0.225 2.125 V1 -2.23182 0.2 2.07284 V2 -2.46759 0.2 2.04792 + N0 -7.69071e-18 1 -4.86421e-18 N1 0.0415994 0.706072 -0.706918 N2 0.119688 0.715388 -0.6884 + txt003 +STRI + V0 -2.46759 0.2 2.04792 V1 -2.51875 0.225 2.09531 V2 -2.26481 0.225 2.125 + N0 0.119688 0.715388 -0.6884 N1 -1.96915e-17 1 -2.12543e-17 N2 -7.69071e-18 1 -4.86421e-18 + txt003 +STRI + V0 -2.23182 0.2 2.07284 V1 -2.20645 0.125 2.03272 V2 -2.42824 0.125 2.01146 + N0 0.0415994 0.706072 -0.706918 N1 0.0510028 0.296675 -0.953616 N2 0.148104 0.301279 -0.941964 + txt003 +STRI + V0 -2.42824 0.125 2.01146 V1 -2.46759 0.2 2.04792 V2 -2.23182 0.2 2.07284 + N0 0.148104 0.301279 -0.941964 N1 0.119688 0.715388 -0.6884 N2 0.0415994 0.706072 -0.706918 + txt003 +STRI + V0 -2.20645 0.125 2.03272 V1 -2.1963 0 2.01667 V2 -2.4125 0 1.99687 + N0 0.0510028 0.296675 -0.953616 N1 0.0510696 -2.08595e-16 -0.998695 N2 0.14834 -4.14777e-16 -0.988936 + txt003 +STRI + V0 -2.4125 0 1.99687 V1 -2.42824 0.125 2.01146 V2 -2.20645 0.125 2.03272 + N0 0.14834 -4.14777e-16 -0.988936 N1 0.148104 0.301279 -0.941964 N2 0.0510028 0.296675 -0.953616 + txt003 +STRI + V0 -2.625 0 2.19375 V1 -2.60926 0.125 2.17917 V2 -2.81385 0.125 2.10494 + N0 -0.219512 0 0.97561 N1 -0.204668 0.313917 0.927128 N2 -0.474611 0.350859 0.807244 + txt003 +STRI + V0 -2.81385 0.125 2.10494 V1 -2.83333 0 2.11667 V2 -2.625 0 2.19375 + N0 -0.474611 0.350859 0.807244 N1 -0.514496 0 0.857493 N2 -0.219512 0 0.97561 + txt003 +STRI + V0 -2.60926 0.125 2.17917 V1 -2.56991 0.2 2.14271 V2 -2.76516 0.2 2.07562 + N0 -0.204668 0.313917 0.927128 N1 -0.141352 0.724137 0.675015 N2 -0.313659 0.763673 0.564289 + txt003 +STRI + V0 -2.76516 0.2 2.07562 V1 -2.81385 0.125 2.10494 V2 -2.60926 0.125 2.17917 + N0 -0.313659 0.763673 0.564289 N1 -0.474611 0.350859 0.807244 N2 -0.204668 0.313917 0.927128 + txt003 +STRI + V0 -2.56991 0.2 2.14271 V1 -2.51875 0.225 2.09531 V2 -2.70185 0.225 2.0375 + N0 -0.141352 0.724137 0.675015 N1 -1.96915e-17 1 -2.12543e-17 N2 -3.40413e-17 1 -5.65364e-17 + txt003 +STRI + V0 -2.70185 0.225 2.0375 V1 -2.76516 0.2 2.07562 V2 -2.56991 0.2 2.14271 + N0 -3.40413e-17 1 -5.65364e-17 N1 -0.313659 0.763673 0.564289 N2 -0.141352 0.724137 0.675015 + txt003 +STRI + V0 -2.51875 0.225 2.09531 V1 -2.46759 0.2 2.04792 V2 -2.63855 0.2 1.99938 + N0 -1.96915e-17 1 -2.12543e-17 N1 0.119688 0.715388 -0.6884 N2 0.275915 0.747596 -0.604128 + txt003 +STRI + V0 -2.63855 0.2 1.99938 V1 -2.70185 0.225 2.0375 V2 -2.51875 0.225 2.09531 + N0 0.275915 0.747596 -0.604128 N1 -3.40413e-17 1 -5.65364e-17 N2 -1.96915e-17 1 -2.12543e-17 + txt003 +STRI + V0 -2.46759 0.2 2.04792 V1 -2.42824 0.125 2.01146 V2 -2.58985 0.125 1.97006 + N0 0.119688 0.715388 -0.6884 N1 0.148104 0.301279 -0.941964 N2 0.359682 0.323804 -0.875089 + txt003 +STRI + V0 -2.58985 0.125 1.97006 V1 -2.63855 0.2 1.99938 V2 -2.46759 0.2 2.04792 + N0 0.359682 0.323804 -0.875089 N1 0.275915 0.747596 -0.604128 N2 0.119688 0.715388 -0.6884 + txt003 +STRI + V0 -2.42824 0.125 2.01146 V1 -2.4125 0 1.99687 V2 -2.57037 0 1.95833 + N0 0.148104 0.301279 -0.941964 N1 0.14834 -4.14777e-16 -0.988936 N2 0.364399 -4.84479e-16 -0.931243 + txt003 +STRI + V0 -2.57037 0 1.95833 V1 -2.58985 0.125 1.97006 V2 -2.42824 0.125 2.01146 + N0 0.364399 -4.84479e-16 -0.931243 N1 0.359682 0.323804 -0.875089 N2 0.148104 0.301279 -0.941964 + txt003 +STRI + V0 -2.83333 0 2.11667 V1 -2.81385 0.125 2.10494 V2 -2.93676 0.125 1.98256 + N0 -0.514496 0 0.857493 N1 -0.474611 0.350859 0.807244 N2 -0.810111 0.385772 0.441476 + txt003 +STRI + V0 -2.93676 0.125 1.98256 V1 -2.95833 0 1.98958 V2 -2.83333 0 2.11667 + N0 -0.810111 0.385772 0.441476 N1 -0.882353 0 0.470588 N2 -0.514496 0 0.857493 + txt003 +STRI + V0 -2.81385 0.125 2.10494 V1 -2.76516 0.2 2.07562 V2 -2.88284 0.2 1.96501 + N0 -0.474611 0.350859 0.807244 N1 -0.313659 0.763673 0.564289 N2 -0.519903 0.799556 0.300684 + txt003 +STRI + V0 -2.88284 0.2 1.96501 V1 -2.93676 0.125 1.98256 V2 -2.81385 0.125 2.10494 + N0 -0.519903 0.799556 0.300684 N1 -0.810111 0.385772 0.441476 N2 -0.474611 0.350859 0.807244 + txt003 +STRI + V0 -2.76516 0.2 2.07562 V1 -2.70185 0.225 2.0375 V2 -2.81273 0.225 1.94219 + N0 -0.313659 0.763673 0.564289 N1 -3.40413e-17 1 -5.65364e-17 N2 -3.3285e-17 1 -1.02253e-16 + txt003 +STRI + V0 -2.81273 0.225 1.94219 V1 -2.88284 0.2 1.96501 V2 -2.76516 0.2 2.07562 + N0 -3.3285e-17 1 -1.02253e-16 N1 -0.519903 0.799556 0.300684 N2 -0.313659 0.763673 0.564289 + txt003 +STRI + V0 -2.70185 0.225 2.0375 V1 -2.63855 0.2 1.99938 V2 -2.74263 0.2 1.91937 + N0 -3.40413e-17 1 -5.65364e-17 N1 0.275915 0.747596 -0.604128 N2 0.497152 0.792374 -0.35353 + txt003 +STRI + V0 -2.74263 0.2 1.91937 V1 -2.81273 0.225 1.94219 V2 -2.70185 0.225 2.0375 + N0 0.497152 0.792374 -0.35353 N1 -3.3285e-17 1 -1.02253e-16 N2 -3.40413e-17 1 -5.65364e-17 + txt003 +STRI + V0 -2.63855 0.2 1.99938 V1 -2.58985 0.125 1.97006 V2 -2.6887 0.125 1.90181 + N0 0.275915 0.747596 -0.604128 N1 0.359682 0.323804 -0.875089 N2 0.727532 0.37029 -0.577566 + txt003 +STRI + V0 -2.6887 0.125 1.90181 V1 -2.74263 0.2 1.91937 V2 -2.63855 0.2 1.99938 + N0 0.727532 0.37029 -0.577566 N1 0.497152 0.792374 -0.35353 N2 0.275915 0.747596 -0.604128 + txt003 +STRI + V0 -2.58985 0.125 1.97006 V1 -2.57037 0 1.95833 V2 -2.66713 0 1.89479 + N0 0.359682 0.323804 -0.875089 N1 0.364399 -4.84479e-16 -0.931243 N2 0.767382 -3.16384e-16 -0.64119 + txt003 +STRI + V0 -2.66713 0 1.89479 V1 -2.6887 0.125 1.90181 V2 -2.58985 0.125 1.97006 + N0 0.767382 -3.16384e-16 -0.64119 N1 0.727532 0.37029 -0.577566 N2 0.359682 0.323804 -0.875089 + txt003 +STRI + V0 -2.95833 0 1.98958 V1 -2.93676 0.125 1.98256 V2 -2.97778 0.125 1.8 + N0 -0.882353 0 0.470588 N1 -0.810111 0.385772 0.441476 N2 -0.923077 0.384615 -1.1396e-16 + txt003 +STRI + V0 -2.97778 0.125 1.8 V1 -3 0 1.8 V2 -2.95833 0 1.98958 + N0 -0.923077 0.384615 -1.1396e-16 N1 -1 0 0 N2 -0.882353 0 0.470588 + txt003 +STRI + V0 -2.93676 0.125 1.98256 V1 -2.88284 0.2 1.96501 V2 -2.92222 0.2 1.8 + N0 -0.810111 0.385772 0.441476 N1 -0.519903 0.799556 0.300684 N2 -0.6 0.8 -3.10757e-16 + txt003 +STRI + V0 -2.92222 0.2 1.8 V1 -2.97778 0.125 1.8 V2 -2.93676 0.125 1.98256 + N0 -0.6 0.8 -3.10757e-16 N1 -0.923077 0.384615 -1.1396e-16 N2 -0.810111 0.385772 0.441476 + txt003 +STRI + V0 -2.88284 0.2 1.96501 V1 -2.81273 0.225 1.94219 V2 -2.85 0.225 1.8 + N0 -0.519903 0.799556 0.300684 N1 -3.3285e-17 1 -1.02253e-16 N2 -2.13041e-31 1 -1.23358e-16 + txt003 +STRI + V0 -2.85 0.225 1.8 V1 -2.92222 0.2 1.8 V2 -2.88284 0.2 1.96501 + N0 -2.13041e-31 1 -1.23358e-16 N1 -0.6 0.8 -3.10757e-16 N2 -0.519903 0.799556 0.300684 + txt003 +STRI + V0 -2.81273 0.225 1.94219 V1 -2.74263 0.2 1.91937 V2 -2.77778 0.2 1.8 + N0 -3.3285e-17 1 -1.02253e-16 N1 0.497152 0.792374 -0.35353 N2 0.6 0.8 8.24322e-16 + txt003 +STRI + V0 -2.77778 0.2 1.8 V1 -2.85 0.225 1.8 V2 -2.81273 0.225 1.94219 + N0 0.6 0.8 8.24322e-16 N1 -2.13041e-31 1 -1.23358e-16 N2 -3.3285e-17 1 -1.02253e-16 + txt003 +STRI + V0 -2.74263 0.2 1.91937 V1 -2.6887 0.125 1.90181 V2 -2.72222 0.125 1.8 + N0 0.497152 0.792374 -0.35353 N1 0.727532 0.37029 -0.577566 N2 0.923077 0.384615 2.05733e-15 + txt003 +STRI + V0 -2.72222 0.125 1.8 V1 -2.77778 0.2 1.8 V2 -2.74263 0.2 1.91937 + N0 0.923077 0.384615 2.05733e-15 N1 0.6 0.8 8.24322e-16 N2 0.497152 0.792374 -0.35353 + txt003 +STRI + V0 -2.6887 0.125 1.90181 V1 -2.66713 0 1.89479 V2 -2.7 0 1.8 + N0 0.727532 0.37029 -0.577566 N1 0.767382 -3.16384e-16 -0.64119 N2 1 4.93432e-16 2.63164e-15 + txt003 +STRI + V0 -2.7 0 1.8 V1 -2.72222 0.125 1.8 V2 -2.6887 0.125 1.90181 + N0 1 4.93432e-16 2.63164e-15 N1 0.923077 0.384615 2.05733e-15 N2 0.727532 0.37029 -0.577566 + txt003 +STRI + V0 -2.7 0 1.8 V1 -2.72222 -0.125 1.8 V2 -2.70418 -0.125 1.66398 + N0 1 0 0 N1 0.923077 -0.384615 0 N2 0.895972 -0.38623 0.219226 + txt003 +STRI + V0 -2.70418 -0.125 1.66398 V1 -2.68287 0 1.67083 V2 -2.7 0 1.8 + N0 0.895972 -0.38623 0.219226 N1 0.972045 0 0.234794 N2 1 0 0 + txt003 +STRI + V0 -2.72222 -0.125 1.8 V1 -2.77778 -0.2 1.8 V2 -2.75747 -0.2 1.64684 + N0 0.923077 -0.384615 0 N1 0.6 -0.8 0 N2 0.57987 -0.801541 0.145888 + txt003 +STRI + V0 -2.75747 -0.2 1.64684 V1 -2.70418 -0.125 1.66398 V2 -2.72222 -0.125 1.8 + N0 0.57987 -0.801541 0.145888 N1 0.895972 -0.38623 0.219226 N2 0.923077 -0.384615 0 + txt003 +STRI + V0 -2.77778 -0.2 1.8 V1 -2.85 -0.225 1.8 V2 -2.82674 -0.225 1.62457 + N0 0.6 -0.8 0 N1 -0 -1 -0 N2 9.48478e-19 -1 -2.94924e-18 + txt003 +STRI + V0 -2.82674 -0.225 1.62457 V1 -2.75747 -0.2 1.64684 V2 -2.77778 -0.2 1.8 + N0 9.48478e-19 -1 -2.94924e-18 N1 0.57987 -0.801541 0.145888 N2 0.6 -0.8 0 + txt003 +STRI + V0 -2.85 -0.225 1.8 V1 -2.92222 -0.2 1.8 V2 -2.896 -0.2 1.60229 + N0 -0 -1 -0 N1 -0.6 -0.8 -0 N2 -0.577707 -0.801752 -0.153129 + txt003 +STRI + V0 -2.896 -0.2 1.60229 V1 -2.82674 -0.225 1.62457 V2 -2.85 -0.225 1.8 + N0 -0.577707 -0.801752 -0.153129 N1 9.48478e-19 -1 -2.94924e-18 N2 -0 -1 -0 + txt003 +STRI + V0 -2.92222 -0.2 1.8 V1 -2.97778 -0.125 1.8 V2 -2.94929 -0.125 1.58515 + N0 -0.6 -0.8 -0 N1 -0.923077 -0.384615 -0 N2 -0.890548 -0.386679 -0.23959 + txt003 +STRI + V0 -2.94929 -0.125 1.58515 V1 -2.896 -0.2 1.60229 V2 -2.92222 -0.2 1.8 + N0 -0.890548 -0.386679 -0.23959 N1 -0.577707 -0.801752 -0.153129 N2 -0.6 -0.8 -0 + txt003 +STRI + V0 -2.97778 -0.125 1.8 V1 -3 0 1.8 V2 -2.9706 0 1.5783 + N0 -0.923077 -0.384615 -0 N1 -1 -9.86865e-16 -0 N2 -0.965311 -7.59377e-16 -0.261102 + txt003 +STRI + V0 -2.9706 0 1.5783 V1 -2.94929 -0.125 1.58515 V2 -2.97778 -0.125 1.8 + N0 -0.965311 -7.59377e-16 -0.261102 N1 -0.890548 -0.386679 -0.23959 N2 -0.923077 -0.384615 -0 + txt003 +STRI + V0 -2.68287 0 1.67083 V1 -2.70418 -0.125 1.66398 V2 -2.64829 -0.125 1.50535 + N0 0.972045 0 0.234794 N1 0.895972 -0.38623 0.219226 N2 0.842942 -0.376421 0.38439 + txt003 +STRI + V0 -2.64829 -0.125 1.50535 V1 -2.62963 0 1.51667 V2 -2.68287 0 1.67083 + N0 0.842942 -0.376421 0.38439 N1 0.913812 0 0.406138 N2 0.972045 0 0.234794 + txt003 +STRI + V0 -2.70418 -0.125 1.66398 V1 -2.75747 -0.2 1.64684 V2 -2.69492 -0.2 1.47706 + N0 0.895972 -0.38623 0.219226 N1 0.57987 -0.801541 0.145888 N2 0.548194 -0.793356 0.264707 + txt003 +STRI + V0 -2.69492 -0.2 1.47706 V1 -2.64829 -0.125 1.50535 V2 -2.70418 -0.125 1.66398 + N0 0.548194 -0.793356 0.264707 N1 0.842942 -0.376421 0.38439 N2 0.895972 -0.38623 0.219226 + txt003 +STRI + V0 -2.75747 -0.2 1.64684 V1 -2.82674 -0.225 1.62457 V2 -2.75556 -0.225 1.44028 + N0 0.57987 -0.801541 0.145888 N1 9.48478e-19 -1 -2.94924e-18 N2 5.73642e-18 -1 -9.4564e-18 + txt003 +STRI + V0 -2.75556 -0.225 1.44028 V1 -2.69492 -0.2 1.47706 V2 -2.75747 -0.2 1.64684 + N0 5.73642e-18 -1 -9.4564e-18 N1 0.548194 -0.793356 0.264707 N2 0.57987 -0.801541 0.145888 + txt003 +STRI + V0 -2.82674 -0.225 1.62457 V1 -2.896 -0.2 1.60229 V2 -2.81619 -0.2 1.4035 + N0 9.48478e-19 -1 -2.94924e-18 N1 -0.577707 -0.801752 -0.153129 N2 -0.534196 -0.794341 -0.289235 + txt003 +STRI + V0 -2.81619 -0.2 1.4035 V1 -2.75556 -0.225 1.44028 V2 -2.82674 -0.225 1.62457 + N0 -0.534196 -0.794341 -0.289235 N1 5.73642e-18 -1 -9.4564e-18 N2 9.48478e-19 -1 -2.94924e-18 + txt003 +STRI + V0 -2.896 -0.2 1.60229 V1 -2.94929 -0.125 1.58515 V2 -2.86283 -0.125 1.37521 + N0 -0.577707 -0.801752 -0.153129 N1 -0.890548 -0.386679 -0.23959 N2 -0.807437 -0.378466 -0.452558 + txt003 +STRI + V0 -2.86283 -0.125 1.37521 V1 -2.81619 -0.2 1.4035 V2 -2.896 -0.2 1.60229 + N0 -0.807437 -0.378466 -0.452558 N1 -0.534196 -0.794341 -0.289235 N2 -0.577707 -0.801752 -0.153129 + txt003 +STRI + V0 -2.94929 -0.125 1.58515 V1 -2.9706 0 1.5783 V2 -2.88148 0 1.36389 + N0 -0.890548 -0.386679 -0.23959 N1 -0.965311 -7.59377e-16 -0.261102 N2 -0.869653 -7.07402e-16 -0.493664 + txt003 +STRI + V0 -2.88148 0 1.36389 V1 -2.86283 -0.125 1.37521 V2 -2.94929 -0.125 1.58515 + N0 -0.869653 -7.07402e-16 -0.493664 N1 -0.807437 -0.378466 -0.452558 N2 -0.890548 -0.386679 -0.23959 + txt003 +STRI + V0 -2.62963 0 1.51667 V1 -2.64829 -0.125 1.50535 V2 -2.55185 -0.125 1.33576 + N0 0.913812 0 0.406138 N1 0.842942 -0.376421 0.38439 N2 0.772293 -0.349434 0.530527 + txt003 +STRI + V0 -2.55185 -0.125 1.33576 V1 -2.5375 0 1.35 V2 -2.62963 0 1.51667 + N0 0.772293 -0.349434 0.530527 N1 0.83205 0 0.5547 N2 0.913812 0 0.406138 + txt003 +STRI + V0 -2.64829 -0.125 1.50535 V1 -2.69492 -0.2 1.47706 V2 -2.58773 -0.2 1.30017 + N0 0.842942 -0.376421 0.38439 N1 0.548194 -0.793356 0.264707 N2 0.515846 -0.768155 0.379264 + txt003 +STRI + V0 -2.58773 -0.2 1.30017 V1 -2.55185 -0.125 1.33576 V2 -2.64829 -0.125 1.50535 + N0 0.515846 -0.768155 0.379264 N1 0.772293 -0.349434 0.530527 N2 0.842942 -0.376421 0.38439 + txt003 +STRI + V0 -2.69492 -0.2 1.47706 V1 -2.75556 -0.225 1.44028 V2 -2.63437 -0.225 1.25391 + N0 0.548194 -0.793356 0.264707 N1 5.73642e-18 -1 -9.4564e-18 N2 1.5603e-17 -1 -1.57299e-17 + txt003 +STRI + V0 -2.63437 -0.225 1.25391 V1 -2.58773 -0.2 1.30017 V2 -2.69492 -0.2 1.47706 + N0 1.5603e-17 -1 -1.57299e-17 N1 0.515846 -0.768155 0.379264 N2 0.548194 -0.793356 0.264707 + txt003 +STRI + V0 -2.75556 -0.225 1.44028 V1 -2.81619 -0.2 1.4035 V2 -2.68102 -0.2 1.20764 + N0 5.73642e-18 -1 -9.4564e-18 N1 -0.534196 -0.794341 -0.289235 N2 -0.486433 -0.770599 -0.411777 + txt003 +STRI + V0 -2.68102 -0.2 1.20764 V1 -2.63437 -0.225 1.25391 V2 -2.75556 -0.225 1.44028 + N0 -0.486433 -0.770599 -0.411777 N1 1.5603e-17 -1 -1.57299e-17 N2 5.73642e-18 -1 -9.4564e-18 + txt003 +STRI + V0 -2.81619 -0.2 1.4035 V1 -2.86283 -0.125 1.37521 V2 -2.7169 -0.125 1.17205 + N0 -0.534196 -0.794341 -0.289235 N1 -0.807437 -0.378466 -0.452558 N2 -0.700515 -0.35392 -0.619694 + txt003 +STRI + V0 -2.7169 -0.125 1.17205 V1 -2.68102 -0.2 1.20764 V2 -2.81619 -0.2 1.4035 + N0 -0.700515 -0.35392 -0.619694 N1 -0.486433 -0.770599 -0.411777 N2 -0.534196 -0.794341 -0.289235 + txt003 +STRI + V0 -2.86283 -0.125 1.37521 V1 -2.88148 0 1.36389 V2 -2.73125 0 1.15781 + N0 -0.807437 -0.378466 -0.452558 N1 -0.869653 -7.07402e-16 -0.493664 N2 -0.743581 -2.38916e-16 -0.668646 + txt003 +STRI + V0 -2.73125 0 1.15781 V1 -2.7169 -0.125 1.17205 V2 -2.86283 -0.125 1.37521 + N0 -0.743581 -2.38916e-16 -0.668646 N1 -0.700515 -0.35392 -0.619694 N2 -0.807437 -0.378466 -0.452558 + txt003 +STRI + V0 -2.5375 0 1.35 V1 -2.55185 -0.125 1.33576 V2 -2.41221 -0.125 1.16687 + N0 0.83205 0 0.5547 N1 0.772293 -0.349434 0.530527 N2 0.676612 -0.31353 0.666255 + txt003 +STRI + V0 -2.41221 -0.125 1.16687 V1 -2.4037 0 1.18333 V2 -2.5375 0 1.35 + N0 0.676612 -0.31353 0.666255 N1 0.722374 0 0.691503 N2 0.83205 0 0.5547 + txt003 +STRI + V0 -2.55185 -0.125 1.33576 V1 -2.58773 -0.2 1.30017 V2 -2.43347 -0.2 1.12572 + N0 0.772293 -0.349434 0.530527 N1 0.515846 -0.768155 0.379264 N2 0.471519 -0.729692 0.495195 + txt003 +STRI + V0 -2.43347 -0.2 1.12572 V1 -2.41221 -0.125 1.16687 V2 -2.55185 -0.125 1.33576 + N0 0.471519 -0.729692 0.495195 N1 0.676612 -0.31353 0.666255 N2 0.772293 -0.349434 0.530527 + txt003 +STRI + V0 -2.58773 -0.2 1.30017 V1 -2.63437 -0.225 1.25391 V2 -2.46111 -0.225 1.07222 + N0 0.515846 -0.768155 0.379264 N1 1.5603e-17 -1 -1.57299e-17 N2 3.17396e-17 -1 -1.63988e-17 + txt003 +STRI + V0 -2.46111 -0.225 1.07222 V1 -2.43347 -0.2 1.12572 V2 -2.58773 -0.2 1.30017 + N0 3.17396e-17 -1 -1.63988e-17 N1 0.471519 -0.729692 0.495195 N2 0.515846 -0.768155 0.379264 + txt003 +STRI + V0 -2.63437 -0.225 1.25391 V1 -2.68102 -0.2 1.20764 V2 -2.48875 -0.2 1.01872 + N0 1.5603e-17 -1 -1.57299e-17 N1 -0.486433 -0.770599 -0.411777 N2 -0.433172 -0.735531 -0.520919 + txt003 +STRI + V0 -2.48875 -0.2 1.01872 V1 -2.46111 -0.225 1.07222 V2 -2.63437 -0.225 1.25391 + N0 -0.433172 -0.735531 -0.520919 N1 3.17396e-17 -1 -1.63988e-17 N2 1.5603e-17 -1 -1.57299e-17 + txt003 +STRI + V0 -2.68102 -0.2 1.20764 V1 -2.7169 -0.125 1.17205 V2 -2.51001 -0.125 0.977572 + N0 -0.486433 -0.770599 -0.411777 N1 -0.700515 -0.35392 -0.619694 N2 -0.589822 -0.322549 -0.740319 + txt003 +STRI + V0 -2.51001 -0.125 0.977572 V1 -2.48875 -0.2 1.01872 V2 -2.68102 -0.2 1.20764 + N0 -0.589822 -0.322549 -0.740319 N1 -0.433172 -0.735531 -0.520919 N2 -0.486433 -0.770599 -0.411777 + txt003 +STRI + V0 -2.7169 -0.125 1.17205 V1 -2.73125 0 1.15781 V2 -2.51852 0 0.961111 + N0 -0.700515 -0.35392 -0.619694 N1 -0.743581 -2.38916e-16 -0.668646 N2 -0.617031 -2.64751e-17 -0.786939 + txt003 +STRI + V0 -2.51852 0 0.961111 V1 -2.51001 -0.125 0.977572 V2 -2.7169 -0.125 1.17205 + N0 -0.617031 -2.64751e-17 -0.786939 N1 -0.589822 -0.322549 -0.740319 N2 -0.700515 -0.35392 -0.619694 + txt003 +STRI + V0 -2.4037 0 1.18333 V1 -2.41221 -0.125 1.16687 V2 -2.22668 -0.125 1.01033 + N0 0.722374 0 0.691503 N1 0.676612 -0.31353 0.666255 N2 0.548733 -0.289562 0.784249 + txt003 +STRI + V0 -2.22668 -0.125 1.01033 V1 -2.22546 0 1.02917 V2 -2.4037 0 1.18333 + N0 0.548733 -0.289562 0.784249 N1 0.580973 0 0.813923 N2 0.722374 0 0.691503 + txt003 +STRI + V0 -2.41221 -0.125 1.16687 V1 -2.43347 -0.2 1.12572 V2 -2.22972 -0.2 0.963227 + N0 0.676612 -0.31353 0.666255 N1 0.471519 -0.729692 0.495195 N2 0.396971 -0.700023 0.593618 + txt003 +STRI + V0 -2.22972 -0.2 0.963227 V1 -2.22668 -0.125 1.01033 V2 -2.41221 -0.125 1.16687 + N0 0.396971 -0.700023 0.593618 N1 0.548733 -0.289562 0.784249 N2 0.676612 -0.31353 0.666255 + txt003 +STRI + V0 -2.43347 -0.2 1.12572 V1 -2.46111 -0.225 1.07222 V2 -2.23368 -0.225 0.901997 + N0 0.471519 -0.729692 0.495195 N1 3.17396e-17 -1 -1.63988e-17 N2 5.4409e-17 -1 -3.51585e-18 + txt003 +STRI + V0 -2.23368 -0.225 0.901997 V1 -2.22972 -0.2 0.963227 V2 -2.43347 -0.2 1.12572 + N0 5.4409e-17 -1 -3.51585e-18 N1 0.396971 -0.700023 0.593618 N2 0.471519 -0.729692 0.495195 + txt003 +STRI + V0 -2.46111 -0.225 1.07222 V1 -2.48875 -0.2 1.01872 V2 -2.23764 -0.2 0.840766 + N0 3.17396e-17 -1 -1.63988e-17 N1 -0.433172 -0.735531 -0.520919 N2 -0.367048 -0.708353 -0.60292 + txt003 +STRI + V0 -2.23764 -0.2 0.840766 V1 -2.23368 -0.225 0.901997 V2 -2.46111 -0.225 1.07222 + N0 -0.367048 -0.708353 -0.60292 N1 5.4409e-17 -1 -3.51585e-18 N2 3.17396e-17 -1 -1.63988e-17 + txt003 +STRI + V0 -2.48875 -0.2 1.01872 V1 -2.51001 -0.125 0.977572 V2 -2.24068 -0.125 0.793666 + N0 -0.433172 -0.735531 -0.520919 N1 -0.589822 -0.322549 -0.740319 N2 -0.485318 -0.301052 -0.820874 + txt003 +STRI + V0 -2.24068 -0.125 0.793666 V1 -2.23764 -0.2 0.840766 V2 -2.48875 -0.2 1.01872 + N0 -0.485318 -0.301052 -0.820874 N1 -0.367048 -0.708353 -0.60292 N2 -0.433172 -0.735531 -0.520919 + txt003 +STRI + V0 -2.51001 -0.125 0.977572 V1 -2.51852 0 0.961111 V2 -2.2419 0 0.774826 + N0 -0.589822 -0.322549 -0.740319 N1 -0.617031 -2.64751e-17 -0.786939 N2 -0.504836 2.02979e-16 -0.863216 + txt003 +STRI + V0 -2.2419 0 0.774826 V1 -2.24068 -0.125 0.793666 V2 -2.51001 -0.125 0.977572 + N0 -0.504836 2.02979e-16 -0.863216 N1 -0.485318 -0.301052 -0.820874 N2 -0.589822 -0.322549 -0.740319 + txt003 +STRI + V0 -2.22546 0 1.02917 V1 -2.22668 -0.125 1.01033 V2 -1.99259 -0.125 0.877778 + N0 0.580973 0 0.813923 N1 0.548733 -0.289562 0.784249 N2 0.390503 -0.30734 0.867784 + txt003 +STRI + V0 -1.99259 -0.125 0.877778 V1 -2 0 0.9 V2 -2.22546 0 1.02917 + N0 0.390503 -0.30734 0.867784 N1 0.410365 0 0.911922 N2 0.580973 0 0.813923 + txt003 +STRI + V0 -2.22668 -0.125 1.01033 V1 -2.22972 -0.2 0.963227 V2 -1.97407 -0.2 0.822222 + N0 0.548733 -0.289562 0.784249 N1 0.396971 -0.700023 0.593618 N2 0.285351 -0.718662 0.634113 + txt003 +STRI + V0 -1.97407 -0.2 0.822222 V1 -1.99259 -0.125 0.877778 V2 -2.22668 -0.125 1.01033 + N0 0.285351 -0.718662 0.634113 N1 0.390503 -0.30734 0.867784 N2 0.548733 -0.289562 0.784249 + txt003 +STRI + V0 -2.22972 -0.2 0.963227 V1 -2.23368 -0.225 0.901997 V2 -1.95 -0.225 0.75 + N0 0.396971 -0.700023 0.593618 N1 5.4409e-17 -1 -3.51585e-18 N2 7.83687e-17 -1 2.61229e-17 + txt003 +STRI + V0 -1.95 -0.225 0.75 V1 -1.97407 -0.2 0.822222 V2 -2.22972 -0.2 0.963227 + N0 7.83687e-17 -1 2.61229e-17 N1 0.285351 -0.718662 0.634113 N2 0.396971 -0.700023 0.593618 + txt003 +STRI + V0 -2.23368 -0.225 0.901997 V1 -2.23764 -0.2 0.840766 V2 -1.92593 -0.2 0.677778 + N0 5.4409e-17 -1 -3.51585e-18 N1 -0.367048 -0.708353 -0.60292 N2 -0.285351 -0.718662 -0.634113 + txt003 +STRI + V0 -1.92593 -0.2 0.677778 V1 -1.95 -0.225 0.75 V2 -2.23368 -0.225 0.901997 + N0 -0.285351 -0.718662 -0.634113 N1 7.83687e-17 -1 2.61229e-17 N2 5.4409e-17 -1 -3.51585e-18 + txt003 +STRI + V0 -2.23764 -0.2 0.840766 V1 -2.24068 -0.125 0.793666 V2 -1.90741 -0.125 0.622222 + N0 -0.367048 -0.708353 -0.60292 N1 -0.485318 -0.301052 -0.820874 N2 -0.390503 -0.30734 -0.867784 + txt003 +STRI + V0 -1.90741 -0.125 0.622222 V1 -1.92593 -0.2 0.677778 V2 -2.23764 -0.2 0.840766 + N0 -0.390503 -0.30734 -0.867784 N1 -0.285351 -0.718662 -0.634113 N2 -0.367048 -0.708353 -0.60292 + txt003 +STRI + V0 -2.24068 -0.125 0.793666 V1 -2.2419 0 0.774826 V2 -1.9 0 0.6 + N0 -0.485318 -0.301052 -0.820874 N1 -0.504836 2.02979e-16 -0.863216 N2 -0.410365 4.49972e-17 -0.911922 + txt003 +STRI + V0 -1.9 0 0.6 V1 -1.90741 -0.125 0.622222 V2 -2.24068 -0.125 0.793666 + N0 -0.410365 4.49972e-17 -0.911922 N1 -0.390503 -0.30734 -0.867784 N2 -0.485318 -0.301052 -0.820874 + txt003 +STRI + V0 -3 0 1.8 V1 -2.97778 0.125 1.8 V2 -2.94929 0.125 1.58515 + N0 -1 0 0 N1 -0.923077 0.384615 0 N2 -0.890548 0.386679 -0.23959 + txt003 +STRI + V0 -2.94929 0.125 1.58515 V1 -2.9706 0 1.5783 V2 -3 0 1.8 + N0 -0.890548 0.386679 -0.23959 N1 -0.965311 0 -0.261102 N2 -1 0 0 + txt003 +STRI + V0 -2.97778 0.125 1.8 V1 -2.92222 0.2 1.8 V2 -2.896 0.2 1.60229 + N0 -0.923077 0.384615 0 N1 -0.6 0.8 0 N2 -0.577707 0.801752 -0.153129 + txt003 +STRI + V0 -2.896 0.2 1.60229 V1 -2.94929 0.125 1.58515 V2 -2.97778 0.125 1.8 + N0 -0.577707 0.801752 -0.153129 N1 -0.890548 0.386679 -0.23959 N2 -0.923077 0.384615 0 + txt003 +STRI + V0 -2.92222 0.2 1.8 V1 -2.85 0.225 1.8 V2 -2.82674 0.225 1.62457 + N0 -0.6 0.8 0 N1 -0 1 0 N2 9.48478e-19 1 -2.94924e-18 + txt003 +STRI + V0 -2.82674 0.225 1.62457 V1 -2.896 0.2 1.60229 V2 -2.92222 0.2 1.8 + N0 9.48478e-19 1 -2.94924e-18 N1 -0.577707 0.801752 -0.153129 N2 -0.6 0.8 0 + txt003 +STRI + V0 -2.85 0.225 1.8 V1 -2.77778 0.2 1.8 V2 -2.75747 0.2 1.64684 + N0 -0 1 0 N1 0.6 0.8 0 N2 0.57987 0.801541 0.145888 + txt003 +STRI + V0 -2.75747 0.2 1.64684 V1 -2.82674 0.225 1.62457 V2 -2.85 0.225 1.8 + N0 0.57987 0.801541 0.145888 N1 9.48478e-19 1 -2.94924e-18 N2 -0 1 0 + txt003 +STRI + V0 -2.77778 0.2 1.8 V1 -2.72222 0.125 1.8 V2 -2.70418 0.125 1.66398 + N0 0.6 0.8 0 N1 0.923077 0.384615 0 N2 0.895972 0.38623 0.219226 + txt003 +STRI + V0 -2.70418 0.125 1.66398 V1 -2.75747 0.2 1.64684 V2 -2.77778 0.2 1.8 + N0 0.895972 0.38623 0.219226 N1 0.57987 0.801541 0.145888 N2 0.6 0.8 0 + txt003 +STRI + V0 -2.72222 0.125 1.8 V1 -2.7 0 1.8 V2 -2.68287 0 1.67083 + N0 0.923077 0.384615 0 N1 1 9.86865e-16 0 N2 0.972045 1.13306e-15 0.234794 + txt003 +STRI + V0 -2.68287 0 1.67083 V1 -2.70418 0.125 1.66398 V2 -2.72222 0.125 1.8 + N0 0.972045 1.13306e-15 0.234794 N1 0.895972 0.38623 0.219226 N2 0.923077 0.384615 0 + txt003 +STRI + V0 -2.9706 0 1.5783 V1 -2.94929 0.125 1.58515 V2 -2.86283 0.125 1.37521 + N0 -0.965311 0 -0.261102 N1 -0.890548 0.386679 -0.23959 N2 -0.807437 0.378466 -0.452558 + txt003 +STRI + V0 -2.86283 0.125 1.37521 V1 -2.88148 0 1.36389 V2 -2.9706 0 1.5783 + N0 -0.807437 0.378466 -0.452558 N1 -0.869653 0 -0.493664 N2 -0.965311 0 -0.261102 + txt003 +STRI + V0 -2.94929 0.125 1.58515 V1 -2.896 0.2 1.60229 V2 -2.81619 0.2 1.4035 + N0 -0.890548 0.386679 -0.23959 N1 -0.577707 0.801752 -0.153129 N2 -0.534196 0.794341 -0.289235 + txt003 +STRI + V0 -2.81619 0.2 1.4035 V1 -2.86283 0.125 1.37521 V2 -2.94929 0.125 1.58515 + N0 -0.534196 0.794341 -0.289235 N1 -0.807437 0.378466 -0.452558 N2 -0.890548 0.386679 -0.23959 + txt003 +STRI + V0 -2.896 0.2 1.60229 V1 -2.82674 0.225 1.62457 V2 -2.75556 0.225 1.44028 + N0 -0.577707 0.801752 -0.153129 N1 9.48478e-19 1 -2.94924e-18 N2 5.73642e-18 1 -9.4564e-18 + txt003 +STRI + V0 -2.75556 0.225 1.44028 V1 -2.81619 0.2 1.4035 V2 -2.896 0.2 1.60229 + N0 5.73642e-18 1 -9.4564e-18 N1 -0.534196 0.794341 -0.289235 N2 -0.577707 0.801752 -0.153129 + txt003 +STRI + V0 -2.82674 0.225 1.62457 V1 -2.75747 0.2 1.64684 V2 -2.69492 0.2 1.47706 + N0 9.48478e-19 1 -2.94924e-18 N1 0.57987 0.801541 0.145888 N2 0.548194 0.793356 0.264707 + txt003 +STRI + V0 -2.69492 0.2 1.47706 V1 -2.75556 0.225 1.44028 V2 -2.82674 0.225 1.62457 + N0 0.548194 0.793356 0.264707 N1 5.73642e-18 1 -9.4564e-18 N2 9.48478e-19 1 -2.94924e-18 + txt003 +STRI + V0 -2.75747 0.2 1.64684 V1 -2.70418 0.125 1.66398 V2 -2.64829 0.125 1.50535 + N0 0.57987 0.801541 0.145888 N1 0.895972 0.38623 0.219226 N2 0.842942 0.376421 0.38439 + txt003 +STRI + V0 -2.64829 0.125 1.50535 V1 -2.69492 0.2 1.47706 V2 -2.75747 0.2 1.64684 + N0 0.842942 0.376421 0.38439 N1 0.548194 0.793356 0.264707 N2 0.57987 0.801541 0.145888 + txt003 +STRI + V0 -2.70418 0.125 1.66398 V1 -2.68287 0 1.67083 V2 -2.62963 0 1.51667 + N0 0.895972 0.38623 0.219226 N1 0.972045 1.13306e-15 0.234794 N2 0.913812 1.42786e-15 0.406138 + txt003 +STRI + V0 -2.62963 0 1.51667 V1 -2.64829 0.125 1.50535 V2 -2.70418 0.125 1.66398 + N0 0.913812 1.42786e-15 0.406138 N1 0.842942 0.376421 0.38439 N2 0.895972 0.38623 0.219226 + txt003 +STRI + V0 -2.88148 0 1.36389 V1 -2.86283 0.125 1.37521 V2 -2.7169 0.125 1.17205 + N0 -0.869653 0 -0.493664 N1 -0.807437 0.378466 -0.452558 N2 -0.700515 0.35392 -0.619694 + txt003 +STRI + V0 -2.7169 0.125 1.17205 V1 -2.73125 0 1.15781 V2 -2.88148 0 1.36389 + N0 -0.700515 0.35392 -0.619694 N1 -0.743581 0 -0.668646 N2 -0.869653 0 -0.493664 + txt003 +STRI + V0 -2.86283 0.125 1.37521 V1 -2.81619 0.2 1.4035 V2 -2.68102 0.2 1.20764 + N0 -0.807437 0.378466 -0.452558 N1 -0.534196 0.794341 -0.289235 N2 -0.486433 0.770599 -0.411777 + txt003 +STRI + V0 -2.68102 0.2 1.20764 V1 -2.7169 0.125 1.17205 V2 -2.86283 0.125 1.37521 + N0 -0.486433 0.770599 -0.411777 N1 -0.700515 0.35392 -0.619694 N2 -0.807437 0.378466 -0.452558 + txt003 +STRI + V0 -2.81619 0.2 1.4035 V1 -2.75556 0.225 1.44028 V2 -2.63437 0.225 1.25391 + N0 -0.534196 0.794341 -0.289235 N1 5.73642e-18 1 -9.4564e-18 N2 1.5603e-17 1 -1.57299e-17 + txt003 +STRI + V0 -2.63437 0.225 1.25391 V1 -2.68102 0.2 1.20764 V2 -2.81619 0.2 1.4035 + N0 1.5603e-17 1 -1.57299e-17 N1 -0.486433 0.770599 -0.411777 N2 -0.534196 0.794341 -0.289235 + txt003 +STRI + V0 -2.75556 0.225 1.44028 V1 -2.69492 0.2 1.47706 V2 -2.58773 0.2 1.30017 + N0 5.73642e-18 1 -9.4564e-18 N1 0.548194 0.793356 0.264707 N2 0.515846 0.768155 0.379264 + txt003 +STRI + V0 -2.58773 0.2 1.30017 V1 -2.63437 0.225 1.25391 V2 -2.75556 0.225 1.44028 + N0 0.515846 0.768155 0.379264 N1 1.5603e-17 1 -1.57299e-17 N2 5.73642e-18 1 -9.4564e-18 + txt003 +STRI + V0 -2.69492 0.2 1.47706 V1 -2.64829 0.125 1.50535 V2 -2.55185 0.125 1.33576 + N0 0.548194 0.793356 0.264707 N1 0.842942 0.376421 0.38439 N2 0.772293 0.349434 0.530527 + txt003 +STRI + V0 -2.55185 0.125 1.33576 V1 -2.58773 0.2 1.30017 V2 -2.69492 0.2 1.47706 + N0 0.772293 0.349434 0.530527 N1 0.515846 0.768155 0.379264 N2 0.548194 0.793356 0.264707 + txt003 +STRI + V0 -2.64829 0.125 1.50535 V1 -2.62963 0 1.51667 V2 -2.5375 0 1.35 + N0 0.842942 0.376421 0.38439 N1 0.913812 1.42786e-15 0.406138 N2 0.83205 1.23168e-15 0.5547 + txt003 +STRI + V0 -2.5375 0 1.35 V1 -2.55185 0.125 1.33576 V2 -2.64829 0.125 1.50535 + N0 0.83205 1.23168e-15 0.5547 N1 0.772293 0.349434 0.530527 N2 0.842942 0.376421 0.38439 + txt003 +STRI + V0 -2.73125 0 1.15781 V1 -2.7169 0.125 1.17205 V2 -2.51001 0.125 0.977572 + N0 -0.743581 0 -0.668646 N1 -0.700515 0.35392 -0.619694 N2 -0.589822 0.322549 -0.740319 + txt003 +STRI + V0 -2.51001 0.125 0.977572 V1 -2.51852 0 0.961111 V2 -2.73125 0 1.15781 + N0 -0.589822 0.322549 -0.740319 N1 -0.617031 0 -0.786939 N2 -0.743581 0 -0.668646 + txt003 +STRI + V0 -2.7169 0.125 1.17205 V1 -2.68102 0.2 1.20764 V2 -2.48875 0.2 1.01872 + N0 -0.700515 0.35392 -0.619694 N1 -0.486433 0.770599 -0.411777 N2 -0.433172 0.735531 -0.520919 + txt003 +STRI + V0 -2.48875 0.2 1.01872 V1 -2.51001 0.125 0.977572 V2 -2.7169 0.125 1.17205 + N0 -0.433172 0.735531 -0.520919 N1 -0.589822 0.322549 -0.740319 N2 -0.700515 0.35392 -0.619694 + txt003 +STRI + V0 -2.68102 0.2 1.20764 V1 -2.63437 0.225 1.25391 V2 -2.46111 0.225 1.07222 + N0 -0.486433 0.770599 -0.411777 N1 1.5603e-17 1 -1.57299e-17 N2 3.17396e-17 1 -1.63988e-17 + txt003 +STRI + V0 -2.46111 0.225 1.07222 V1 -2.48875 0.2 1.01872 V2 -2.68102 0.2 1.20764 + N0 3.17396e-17 1 -1.63988e-17 N1 -0.433172 0.735531 -0.520919 N2 -0.486433 0.770599 -0.411777 + txt003 +STRI + V0 -2.63437 0.225 1.25391 V1 -2.58773 0.2 1.30017 V2 -2.43347 0.2 1.12572 + N0 1.5603e-17 1 -1.57299e-17 N1 0.515846 0.768155 0.379264 N2 0.471519 0.729692 0.495195 + txt003 +STRI + V0 -2.43347 0.2 1.12572 V1 -2.46111 0.225 1.07222 V2 -2.63437 0.225 1.25391 + N0 0.471519 0.729692 0.495195 N1 3.17396e-17 1 -1.63988e-17 N2 1.5603e-17 1 -1.57299e-17 + txt003 +STRI + V0 -2.58773 0.2 1.30017 V1 -2.55185 0.125 1.33576 V2 -2.41221 0.125 1.16687 + N0 0.515846 0.768155 0.379264 N1 0.772293 0.349434 0.530527 N2 0.676612 0.31353 0.666255 + txt003 +STRI + V0 -2.41221 0.125 1.16687 V1 -2.43347 0.2 1.12572 V2 -2.58773 0.2 1.30017 + N0 0.676612 0.31353 0.666255 N1 0.471519 0.729692 0.495195 N2 0.515846 0.768155 0.379264 + txt003 +STRI + V0 -2.55185 0.125 1.33576 V1 -2.5375 0 1.35 V2 -2.4037 0 1.18333 + N0 0.772293 0.349434 0.530527 N1 0.83205 1.23168e-15 0.5547 N2 0.722374 1.2247e-15 0.691503 + txt003 +STRI + V0 -2.4037 0 1.18333 V1 -2.41221 0.125 1.16687 V2 -2.55185 0.125 1.33576 + N0 0.722374 1.2247e-15 0.691503 N1 0.676612 0.31353 0.666255 N2 0.772293 0.349434 0.530527 + txt003 +STRI + V0 -2.51852 0 0.961111 V1 -2.51001 0.125 0.977572 V2 -2.24068 0.125 0.793666 + N0 -0.617031 0 -0.786939 N1 -0.589822 0.322549 -0.740319 N2 -0.485318 0.301052 -0.820874 + txt003 +STRI + V0 -2.24068 0.125 0.793666 V1 -2.2419 0 0.774826 V2 -2.51852 0 0.961111 + N0 -0.485318 0.301052 -0.820874 N1 -0.504836 0 -0.863216 N2 -0.617031 0 -0.786939 + txt003 +STRI + V0 -2.51001 0.125 0.977572 V1 -2.48875 0.2 1.01872 V2 -2.23764 0.2 0.840766 + N0 -0.589822 0.322549 -0.740319 N1 -0.433172 0.735531 -0.520919 N2 -0.367048 0.708353 -0.60292 + txt003 +STRI + V0 -2.23764 0.2 0.840766 V1 -2.24068 0.125 0.793666 V2 -2.51001 0.125 0.977572 + N0 -0.367048 0.708353 -0.60292 N1 -0.485318 0.301052 -0.820874 N2 -0.589822 0.322549 -0.740319 + txt003 +STRI + V0 -2.48875 0.2 1.01872 V1 -2.46111 0.225 1.07222 V2 -2.23368 0.225 0.901997 + N0 -0.433172 0.735531 -0.520919 N1 3.17396e-17 1 -1.63988e-17 N2 5.4409e-17 1 -3.51585e-18 + txt003 +STRI + V0 -2.23368 0.225 0.901997 V1 -2.23764 0.2 0.840766 V2 -2.48875 0.2 1.01872 + N0 5.4409e-17 1 -3.51585e-18 N1 -0.367048 0.708353 -0.60292 N2 -0.433172 0.735531 -0.520919 + txt003 +STRI + V0 -2.46111 0.225 1.07222 V1 -2.43347 0.2 1.12572 V2 -2.22972 0.2 0.963227 + N0 3.17396e-17 1 -1.63988e-17 N1 0.471519 0.729692 0.495195 N2 0.396971 0.700023 0.593618 + txt003 +STRI + V0 -2.22972 0.2 0.963227 V1 -2.23368 0.225 0.901997 V2 -2.46111 0.225 1.07222 + N0 0.396971 0.700023 0.593618 N1 5.4409e-17 1 -3.51585e-18 N2 3.17396e-17 1 -1.63988e-17 + txt003 +STRI + V0 -2.43347 0.2 1.12572 V1 -2.41221 0.125 1.16687 V2 -2.22668 0.125 1.01033 + N0 0.471519 0.729692 0.495195 N1 0.676612 0.31353 0.666255 N2 0.548733 0.289562 0.784249 + txt003 +STRI + V0 -2.22668 0.125 1.01033 V1 -2.22972 0.2 0.963227 V2 -2.43347 0.2 1.12572 + N0 0.548733 0.289562 0.784249 N1 0.396971 0.700023 0.593618 N2 0.471519 0.729692 0.495195 + txt003 +STRI + V0 -2.41221 0.125 1.16687 V1 -2.4037 0 1.18333 V2 -2.22546 0 1.02917 + N0 0.676612 0.31353 0.666255 N1 0.722374 1.2247e-15 0.691503 N2 0.580973 1.1041e-15 0.813923 + txt003 +STRI + V0 -2.22546 0 1.02917 V1 -2.22668 0.125 1.01033 V2 -2.41221 0.125 1.16687 + N0 0.580973 1.1041e-15 0.813923 N1 0.548733 0.289562 0.784249 N2 0.676612 0.31353 0.666255 + txt003 +STRI + V0 -2.2419 0 0.774826 V1 -2.24068 0.125 0.793666 V2 -1.90741 0.125 0.622222 + N0 -0.504836 0 -0.863216 N1 -0.485318 0.301052 -0.820874 N2 -0.390503 0.30734 -0.867784 + txt003 +STRI + V0 -1.90741 0.125 0.622222 V1 -1.9 0 0.6 V2 -2.2419 0 0.774826 + N0 -0.390503 0.30734 -0.867784 N1 -0.410365 0 -0.911922 N2 -0.504836 0 -0.863216 + txt003 +STRI + V0 -2.24068 0.125 0.793666 V1 -2.23764 0.2 0.840766 V2 -1.92593 0.2 0.677778 + N0 -0.485318 0.301052 -0.820874 N1 -0.367048 0.708353 -0.60292 N2 -0.285351 0.718662 -0.634113 + txt003 +STRI + V0 -1.92593 0.2 0.677778 V1 -1.90741 0.125 0.622222 V2 -2.24068 0.125 0.793666 + N0 -0.285351 0.718662 -0.634113 N1 -0.390503 0.30734 -0.867784 N2 -0.485318 0.301052 -0.820874 + txt003 +STRI + V0 -2.23764 0.2 0.840766 V1 -2.23368 0.225 0.901997 V2 -1.95 0.225 0.75 + N0 -0.367048 0.708353 -0.60292 N1 5.4409e-17 1 -3.51585e-18 N2 7.83687e-17 1 2.61229e-17 + txt003 +STRI + V0 -1.95 0.225 0.75 V1 -1.92593 0.2 0.677778 V2 -2.23764 0.2 0.840766 + N0 7.83687e-17 1 2.61229e-17 N1 -0.285351 0.718662 -0.634113 N2 -0.367048 0.708353 -0.60292 + txt003 +STRI + V0 -2.23368 0.225 0.901997 V1 -2.22972 0.2 0.963227 V2 -1.97407 0.2 0.822222 + N0 5.4409e-17 1 -3.51585e-18 N1 0.396971 0.700023 0.593618 N2 0.285351 0.718662 0.634113 + txt003 +STRI + V0 -1.97407 0.2 0.822222 V1 -1.95 0.225 0.75 V2 -2.23368 0.225 0.901997 + N0 0.285351 0.718662 0.634113 N1 7.83687e-17 1 2.61229e-17 N2 5.4409e-17 1 -3.51585e-18 + txt003 +STRI + V0 -2.22972 0.2 0.963227 V1 -2.22668 0.125 1.01033 V2 -1.99259 0.125 0.877778 + N0 0.396971 0.700023 0.593618 N1 0.548733 0.289562 0.784249 N2 0.390503 0.30734 0.867784 + txt003 +STRI + V0 -1.99259 0.125 0.877778 V1 -1.97407 0.2 0.822222 V2 -2.22972 0.2 0.963227 + N0 0.390503 0.30734 0.867784 N1 0.285351 0.718662 0.634113 N2 0.396971 0.700023 0.593618 + txt003 +STRI + V0 -2.22668 0.125 1.01033 V1 -2.22546 0 1.02917 V2 -2 0 0.9 + N0 0.548733 0.289562 0.784249 N1 0.580973 1.1041e-15 0.813923 N2 0.410365 1.30492e-15 0.911922 + txt003 +STRI + V0 -2 0 0.9 V1 -1.99259 0.125 0.877778 V2 -2.22668 0.125 1.01033 + N0 0.410365 1.30492e-15 0.911922 N1 0.390503 0.30734 0.867784 N2 0.548733 0.289562 0.784249 + txt003 +STRI + V0 1.7 0 1.425 V1 1.7 -0.275 1.36389 V2 2.07238 -0.262346 1.42521 + N0 -0 0 1 N1 -0.0157732 -0.461877 0.886804 N2 -0.291732 -0.426807 0.855995 + txt003 +STRI + V0 2.07238 -0.262346 1.42521 V1 2.0588 0 1.47639 V2 1.7 0 1.425 + N0 -0.291732 -0.426807 0.855995 N1 -0.333935 0 0.942596 N2 -0 0 1 + txt003 +STRI + V0 1.7 -0.275 1.36389 V1 1.7 -0.44 1.21111 V2 2.10633 -0.419753 1.29725 + N0 -0.0157732 -0.461877 0.886804 N1 -0.0291362 -0.857129 0.514277 N2 -0.135104 -0.834377 0.534381 + txt003 +STRI + V0 2.10633 -0.419753 1.29725 V1 2.07238 -0.262346 1.42521 V2 1.7 -0.275 1.36389 + N0 -0.135104 -0.834377 0.534381 N1 -0.291732 -0.426807 0.855995 N2 -0.0157732 -0.461877 0.886804 + txt003 +STRI + V0 1.7 -0.44 1.21111 V1 1.7 -0.495 1.0125 V2 2.15046 -0.472222 1.1309 + N0 -0.0291362 -0.857129 0.514277 N1 0 -1 -0 N2 0.110195 -0.99348 0.0292376 + txt003 +STRI + V0 2.15046 -0.472222 1.1309 V1 2.10633 -0.419753 1.29725 V2 1.7 -0.44 1.21111 + N0 0.110195 -0.99348 0.0292376 N1 -0.135104 -0.834377 0.534381 N2 -0.0291362 -0.857129 0.514277 + txt003 +STRI + V0 1.7 -0.495 1.0125 V1 1.7 -0.44 0.813889 V2 2.1946 -0.419753 0.964558 + N0 0 -1 -0 N1 0.0673462 -0.855546 -0.513328 N2 0.348602 -0.814337 -0.464038 + txt003 +STRI + V0 2.1946 -0.419753 0.964558 V1 2.15046 -0.472222 1.1309 V2 1.7 -0.495 1.0125 + N0 0.348602 -0.814337 -0.464038 N1 0.110195 -0.99348 0.0292376 N2 0 -1 -0 + txt003 +STRI + V0 1.7 -0.44 0.813889 V1 1.7 -0.275 0.661111 V2 2.22855 -0.262346 0.8366 + N0 0.0673462 -0.855546 -0.513328 N1 0.134339 -0.457747 -0.878875 N2 0.492146 -0.41068 -0.767551 + txt003 +STRI + V0 2.22855 -0.262346 0.8366 V1 2.1946 -0.419753 0.964558 V2 1.7 -0.44 0.813889 + N0 0.492146 -0.41068 -0.767551 N1 0.348602 -0.814337 -0.464038 N2 0.0673462 -0.855546 -0.513328 + txt003 +STRI + V0 1.7 -0.275 0.661111 V1 1.7 0 0.6 V2 2.24213 0 0.785417 + N0 0.134339 -0.457747 -0.878875 N1 0.158678 9.39168e-16 -0.98733 N2 0.528678 6.47717e-16 -0.848822 + txt003 +STRI + V0 2.24213 0 0.785417 V1 2.22855 -0.262346 0.8366 V2 1.7 -0.275 0.661111 + N0 0.528678 6.47717e-16 -0.848822 N1 0.492146 -0.41068 -0.767551 N2 0.134339 -0.457747 -0.878875 + txt003 +STRI + V0 2.0588 0 1.47639 V1 2.07238 -0.262346 1.42521 V2 2.29012 -0.23071 1.57202 + N0 -0.333935 0 0.942596 N1 -0.291732 -0.426807 0.855995 N2 -0.64585 -0.390219 0.656206 + txt003 +STRI + V0 2.29012 -0.23071 1.57202 V1 2.27037 0 1.61111 V2 2.0588 0 1.47639 + N0 -0.64585 -0.390219 0.656206 N1 -0.731055 0 0.682318 N2 -0.333935 0 0.942596 + txt003 +STRI + V0 2.07238 -0.262346 1.42521 V1 2.10633 -0.419753 1.29725 V2 2.33951 -0.369136 1.47428 + N0 -0.291732 -0.426807 0.855995 N1 -0.135104 -0.834377 0.534381 N2 -0.312511 -0.816863 0.484842 + txt003 +STRI + V0 2.33951 -0.369136 1.47428 V1 2.29012 -0.23071 1.57202 V2 2.07238 -0.262346 1.42521 + N0 -0.312511 -0.816863 0.484842 N1 -0.64585 -0.390219 0.656206 N2 -0.291732 -0.426807 0.855995 + txt003 +STRI + V0 2.10633 -0.419753 1.29725 V1 2.15046 -0.472222 1.1309 V2 2.4037 -0.415278 1.34722 + N0 -0.135104 -0.834377 0.534381 N1 0.110195 -0.99348 0.0292376 N2 0.215359 -0.970454 0.108813 + txt003 +STRI + V0 2.4037 -0.415278 1.34722 V1 2.33951 -0.369136 1.47428 V2 2.10633 -0.419753 1.29725 + N0 0.215359 -0.970454 0.108813 N1 -0.312511 -0.816863 0.484842 N2 -0.135104 -0.834377 0.534381 + txt003 +STRI + V0 2.15046 -0.472222 1.1309 V1 2.1946 -0.419753 0.964558 V2 2.4679 -0.369136 1.22016 + N0 0.110195 -0.99348 0.0292376 N1 0.348602 -0.814337 -0.464038 N2 0.627607 -0.733748 -0.260237 + txt003 +STRI + V0 2.4679 -0.369136 1.22016 V1 2.4037 -0.415278 1.34722 V2 2.15046 -0.472222 1.1309 + N0 0.627607 -0.733748 -0.260237 N1 0.215359 -0.970454 0.108813 N2 0.110195 -0.99348 0.0292376 + txt003 +STRI + V0 2.1946 -0.419753 0.964558 V1 2.22855 -0.262346 0.8366 V2 2.51728 -0.23071 1.12243 + N0 0.348602 -0.814337 -0.464038 N1 0.492146 -0.41068 -0.767551 N2 0.813963 -0.348056 -0.465103 + txt003 +STRI + V0 2.51728 -0.23071 1.12243 V1 2.4679 -0.369136 1.22016 V2 2.1946 -0.419753 0.964558 + N0 0.813963 -0.348056 -0.465103 N1 0.627607 -0.733748 -0.260237 N2 0.348602 -0.814337 -0.464038 + txt003 +STRI + V0 2.22855 -0.262346 0.8366 V1 2.24213 0 0.785417 V2 2.53704 0 1.08333 + N0 0.492146 -0.41068 -0.767551 N1 0.528678 6.47717e-16 -0.848822 N2 0.854063 9.88017e-16 -0.52017 + txt003 +STRI + V0 2.53704 0 1.08333 V1 2.51728 -0.23071 1.12243 V2 2.22855 -0.262346 0.8366 + N0 0.854063 9.88017e-16 -0.52017 N1 0.813963 -0.348056 -0.465103 N2 0.492146 -0.41068 -0.767551 + txt003 +STRI + V0 2.27037 0 1.61111 V1 2.29012 -0.23071 1.57202 V2 2.40972 -0.189583 1.77361 + N0 -0.731055 0 0.682318 N1 -0.64585 -0.390219 0.656206 N2 -0.835237 -0.363942 0.412221 + txt003 +STRI + V0 2.40972 -0.189583 1.77361 V1 2.3875 0 1.8 V2 2.27037 0 1.61111 + N0 -0.835237 -0.363942 0.412221 N1 -0.920582 0 0.39055 N2 -0.731055 0 0.682318 + txt003 +STRI + V0 2.29012 -0.23071 1.57202 V1 2.33951 -0.369136 1.47428 V2 2.46528 -0.303333 1.70764 + N0 -0.64585 -0.390219 0.656206 N1 -0.312511 -0.816863 0.484842 N2 -0.451323 -0.803033 0.38916 + txt003 +STRI + V0 2.46528 -0.303333 1.70764 V1 2.40972 -0.189583 1.77361 V2 2.29012 -0.23071 1.57202 + N0 -0.451323 -0.803033 0.38916 N1 -0.835237 -0.363942 0.412221 N2 -0.64585 -0.390219 0.656206 + txt003 +STRI + V0 2.33951 -0.369136 1.47428 V1 2.4037 -0.415278 1.34722 V2 2.5375 -0.34125 1.62187 + N0 -0.312511 -0.816863 0.484842 N1 0.215359 -0.970454 0.108813 N2 0.214084 -0.960035 0.180281 + txt003 +STRI + V0 2.5375 -0.34125 1.62187 V1 2.46528 -0.303333 1.70764 V2 2.33951 -0.369136 1.47428 + N0 0.214084 -0.960035 0.180281 N1 -0.451323 -0.803033 0.38916 N2 -0.312511 -0.816863 0.484842 + txt003 +STRI + V0 2.4037 -0.415278 1.34722 V1 2.4679 -0.369136 1.22016 V2 2.60972 -0.303333 1.53611 + N0 0.215359 -0.970454 0.108813 N1 0.627607 -0.733748 -0.260237 N2 0.705424 -0.704198 -0.0805066 + txt003 +STRI + V0 2.60972 -0.303333 1.53611 V1 2.5375 -0.34125 1.62187 V2 2.4037 -0.415278 1.34722 + N0 0.705424 -0.704198 -0.0805066 N1 0.214084 -0.960035 0.180281 N2 0.215359 -0.970454 0.108813 + txt003 +STRI + V0 2.4679 -0.369136 1.22016 V1 2.51728 -0.23071 1.12243 V2 2.66528 -0.189583 1.47014 + N0 0.627607 -0.733748 -0.260237 N1 0.813963 -0.348056 -0.465103 N2 0.913262 -0.329186 -0.239977 + txt003 +STRI + V0 2.66528 -0.189583 1.47014 V1 2.60972 -0.303333 1.53611 V2 2.4679 -0.369136 1.22016 + N0 0.913262 -0.329186 -0.239977 N1 0.705424 -0.704198 -0.0805066 N2 0.627607 -0.733748 -0.260237 + txt003 +STRI + V0 2.51728 -0.23071 1.12243 V1 2.53704 0 1.08333 V2 2.6875 0 1.44375 + N0 0.813963 -0.348056 -0.465103 N1 0.854063 9.88017e-16 -0.52017 N2 0.957826 1.83855e-15 -0.287348 + txt003 +STRI + V0 2.6875 0 1.44375 V1 2.66528 -0.189583 1.47014 V2 2.51728 -0.23071 1.12243 + N0 0.957826 1.83855e-15 -0.287348 N1 0.913262 -0.329186 -0.239977 N2 0.813963 -0.348056 -0.465103 + txt003 +STRI + V0 2.3875 0 1.8 V1 2.40972 -0.189583 1.77361 V2 2.48765 -0.148457 1.99928 + N0 -0.920582 0 0.39055 N1 -0.835237 -0.363942 0.412221 N2 -0.842821 -0.409176 0.34961 + txt003 +STRI + V0 2.48765 -0.148457 1.99928 V1 2.46296 0 2.01389 V2 2.3875 0 1.8 + N0 -0.842821 -0.409176 0.34961 N1 -0.948683 0 0.316228 N2 -0.920582 0 0.39055 + txt003 +STRI + V0 2.40972 -0.189583 1.77361 V1 2.46528 -0.303333 1.70764 V2 2.54938 -0.237531 1.96276 + N0 -0.835237 -0.363942 0.412221 N1 -0.451323 -0.803033 0.38916 N2 -0.452673 -0.821162 0.347535 + txt003 +STRI + V0 2.54938 -0.237531 1.96276 V1 2.48765 -0.148457 1.99928 V2 2.40972 -0.189583 1.77361 + N0 -0.452673 -0.821162 0.347535 N1 -0.842821 -0.409176 0.34961 N2 -0.835237 -0.363942 0.412221 + txt003 +STRI + V0 2.46528 -0.303333 1.70764 V1 2.5375 -0.34125 1.62187 V2 2.62963 -0.267222 1.91528 + N0 -0.451323 -0.803033 0.38916 N1 0.214084 -0.960035 0.180281 N2 0.113546 -0.974822 0.191909 + txt003 +STRI + V0 2.62963 -0.267222 1.91528 V1 2.54938 -0.237531 1.96276 V2 2.46528 -0.303333 1.70764 + N0 0.113546 -0.974822 0.191909 N1 -0.452673 -0.821162 0.347535 N2 -0.451323 -0.803033 0.38916 + txt003 +STRI + V0 2.5375 -0.34125 1.62187 V1 2.60972 -0.303333 1.53611 V2 2.70988 -0.237531 1.8678 + N0 0.214084 -0.960035 0.180281 N1 0.705424 -0.704198 -0.0805066 N2 0.60461 -0.794635 -0.0547983 + txt003 +STRI + V0 2.70988 -0.237531 1.8678 V1 2.62963 -0.267222 1.91528 V2 2.5375 -0.34125 1.62187 + N0 0.60461 -0.794635 -0.0547983 N1 0.113546 -0.974822 0.191909 N2 0.214084 -0.960035 0.180281 + txt003 +STRI + V0 2.60972 -0.303333 1.53611 V1 2.66528 -0.189583 1.47014 V2 2.7716 -0.148457 1.83128 + N0 0.705424 -0.704198 -0.0805066 N1 0.913262 -0.329186 -0.239977 N2 0.880144 -0.401503 -0.253261 + txt003 +STRI + V0 2.7716 -0.148457 1.83128 V1 2.70988 -0.237531 1.8678 V2 2.60972 -0.303333 1.53611 + N0 0.880144 -0.401503 -0.253261 N1 0.60461 -0.794635 -0.0547983 N2 0.705424 -0.704198 -0.0805066 + txt003 +STRI + V0 2.66528 -0.189583 1.47014 V1 2.6875 0 1.44375 V2 2.7963 0 1.81667 + N0 0.913262 -0.329186 -0.239977 N1 0.957826 1.83855e-15 -0.287348 N2 0.947588 3.02585e-15 -0.319493 + txt003 +STRI + V0 2.7963 0 1.81667 V1 2.7716 -0.148457 1.83128 V2 2.66528 -0.189583 1.47014 + N0 0.947588 3.02585e-15 -0.319493 N1 0.880144 -0.401503 -0.253261 N2 0.913262 -0.329186 -0.239977 + txt003 +STRI + V0 2.46296 0 2.01389 V1 2.48765 -0.148457 1.99928 V2 2.5804 -0.116821 2.21831 + N0 -0.948683 0 0.316228 N1 -0.842821 -0.409176 0.34961 N2 -0.723795 -0.498863 0.476715 + txt003 +STRI + V0 2.5804 -0.116821 2.21831 V1 2.54954 0 2.22361 V2 2.46296 0 2.01389 + N0 -0.723795 -0.498863 0.476715 N1 -0.874591 0 0.484861 N2 -0.948683 0 0.316228 + txt003 +STRI + V0 2.48765 -0.148457 1.99928 V1 2.54938 -0.237531 1.96276 V2 2.65756 -0.186914 2.20507 + N0 -0.842821 -0.409176 0.34961 N1 -0.452673 -0.821162 0.347535 N2 -0.365378 -0.851743 0.375544 + txt003 +STRI + V0 2.65756 -0.186914 2.20507 V1 2.5804 -0.116821 2.21831 V2 2.48765 -0.148457 1.99928 + N0 -0.365378 -0.851743 0.375544 N1 -0.723795 -0.498863 0.476715 N2 -0.842821 -0.409176 0.34961 + txt003 +STRI + V0 2.54938 -0.237531 1.96276 V1 2.62963 -0.267222 1.91528 V2 2.75787 -0.210278 2.18785 + N0 -0.452673 -0.821162 0.347535 N1 0.113546 -0.974822 0.191909 N2 0.0260102 -0.988113 0.151516 + txt003 +STRI + V0 2.75787 -0.210278 2.18785 V1 2.65756 -0.186914 2.20507 V2 2.54938 -0.237531 1.96276 + N0 0.0260102 -0.988113 0.151516 N1 -0.365378 -0.851743 0.375544 N2 -0.452673 -0.821162 0.347535 + txt003 +STRI + V0 2.62963 -0.267222 1.91528 V1 2.70988 -0.237531 1.8678 V2 2.85818 -0.186914 2.17063 + N0 0.113546 -0.974822 0.191909 N1 0.60461 -0.794635 -0.0547983 N2 0.417243 -0.88974 -0.185122 + txt003 +STRI + V0 2.85818 -0.186914 2.17063 V1 2.75787 -0.210278 2.18785 V2 2.62963 -0.267222 1.91528 + N0 0.417243 -0.88974 -0.185122 N1 0.0260102 -0.988113 0.151516 N2 0.113546 -0.974822 0.191909 + txt003 +STRI + V0 2.70988 -0.237531 1.8678 V1 2.7716 -0.148457 1.83128 V2 2.93534 -0.116821 2.15738 + N0 0.60461 -0.794635 -0.0547983 N1 0.880144 -0.401503 -0.253261 N2 0.70819 -0.492319 -0.506053 + txt003 +STRI + V0 2.93534 -0.116821 2.15738 V1 2.85818 -0.186914 2.17063 V2 2.70988 -0.237531 1.8678 + N0 0.70819 -0.492319 -0.506053 N1 0.417243 -0.88974 -0.185122 N2 0.60461 -0.794635 -0.0547983 + txt003 +STRI + V0 2.7716 -0.148457 1.83128 V1 2.7963 0 1.81667 V2 2.9662 0 2.15208 + N0 0.880144 -0.401503 -0.253261 N1 0.947588 3.02585e-15 -0.319493 N2 0.787582 4.30265e-15 -0.61621 + txt003 +STRI + V0 2.9662 0 2.15208 V1 2.93534 -0.116821 2.15738 V2 2.7716 -0.148457 1.83128 + N0 0.787582 4.30265e-15 -0.61621 N1 0.70819 -0.492319 -0.506053 N2 0.880144 -0.401503 -0.253261 + txt003 +STRI + V0 2.54954 0 2.22361 V1 2.5804 -0.116821 2.21831 V2 2.74444 -0.104167 2.4 + N0 -0.874591 0 0.484861 N1 -0.723795 -0.498863 0.476715 N2 -0.497164 -0.497164 0.711095 + txt003 +STRI + V0 2.74444 -0.104167 2.4 V1 2.7 0 2.4 V2 2.54954 0 2.22361 + N0 -0.497164 -0.497164 0.711095 N1 -0.6 0 0.8 N2 -0.874591 0 0.484861 + txt003 +STRI + V0 2.5804 -0.116821 2.21831 V1 2.65756 -0.186914 2.20507 V2 2.85556 -0.166667 2.4 + N0 -0.723795 -0.498863 0.476715 N1 -0.365378 -0.851743 0.375544 N2 -0.267368 -0.855576 0.443288 + txt003 +STRI + V0 2.85556 -0.166667 2.4 V1 2.74444 -0.104167 2.4 V2 2.5804 -0.116821 2.21831 + N0 -0.267368 -0.855576 0.443288 N1 -0.497164 -0.497164 0.711095 N2 -0.723795 -0.498863 0.476715 + txt003 +STRI + V0 2.65756 -0.186914 2.20507 V1 2.75787 -0.210278 2.18785 V2 3 -0.1875 2.4 + N0 -0.365378 -0.851743 0.375544 N1 0.0260102 -0.988113 0.151516 N2 0 -1 2.19303e-16 + txt003 +STRI + V0 3 -0.1875 2.4 V1 2.85556 -0.166667 2.4 V2 2.65756 -0.186914 2.20507 + N0 0 -1 2.19303e-16 N1 -0.267368 -0.855576 0.443288 N2 -0.365378 -0.851743 0.375544 + txt003 +STRI + V0 2.75787 -0.210278 2.18785 V1 2.85818 -0.186914 2.17063 V2 3.14444 -0.166667 2.4 + N0 0.0260102 -0.988113 0.151516 N1 0.417243 -0.88974 -0.185122 N2 0.250514 -0.801644 -0.54278 + txt003 +STRI + V0 3.14444 -0.166667 2.4 V1 3 -0.1875 2.4 V2 2.75787 -0.210278 2.18785 + N0 0.250514 -0.801644 -0.54278 N1 0 -1 2.19303e-16 N2 0.0260102 -0.988113 0.151516 + txt003 +STRI + V0 2.85818 -0.186914 2.17063 V1 2.93534 -0.116821 2.15738 V2 3.25556 -0.104167 2.4 + N0 0.417243 -0.88974 -0.185122 N1 0.70819 -0.492319 -0.506053 N2 0.366221 -0.366221 -0.855433 + txt003 +STRI + V0 3.25556 -0.104167 2.4 V1 3.14444 -0.166667 2.4 V2 2.85818 -0.186914 2.17063 + N0 0.366221 -0.366221 -0.855433 N1 0.250514 -0.801644 -0.54278 N2 0.417243 -0.88974 -0.185122 + txt003 +STRI + V0 2.93534 -0.116821 2.15738 V1 2.9662 0 2.15208 V2 3.3 0 2.4 + N0 0.70819 -0.492319 -0.506053 N1 0.787582 4.30265e-15 -0.61621 N2 0.384615 6.46776e-15 -0.923077 + txt003 +STRI + V0 3.3 0 2.4 V1 3.25556 -0.104167 2.4 V2 2.93534 -0.116821 2.15738 + N0 0.384615 6.46776e-15 -0.923077 N1 0.366221 -0.366221 -0.855433 N2 0.70819 -0.492319 -0.506053 + txt003 +STRI + V0 1.7 0 0.6 V1 1.7 0.275 0.661111 V2 2.22855 0.262346 0.8366 + N0 0.158678 0 -0.98733 N1 0.134339 0.457747 -0.878875 N2 0.492146 0.41068 -0.767551 + txt003 +STRI + V0 2.22855 0.262346 0.8366 V1 2.24213 0 0.785417 V2 1.7 0 0.6 + N0 0.492146 0.41068 -0.767551 N1 0.528678 0 -0.848822 N2 0.158678 0 -0.98733 + txt003 +STRI + V0 1.7 0.275 0.661111 V1 1.7 0.44 0.813889 V2 2.1946 0.419753 0.964558 + N0 0.134339 0.457747 -0.878875 N1 0.0673462 0.855546 -0.513328 N2 0.348602 0.814337 -0.464038 + txt003 +STRI + V0 2.1946 0.419753 0.964558 V1 2.22855 0.262346 0.8366 V2 1.7 0.275 0.661111 + N0 0.348602 0.814337 -0.464038 N1 0.492146 0.41068 -0.767551 N2 0.134339 0.457747 -0.878875 + txt003 +STRI + V0 1.7 0.44 0.813889 V1 1.7 0.495 1.0125 V2 2.15046 0.472222 1.1309 + N0 0.0673462 0.855546 -0.513328 N1 0 1 -0 N2 0.110195 0.99348 0.0292376 + txt003 +STRI + V0 2.15046 0.472222 1.1309 V1 2.1946 0.419753 0.964558 V2 1.7 0.44 0.813889 + N0 0.110195 0.99348 0.0292376 N1 0.348602 0.814337 -0.464038 N2 0.0673462 0.855546 -0.513328 + txt003 +STRI + V0 1.7 0.495 1.0125 V1 1.7 0.44 1.21111 V2 2.10633 0.419753 1.29725 + N0 0 1 -0 N1 -0.0291362 0.857129 0.514277 N2 -0.135104 0.834377 0.534381 + txt003 +STRI + V0 2.10633 0.419753 1.29725 V1 2.15046 0.472222 1.1309 V2 1.7 0.495 1.0125 + N0 -0.135104 0.834377 0.534381 N1 0.110195 0.99348 0.0292376 N2 0 1 -0 + txt003 +STRI + V0 1.7 0.44 1.21111 V1 1.7 0.275 1.36389 V2 2.07238 0.262346 1.42521 + N0 -0.0291362 0.857129 0.514277 N1 -0.0157732 0.461877 0.886804 N2 -0.291732 0.426807 0.855995 + txt003 +STRI + V0 2.07238 0.262346 1.42521 V1 2.10633 0.419753 1.29725 V2 1.7 0.44 1.21111 + N0 -0.291732 0.426807 0.855995 N1 -0.135104 0.834377 0.534381 N2 -0.0291362 0.857129 0.514277 + txt003 +STRI + V0 1.7 0.275 1.36389 V1 1.7 0 1.425 V2 2.0588 0 1.47639 + N0 -0.0157732 0.461877 0.886804 N1 0 -4.48575e-16 1 N2 -0.333935 -3.25455e-16 0.942596 + txt003 +STRI + V0 2.0588 0 1.47639 V1 2.07238 0.262346 1.42521 V2 1.7 0.275 1.36389 + N0 -0.333935 -3.25455e-16 0.942596 N1 -0.291732 0.426807 0.855995 N2 -0.0157732 0.461877 0.886804 + txt003 +STRI + V0 2.24213 0 0.785417 V1 2.22855 0.262346 0.8366 V2 2.51728 0.23071 1.12243 + N0 0.528678 0 -0.848822 N1 0.492146 0.41068 -0.767551 N2 0.813963 0.348056 -0.465103 + txt003 +STRI + V0 2.51728 0.23071 1.12243 V1 2.53704 0 1.08333 V2 2.24213 0 0.785417 + N0 0.813963 0.348056 -0.465103 N1 0.854063 0 -0.52017 N2 0.528678 0 -0.848822 + txt003 +STRI + V0 2.22855 0.262346 0.8366 V1 2.1946 0.419753 0.964558 V2 2.4679 0.369136 1.22016 + N0 0.492146 0.41068 -0.767551 N1 0.348602 0.814337 -0.464038 N2 0.627607 0.733748 -0.260237 + txt003 +STRI + V0 2.4679 0.369136 1.22016 V1 2.51728 0.23071 1.12243 V2 2.22855 0.262346 0.8366 + N0 0.627607 0.733748 -0.260237 N1 0.813963 0.348056 -0.465103 N2 0.492146 0.41068 -0.767551 + txt003 +STRI + V0 2.1946 0.419753 0.964558 V1 2.15046 0.472222 1.1309 V2 2.4037 0.415278 1.34722 + N0 0.348602 0.814337 -0.464038 N1 0.110195 0.99348 0.0292376 N2 0.215359 0.970454 0.108813 + txt003 +STRI + V0 2.4037 0.415278 1.34722 V1 2.4679 0.369136 1.22016 V2 2.1946 0.419753 0.964558 + N0 0.215359 0.970454 0.108813 N1 0.627607 0.733748 -0.260237 N2 0.348602 0.814337 -0.464038 + txt003 +STRI + V0 2.15046 0.472222 1.1309 V1 2.10633 0.419753 1.29725 V2 2.33951 0.369136 1.47428 + N0 0.110195 0.99348 0.0292376 N1 -0.135104 0.834377 0.534381 N2 -0.312511 0.816863 0.484842 + txt003 +STRI + V0 2.33951 0.369136 1.47428 V1 2.4037 0.415278 1.34722 V2 2.15046 0.472222 1.1309 + N0 -0.312511 0.816863 0.484842 N1 0.215359 0.970454 0.108813 N2 0.110195 0.99348 0.0292376 + txt003 +STRI + V0 2.10633 0.419753 1.29725 V1 2.07238 0.262346 1.42521 V2 2.29012 0.23071 1.57202 + N0 -0.135104 0.834377 0.534381 N1 -0.291732 0.426807 0.855995 N2 -0.64585 0.390219 0.656206 + txt003 +STRI + V0 2.29012 0.23071 1.57202 V1 2.33951 0.369136 1.47428 V2 2.10633 0.419753 1.29725 + N0 -0.64585 0.390219 0.656206 N1 -0.312511 0.816863 0.484842 N2 -0.135104 0.834377 0.534381 + txt003 +STRI + V0 2.07238 0.262346 1.42521 V1 2.0588 0 1.47639 V2 2.27037 0 1.61111 + N0 -0.291732 0.426807 0.855995 N1 -0.333935 -3.25455e-16 0.942596 N2 -0.731055 -1.69385e-16 0.682318 + txt003 +STRI + V0 2.27037 0 1.61111 V1 2.29012 0.23071 1.57202 V2 2.07238 0.262346 1.42521 + N0 -0.731055 -1.69385e-16 0.682318 N1 -0.64585 0.390219 0.656206 N2 -0.291732 0.426807 0.855995 + txt003 +STRI + V0 2.53704 0 1.08333 V1 2.51728 0.23071 1.12243 V2 2.66528 0.189583 1.47014 + N0 0.854063 0 -0.52017 N1 0.813963 0.348056 -0.465103 N2 0.913262 0.329186 -0.239977 + txt003 +STRI + V0 2.66528 0.189583 1.47014 V1 2.6875 0 1.44375 V2 2.53704 0 1.08333 + N0 0.913262 0.329186 -0.239977 N1 0.957826 0 -0.287348 N2 0.854063 0 -0.52017 + txt003 +STRI + V0 2.51728 0.23071 1.12243 V1 2.4679 0.369136 1.22016 V2 2.60972 0.303333 1.53611 + N0 0.813963 0.348056 -0.465103 N1 0.627607 0.733748 -0.260237 N2 0.705424 0.704198 -0.0805066 + txt003 +STRI + V0 2.60972 0.303333 1.53611 V1 2.66528 0.189583 1.47014 V2 2.51728 0.23071 1.12243 + N0 0.705424 0.704198 -0.0805066 N1 0.913262 0.329186 -0.239977 N2 0.813963 0.348056 -0.465103 + txt003 +STRI + V0 2.4679 0.369136 1.22016 V1 2.4037 0.415278 1.34722 V2 2.5375 0.34125 1.62188 + N0 0.627607 0.733748 -0.260237 N1 0.215359 0.970454 0.108813 N2 0.214084 0.960035 0.180281 + txt003 +STRI + V0 2.5375 0.34125 1.62188 V1 2.60972 0.303333 1.53611 V2 2.4679 0.369136 1.22016 + N0 0.214084 0.960035 0.180281 N1 0.705424 0.704198 -0.0805066 N2 0.627607 0.733748 -0.260237 + txt003 +STRI + V0 2.4037 0.415278 1.34722 V1 2.33951 0.369136 1.47428 V2 2.46528 0.303333 1.70764 + N0 0.215359 0.970454 0.108813 N1 -0.312511 0.816863 0.484842 N2 -0.451323 0.803033 0.38916 + txt003 +STRI + V0 2.46528 0.303333 1.70764 V1 2.5375 0.34125 1.62188 V2 2.4037 0.415278 1.34722 + N0 -0.451323 0.803033 0.38916 N1 0.214084 0.960035 0.180281 N2 0.215359 0.970454 0.108813 + txt003 +STRI + V0 2.33951 0.369136 1.47428 V1 2.29012 0.23071 1.57202 V2 2.40972 0.189583 1.77361 + N0 -0.312511 0.816863 0.484842 N1 -0.64585 0.390219 0.656206 N2 -0.835237 0.363942 0.412221 + txt003 +STRI + V0 2.40972 0.189583 1.77361 V1 2.46528 0.303333 1.70764 V2 2.33951 0.369136 1.47428 + N0 -0.835237 0.363942 0.412221 N1 -0.451323 0.803033 0.38916 N2 -0.312511 0.816863 0.484842 + txt003 +STRI + V0 2.29012 0.23071 1.57202 V1 2.27037 0 1.61111 V2 2.3875 0 1.8 + N0 -0.64585 0.390219 0.656206 N1 -0.731055 -1.69385e-16 0.682318 N2 -0.920582 -2.76813e-16 0.39055 + txt003 +STRI + V0 2.3875 0 1.8 V1 2.40972 0.189583 1.77361 V2 2.29012 0.23071 1.57202 + N0 -0.920582 -2.76813e-16 0.39055 N1 -0.835237 0.363942 0.412221 N2 -0.64585 0.390219 0.656206 + txt003 +STRI + V0 2.6875 0 1.44375 V1 2.66528 0.189583 1.47014 V2 2.7716 0.148457 1.83128 + N0 0.957826 0 -0.287348 N1 0.913262 0.329186 -0.239977 N2 0.880144 0.401503 -0.253261 + txt003 +STRI + V0 2.7716 0.148457 1.83128 V1 2.7963 0 1.81667 V2 2.6875 0 1.44375 + N0 0.880144 0.401503 -0.253261 N1 0.947588 0 -0.319493 N2 0.957826 0 -0.287348 + txt003 +STRI + V0 2.66528 0.189583 1.47014 V1 2.60972 0.303333 1.53611 V2 2.70988 0.237531 1.8678 + N0 0.913262 0.329186 -0.239977 N1 0.705424 0.704198 -0.0805066 N2 0.60461 0.794635 -0.0547983 + txt003 +STRI + V0 2.70988 0.237531 1.8678 V1 2.7716 0.148457 1.83128 V2 2.66528 0.189583 1.47014 + N0 0.60461 0.794635 -0.0547983 N1 0.880144 0.401503 -0.253261 N2 0.913262 0.329186 -0.239977 + txt003 +STRI + V0 2.60972 0.303333 1.53611 V1 2.5375 0.34125 1.62188 V2 2.62963 0.267222 1.91528 + N0 0.705424 0.704198 -0.0805066 N1 0.214084 0.960035 0.180281 N2 0.113546 0.974822 0.191909 + txt003 +STRI + V0 2.62963 0.267222 1.91528 V1 2.70988 0.237531 1.8678 V2 2.60972 0.303333 1.53611 + N0 0.113546 0.974822 0.191909 N1 0.60461 0.794635 -0.0547983 N2 0.705424 0.704198 -0.0805066 + txt003 +STRI + V0 2.5375 0.34125 1.62188 V1 2.46528 0.303333 1.70764 V2 2.54938 0.237531 1.96276 + N0 0.214084 0.960035 0.180281 N1 -0.451323 0.803033 0.38916 N2 -0.452673 0.821162 0.347535 + txt003 +STRI + V0 2.54938 0.237531 1.96276 V1 2.62963 0.267222 1.91528 V2 2.5375 0.34125 1.62188 + N0 -0.452673 0.821162 0.347535 N1 0.113546 0.974822 0.191909 N2 0.214084 0.960035 0.180281 + txt003 +STRI + V0 2.46528 0.303333 1.70764 V1 2.40972 0.189583 1.77361 V2 2.48765 0.148457 1.99928 + N0 -0.451323 0.803033 0.38916 N1 -0.835237 0.363942 0.412221 N2 -0.842821 0.409176 0.34961 + txt003 +STRI + V0 2.48765 0.148457 1.99928 V1 2.54938 0.237531 1.96276 V2 2.46528 0.303333 1.70764 + N0 -0.842821 0.409176 0.34961 N1 -0.452673 0.821162 0.347535 N2 -0.451323 0.803033 0.38916 + txt003 +STRI + V0 2.40972 0.189583 1.77361 V1 2.3875 0 1.8 V2 2.46296 0 2.01389 + N0 -0.835237 0.363942 0.412221 N1 -0.920582 -2.76813e-16 0.39055 N2 -0.948683 -4.59839e-16 0.316228 + txt003 +STRI + V0 2.46296 0 2.01389 V1 2.48765 0.148457 1.99928 V2 2.40972 0.189583 1.77361 + N0 -0.948683 -4.59839e-16 0.316228 N1 -0.842821 0.409176 0.34961 N2 -0.835237 0.363942 0.412221 + txt003 +STRI + V0 2.7963 0 1.81667 V1 2.7716 0.148457 1.83128 V2 2.93534 0.116821 2.15738 + N0 0.947588 0 -0.319493 N1 0.880144 0.401503 -0.253261 N2 0.70819 0.492319 -0.506053 + txt003 +STRI + V0 2.93534 0.116821 2.15738 V1 2.9662 0 2.15208 V2 2.7963 0 1.81667 + N0 0.70819 0.492319 -0.506053 N1 0.787582 0 -0.61621 N2 0.947588 0 -0.319493 + txt003 +STRI + V0 2.7716 0.148457 1.83128 V1 2.70988 0.237531 1.8678 V2 2.85818 0.186914 2.17063 + N0 0.880144 0.401503 -0.253261 N1 0.60461 0.794635 -0.0547983 N2 0.417243 0.88974 -0.185122 + txt003 +STRI + V0 2.85818 0.186914 2.17063 V1 2.93534 0.116821 2.15738 V2 2.7716 0.148457 1.83128 + N0 0.417243 0.88974 -0.185122 N1 0.70819 0.492319 -0.506053 N2 0.880144 0.401503 -0.253261 + txt003 +STRI + V0 2.70988 0.237531 1.8678 V1 2.62963 0.267222 1.91528 V2 2.75787 0.210278 2.18785 + N0 0.60461 0.794635 -0.0547983 N1 0.113546 0.974822 0.191909 N2 0.0260102 0.988113 0.151516 + txt003 +STRI + V0 2.75787 0.210278 2.18785 V1 2.85818 0.186914 2.17063 V2 2.70988 0.237531 1.8678 + N0 0.0260102 0.988113 0.151516 N1 0.417243 0.88974 -0.185122 N2 0.60461 0.794635 -0.0547983 + txt003 +STRI + V0 2.62963 0.267222 1.91528 V1 2.54938 0.237531 1.96276 V2 2.65756 0.186914 2.20507 + N0 0.113546 0.974822 0.191909 N1 -0.452673 0.821162 0.347535 N2 -0.365378 0.851743 0.375544 + txt003 +STRI + V0 2.65756 0.186914 2.20507 V1 2.75787 0.210278 2.18785 V2 2.62963 0.267222 1.91528 + N0 -0.365378 0.851743 0.375544 N1 0.0260102 0.988113 0.151516 N2 0.113546 0.974822 0.191909 + txt003 +STRI + V0 2.54938 0.237531 1.96276 V1 2.48765 0.148457 1.99928 V2 2.5804 0.116821 2.21831 + N0 -0.452673 0.821162 0.347535 N1 -0.842821 0.409176 0.34961 N2 -0.723795 0.498863 0.476715 + txt003 +STRI + V0 2.5804 0.116821 2.21831 V1 2.65756 0.186914 2.20507 V2 2.54938 0.237531 1.96276 + N0 -0.723795 0.498863 0.476715 N1 -0.365378 0.851743 0.375544 N2 -0.452673 0.821162 0.347535 + txt003 +STRI + V0 2.48765 0.148457 1.99928 V1 2.46296 0 2.01389 V2 2.54954 0 2.22361 + N0 -0.842821 0.409176 0.34961 N1 -0.948683 -4.59839e-16 0.316228 N2 -0.874591 -1.30753e-15 0.484861 + txt003 +STRI + V0 2.54954 0 2.22361 V1 2.5804 0.116821 2.21831 V2 2.48765 0.148457 1.99928 + N0 -0.874591 -1.30753e-15 0.484861 N1 -0.723795 0.498863 0.476715 N2 -0.842821 0.409176 0.34961 + txt003 +STRI + V0 2.9662 0 2.15208 V1 2.93534 0.116821 2.15738 V2 3.25556 0.104167 2.4 + N0 0.787582 0 -0.61621 N1 0.70819 0.492319 -0.506053 N2 0.366221 0.366221 -0.855433 + txt003 +STRI + V0 3.25556 0.104167 2.4 V1 3.3 0 2.4 V2 2.9662 0 2.15208 + N0 0.366221 0.366221 -0.855433 N1 0.384615 0 -0.923077 N2 0.787582 0 -0.61621 + txt003 +STRI + V0 2.93534 0.116821 2.15738 V1 2.85818 0.186914 2.17063 V2 3.14444 0.166667 2.4 + N0 0.70819 0.492319 -0.506053 N1 0.417243 0.88974 -0.185122 N2 0.250514 0.801644 -0.54278 + txt003 +STRI + V0 3.14444 0.166667 2.4 V1 3.25556 0.104167 2.4 V2 2.93534 0.116821 2.15738 + N0 0.250514 0.801644 -0.54278 N1 0.366221 0.366221 -0.855433 N2 0.70819 0.492319 -0.506053 + txt003 +STRI + V0 2.85818 0.186914 2.17063 V1 2.75787 0.210278 2.18785 V2 3 0.1875 2.4 + N0 0.417243 0.88974 -0.185122 N1 0.0260102 0.988113 0.151516 N2 4.05793e-32 1 2.19303e-16 + txt003 +STRI + V0 3 0.1875 2.4 V1 3.14444 0.166667 2.4 V2 2.85818 0.186914 2.17063 + N0 4.05793e-32 1 2.19303e-16 N1 0.250514 0.801644 -0.54278 N2 0.417243 0.88974 -0.185122 + txt003 +STRI + V0 2.75787 0.210278 2.18785 V1 2.65756 0.186914 2.20507 V2 2.85556 0.166667 2.4 + N0 0.0260102 0.988113 0.151516 N1 -0.365378 0.851743 0.375544 N2 -0.267368 0.855576 0.443288 + txt003 +STRI + V0 2.85556 0.166667 2.4 V1 3 0.1875 2.4 V2 2.75787 0.210278 2.18785 + N0 -0.267368 0.855576 0.443288 N1 4.05793e-32 1 2.19303e-16 N2 0.0260102 0.988113 0.151516 + txt003 +STRI + V0 2.65756 0.186914 2.20507 V1 2.5804 0.116821 2.21831 V2 2.74444 0.104167 2.4 + N0 -0.365378 0.851743 0.375544 N1 -0.723795 0.498863 0.476715 N2 -0.497164 0.497164 0.711095 + txt003 +STRI + V0 2.74444 0.104167 2.4 V1 2.85556 0.166667 2.4 V2 2.65756 0.186914 2.20507 + N0 -0.497164 0.497164 0.711095 N1 -0.267368 0.855576 0.443288 N2 -0.365378 0.851743 0.375544 + txt003 +STRI + V0 2.5804 0.116821 2.21831 V1 2.54954 0 2.22361 V2 2.7 0 2.4 + N0 -0.723795 0.498863 0.476715 N1 -0.874591 -1.30753e-15 0.484861 N2 -0.6 -3.55271e-15 0.8 + txt003 +STRI + V0 2.7 0 2.4 V1 2.74444 0.104167 2.4 V2 2.5804 0.116821 2.21831 + N0 -0.6 -3.55271e-15 0.8 N1 -0.497164 0.497164 0.711095 N2 -0.723795 0.498863 0.476715 + txt003 +STRI + V0 2.7 0 2.4 V1 2.74444 -0.104167 2.4 V2 2.79641 -0.10108 2.43193 + N0 -0.6 0 0.8 N1 -0.497164 -0.497164 0.711095 N2 -0.387052 -0.411886 0.824949 + txt003 +STRI + V0 2.79641 -0.10108 2.43193 V1 2.74907 0 2.43125 V2 2.7 0 2.4 + N0 -0.387052 -0.411886 0.824949 N1 -0.467888 0 0.883788 N2 -0.6 0 0.8 + txt003 +STRI + V0 2.74444 -0.104167 2.4 V1 2.85556 -0.166667 2.4 V2 2.91474 -0.161728 2.43361 + N0 -0.497164 -0.497164 0.711095 N1 -0.267368 -0.855576 0.443288 N2 -0.215548 -0.724209 0.655027 + txt003 +STRI + V0 2.91474 -0.161728 2.43361 V1 2.79641 -0.10108 2.43193 V2 2.74444 -0.104167 2.4 + N0 -0.215548 -0.724209 0.655027 N1 -0.387052 -0.411886 0.824949 N2 -0.497164 -0.497164 0.711095 + txt003 +STRI + V0 2.85556 -0.166667 2.4 V1 3 -0.1875 2.4 V2 3.06858 -0.181944 2.43581 + N0 -0.267368 -0.855576 0.443288 N1 0 -1 0 N2 -0.00489618 -0.939227 0.343261 + txt003 +STRI + V0 3.06858 -0.181944 2.43581 V1 2.91474 -0.161728 2.43361 V2 2.85556 -0.166667 2.4 + N0 -0.00489618 -0.939227 0.343261 N1 -0.215548 -0.724209 0.655027 N2 -0.267368 -0.855576 0.443288 + txt003 +STRI + V0 3 -0.1875 2.4 V1 3.14444 -0.166667 2.4 V2 3.22241 -0.161728 2.438 + N0 0 -1 0 N1 0.250514 -0.801644 -0.54278 N2 0.269127 -0.933284 -0.237808 + txt003 +STRI + V0 3.22241 -0.161728 2.438 V1 3.06858 -0.181944 2.43581 V2 3 -0.1875 2.4 + N0 0.269127 -0.933284 -0.237808 N1 -0.00489618 -0.939227 0.343261 N2 0 -1 0 + txt003 +STRI + V0 3.14444 -0.166667 2.4 V1 3.25556 -0.104167 2.4 V2 3.34075 -0.10108 2.43969 + N0 0.250514 -0.801644 -0.54278 N1 0.366221 -0.366221 -0.855433 N2 0.442187 -0.473386 -0.761824 + txt003 +STRI + V0 3.34075 -0.10108 2.43969 V1 3.22241 -0.161728 2.438 V2 3.14444 -0.166667 2.4 + N0 0.442187 -0.473386 -0.761824 N1 0.269127 -0.933284 -0.237808 N2 0.250514 -0.801644 -0.54278 + txt003 +STRI + V0 3.25556 -0.104167 2.4 V1 3.3 0 2.4 V2 3.38808 0 2.44036 + N0 0.366221 -0.366221 -0.855433 N1 0.384615 -2.55067e-15 -0.923077 N2 0.463425 -2.75328e-15 -0.886136 + txt003 +STRI + V0 3.38808 0 2.44036 V1 3.34075 -0.10108 2.43969 V2 3.25556 -0.104167 2.4 + N0 0.463425 -2.75328e-15 -0.886136 N1 0.442187 -0.473386 -0.761824 N2 0.366221 -0.366221 -0.855433 + txt003 +STRI + V0 2.74907 0 2.43125 V1 2.79641 -0.10108 2.43193 V2 2.83978 -0.0933642 2.45123 + N0 -0.467888 0 0.883788 N1 -0.387052 -0.411886 0.824949 N2 -0.253997 -0.272114 0.928138 + txt003 +STRI + V0 2.83978 -0.0933642 2.45123 V1 2.79259 0 2.45 V2 2.74907 0 2.43125 + N0 -0.253997 -0.272114 0.928138 N1 -0.306009 0 0.952029 N2 -0.467888 0 0.883788 + txt003 +STRI + V0 2.79641 -0.10108 2.43193 V1 2.91474 -0.161728 2.43361 V2 2.95775 -0.149383 2.45432 + N0 -0.387052 -0.411886 0.824949 N1 -0.215548 -0.724209 0.655027 N2 -0.14959 -0.481391 0.863647 + txt003 +STRI + V0 2.95775 -0.149383 2.45432 V1 2.83978 -0.0933642 2.45123 V2 2.79641 -0.10108 2.43193 + N0 -0.14959 -0.481391 0.863647 N1 -0.253997 -0.272114 0.928138 N2 -0.387052 -0.411886 0.824949 + txt003 +STRI + V0 2.91474 -0.161728 2.43361 V1 3.06858 -0.181944 2.43581 V2 3.11111 -0.168056 2.45833 + N0 -0.215548 -0.724209 0.655027 N1 -0.00489618 -0.939227 0.343261 N2 -0.0195232 -0.665415 0.746219 + txt003 +STRI + V0 3.11111 -0.168056 2.45833 V1 2.95775 -0.149383 2.45432 V2 2.91474 -0.161728 2.43361 + N0 -0.0195232 -0.665415 0.746219 N1 -0.14959 -0.481391 0.863647 N2 -0.215548 -0.724209 0.655027 + txt003 +STRI + V0 3.06858 -0.181944 2.43581 V1 3.22241 -0.161728 2.438 V2 3.26447 -0.149383 2.46235 + N0 -0.00489618 -0.939227 0.343261 N1 0.269127 -0.933284 -0.237808 N2 0.218115 -0.87054 0.44112 + txt003 +STRI + V0 3.26447 -0.149383 2.46235 V1 3.11111 -0.168056 2.45833 V2 3.06858 -0.181944 2.43581 + N0 0.218115 -0.87054 0.44112 N1 -0.0195232 -0.665415 0.746219 N2 -0.00489618 -0.939227 0.343261 + txt003 +STRI + V0 3.22241 -0.161728 2.438 V1 3.34075 -0.10108 2.43969 V2 3.38244 -0.0933642 2.46543 + N0 0.269127 -0.933284 -0.237808 N1 0.442187 -0.473386 -0.761824 N2 0.612385 -0.714958 -0.337372 + txt003 +STRI + V0 3.38244 -0.0933642 2.46543 V1 3.26447 -0.149383 2.46235 V2 3.22241 -0.161728 2.438 + N0 0.612385 -0.714958 -0.337372 N1 0.218115 -0.87054 0.44112 N2 0.269127 -0.933284 -0.237808 + txt003 +STRI + V0 3.34075 -0.10108 2.43969 V1 3.38808 0 2.44036 V2 3.42963 0 2.46667 + N0 0.442187 -0.473386 -0.761824 N1 0.463425 -2.75328e-15 -0.886136 N2 0.694136 -3.24605e-15 -0.719844 + txt003 +STRI + V0 3.42963 0 2.46667 V1 3.38244 -0.0933642 2.46543 V2 3.34075 -0.10108 2.43969 + N0 0.694136 -3.24605e-15 -0.719844 N1 0.612385 -0.714958 -0.337372 N2 0.442187 -0.473386 -0.761824 + txt003 +STRI + V0 2.79259 0 2.45 V1 2.83978 -0.0933642 2.45123 V2 2.86968 -0.0833333 2.45781 + N0 -0.306009 0 0.952029 N1 -0.253997 -0.272114 0.928138 N2 -0.0182321 0.0210195 0.999613 + txt003 +STRI + V0 2.86968 -0.0833333 2.45781 V1 2.825 0 2.45625 V2 2.79259 0 2.45 + N0 -0.0182321 0.0210195 0.999613 N1 2.22045e-15 0 1 N2 -0.306009 0 0.952029 + txt003 +STRI + V0 2.83978 -0.0933642 2.45123 V1 2.95775 -0.149383 2.45432 V2 2.98137 -0.133333 2.46172 + N0 -0.253997 -0.272114 0.928138 N1 -0.14959 -0.481391 0.863647 N2 -0.0369301 -0.00796532 0.999286 + txt003 +STRI + V0 2.98137 -0.133333 2.46172 V1 2.86968 -0.0833333 2.45781 V2 2.83978 -0.0933642 2.45123 + N0 -0.0369301 -0.00796532 0.999286 N1 -0.0182321 0.0210195 0.999613 N2 -0.253997 -0.272114 0.928138 + txt003 +STRI + V0 2.95775 -0.149383 2.45432 V1 3.11111 -0.168056 2.45833 V2 3.12656 -0.15 2.4668 + N0 -0.14959 -0.481391 0.863647 N1 -0.0195232 -0.665415 0.746219 N2 -0.0348909 -0.0594438 0.997622 + txt003 +STRI + V0 3.12656 -0.15 2.4668 V1 2.98137 -0.133333 2.46172 V2 2.95775 -0.149383 2.45432 + N0 -0.0348909 -0.0594438 0.997622 N1 -0.0369301 -0.00796532 0.999286 N2 -0.14959 -0.481391 0.863647 + txt003 +STRI + V0 3.11111 -0.168056 2.45833 V1 3.26447 -0.149383 2.46235 V2 3.27176 -0.133333 2.47187 + N0 -0.0195232 -0.665415 0.746219 N1 0.218115 -0.87054 0.44112 N2 -0.00787186 -0.108144 0.994104 + txt003 +STRI + V0 3.27176 -0.133333 2.47187 V1 3.12656 -0.15 2.4668 V2 3.11111 -0.168056 2.45833 + N0 -0.00787186 -0.108144 0.994104 N1 -0.0348909 -0.0594438 0.997622 N2 -0.0195232 -0.665415 0.746219 + txt003 +STRI + V0 3.26447 -0.149383 2.46235 V1 3.38244 -0.0933642 2.46543 V2 3.38345 -0.0833333 2.47578 + N0 0.218115 -0.87054 0.44112 N1 0.612385 -0.714958 -0.337372 N2 0.0539577 -0.111406 0.992309 + txt003 +STRI + V0 3.38345 -0.0833333 2.47578 V1 3.27176 -0.133333 2.47187 V2 3.26447 -0.149383 2.46235 + N0 0.0539577 -0.111406 0.992309 N1 -0.00787186 -0.108144 0.994104 N2 0.218115 -0.87054 0.44112 + txt003 +STRI + V0 3.38244 -0.0933642 2.46543 V1 3.42963 0 2.46667 V2 3.42813 0 2.47734 + N0 0.612385 -0.714958 -0.337372 N1 0.694136 -3.24605e-15 -0.719844 N2 0.106533 1.89241e-15 0.994309 + txt003 +STRI + V0 3.42813 0 2.47734 V1 3.38345 -0.0833333 2.47578 V2 3.38244 -0.0933642 2.46543 + N0 0.106533 1.89241e-15 0.994309 N1 0.0539577 -0.111406 0.992309 N2 0.612385 -0.714958 -0.337372 + txt003 +STRI + V0 2.825 0 2.45625 V1 2.86968 -0.0833333 2.45781 V2 2.88121 -0.0733025 2.45154 + N0 2.22045e-15 0 1 N1 -0.0182321 0.0210195 0.999613 N2 0.507715 0.682832 0.525324 + txt003 +STRI + V0 2.88121 -0.0733025 2.45154 V1 2.84074 0 2.45 V2 2.825 0 2.45625 + N0 0.507715 0.682832 0.525324 N1 0.913812 0 0.406138 N2 2.22045e-15 0 1 + txt003 +STRI + V0 2.86968 -0.0833333 2.45781 V1 2.98137 -0.133333 2.46172 V2 2.98237 -0.117284 2.4554 + N0 -0.0182321 0.0210195 0.999613 N1 -0.0369301 -0.00796532 0.999286 N2 0.148477 0.721529 0.676277 + txt003 +STRI + V0 2.98237 -0.117284 2.4554 V1 2.88121 -0.0733025 2.45154 V2 2.86968 -0.0833333 2.45781 + N0 0.148477 0.721529 0.676277 N1 0.507715 0.682832 0.525324 N2 -0.0182321 0.0210195 0.999613 + txt003 +STRI + V0 2.98137 -0.133333 2.46172 V1 3.12656 -0.15 2.4668 V2 3.11389 -0.131944 2.46042 + N0 -0.0369301 -0.00796532 0.999286 N1 -0.0348909 -0.0594438 0.997622 N2 -0.0300305 0.615625 0.787467 + txt003 +STRI + V0 3.11389 -0.131944 2.46042 V1 2.98237 -0.117284 2.4554 V2 2.98137 -0.133333 2.46172 + N0 -0.0300305 0.615625 0.787467 N1 0.148477 0.721529 0.676277 N2 -0.0369301 -0.00796532 0.999286 + txt003 +STRI + V0 3.12656 -0.15 2.4668 V1 3.27176 -0.133333 2.47187 V2 3.2454 -0.117284 2.46543 + N0 -0.0348909 -0.0594438 0.997622 N1 -0.00787186 -0.108144 0.994104 N2 -0.144371 0.459364 0.876437 + txt003 +STRI + V0 3.2454 -0.117284 2.46543 V1 3.11389 -0.131944 2.46042 V2 3.12656 -0.15 2.4668 + N0 -0.144371 0.459364 0.876437 N1 -0.0300305 0.615625 0.787467 N2 -0.0348909 -0.0594438 0.997622 + txt003 +STRI + V0 3.27176 -0.133333 2.47187 V1 3.38345 -0.0833333 2.47578 V2 3.34657 -0.0733025 2.46929 + N0 -0.00787186 -0.108144 0.994104 N1 0.0539577 -0.111406 0.992309 N2 -0.223743 0.242919 0.943891 + txt003 +STRI + V0 3.34657 -0.0733025 2.46929 V1 3.2454 -0.117284 2.46543 V2 3.27176 -0.133333 2.47187 + N0 -0.223743 0.242919 0.943891 N1 -0.144371 0.459364 0.876437 N2 -0.00787186 -0.108144 0.994104 + txt003 +STRI + V0 3.38345 -0.0833333 2.47578 V1 3.42813 0 2.47734 V2 3.38704 0 2.47083 + N0 0.0539577 -0.111406 0.992309 N1 0.106533 1.89241e-15 0.994309 N2 -0.253109 3.19224e-15 0.967438 + txt003 +STRI + V0 3.38704 0 2.47083 V1 3.34657 -0.0733025 2.46929 V2 3.38345 -0.0833333 2.47578 + N0 -0.253109 3.19224e-15 0.967438 N1 -0.223743 0.242919 0.943891 N2 0.0539577 -0.111406 0.992309 + txt003 +STRI + V0 2.84074 0 2.45 V1 2.88121 -0.0733025 2.45154 V2 2.86949 -0.0655864 2.43231 + N0 0.913812 0 0.406138 N1 0.507715 0.682832 0.525324 N2 0.577416 0.711734 -0.400031 + txt003 +STRI + V0 2.86949 -0.0655864 2.43231 V1 2.83426 0 2.43125 V2 2.84074 0 2.45 + N0 0.577416 0.711734 -0.400031 N1 0.789352 0 -0.613941 N2 0.913812 0 0.406138 + txt003 +STRI + V0 2.88121 -0.0733025 2.45154 V1 2.98237 -0.117284 2.4554 V2 2.95756 -0.104938 2.43496 + N0 0.507715 0.682832 0.525324 N1 0.148477 0.721529 0.676277 N2 0.241288 0.970358 -0.0136399 + txt003 +STRI + V0 2.95756 -0.104938 2.43496 V1 2.86949 -0.0655864 2.43231 V2 2.88121 -0.0733025 2.45154 + N0 0.241288 0.970358 -0.0136399 N1 0.577416 0.711734 -0.400031 N2 0.507715 0.682832 0.525324 + txt003 +STRI + V0 2.98237 -0.117284 2.4554 V1 3.11389 -0.131944 2.46042 V2 3.07205 -0.118056 2.43841 + N0 0.148477 0.721529 0.676277 N1 -0.0300305 0.615625 0.787467 N2 -0.0103804 0.938666 0.344672 + txt003 +STRI + V0 3.07205 -0.118056 2.43841 V1 2.95756 -0.104938 2.43496 V2 2.98237 -0.117284 2.4554 + N0 -0.0103804 0.938666 0.344672 N1 0.241288 0.970358 -0.0136399 N2 0.148477 0.721529 0.676277 + txt003 +STRI + V0 3.11389 -0.131944 2.46042 V1 3.2454 -0.117284 2.46543 V2 3.18654 -0.104938 2.44186 + N0 -0.0300305 0.615625 0.787467 N1 -0.144371 0.459364 0.876437 N2 -0.199105 0.721639 0.663019 + txt003 +STRI + V0 3.18654 -0.104938 2.44186 V1 3.07205 -0.118056 2.43841 V2 3.11389 -0.131944 2.46042 + N0 -0.199105 0.721639 0.663019 N1 -0.0103804 0.938666 0.344672 N2 -0.0300305 0.615625 0.787467 + txt003 +STRI + V0 3.2454 -0.117284 2.46543 V1 3.34657 -0.0733025 2.46929 V2 3.27461 -0.0655864 2.44451 + N0 -0.144371 0.459364 0.876437 N1 -0.223743 0.242919 0.943891 N2 -0.316294 0.364979 0.875641 + txt003 +STRI + V0 3.27461 -0.0655864 2.44451 V1 3.18654 -0.104938 2.44186 V2 3.2454 -0.117284 2.46543 + N0 -0.316294 0.364979 0.875641 N1 -0.199105 0.721639 0.663019 N2 -0.144371 0.459364 0.876437 + txt003 +STRI + V0 3.34657 -0.0733025 2.46929 V1 3.38704 0 2.47083 V2 3.30984 0 2.44557 + N0 -0.223743 0.242919 0.943891 N1 -0.253109 3.19224e-15 0.967438 N2 -0.349987 4.0695e-15 0.936755 + txt003 +STRI + V0 3.30984 0 2.44557 V1 3.27461 -0.0655864 2.44451 V2 3.34657 -0.0733025 2.46929 + N0 -0.349987 4.0695e-15 0.936755 N1 -0.316294 0.364979 0.875641 N2 -0.223743 0.242919 0.943891 + txt003 +STRI + V0 2.83426 0 2.43125 V1 2.86949 -0.0655864 2.43231 V2 2.82963 -0.0625 2.4 + N0 0.789352 0 -0.613941 N1 0.577416 0.711734 -0.400031 N2 0.483629 0.537366 -0.690899 + txt003 +STRI + V0 2.82963 -0.0625 2.4 V1 2.8 0 2.4 V2 2.83426 0 2.43125 + N0 0.483629 0.537366 -0.690899 N1 0.6 0 -0.8 N2 0.789352 0 -0.613941 + txt003 +STRI + V0 2.86949 -0.0655864 2.43231 V1 2.95756 -0.104938 2.43496 V2 2.9037 -0.1 2.4 + N0 0.577416 0.711734 -0.400031 N1 0.241288 0.970358 -0.0136399 N2 0.247465 0.879877 -0.405681 + txt003 +STRI + V0 2.9037 -0.1 2.4 V1 2.82963 -0.0625 2.4 V2 2.86949 -0.0655864 2.43231 + N0 0.247465 0.879877 -0.405681 N1 0.483629 0.537366 -0.690899 N2 0.577416 0.711734 -0.400031 + txt003 +STRI + V0 2.95756 -0.104938 2.43496 V1 3.07205 -0.118056 2.43841 V2 3 -0.1125 2.4 + N0 0.241288 0.970358 -0.0136399 N1 -0.0103804 0.938666 0.344672 N2 0 1 0 + txt003 +STRI + V0 3 -0.1125 2.4 V1 2.9037 -0.1 2.4 V2 2.95756 -0.104938 2.43496 + N0 0 1 0 N1 0.247465 0.879877 -0.405681 N2 0.241288 0.970358 -0.0136399 + txt003 +STRI + V0 3.07205 -0.118056 2.43841 V1 3.18654 -0.104938 2.44186 V2 3.0963 -0.1 2.4 + N0 -0.0103804 0.938666 0.344672 N1 -0.199105 0.721639 0.663019 N2 -0.236617 0.841304 0.486024 + txt003 +STRI + V0 3.0963 -0.1 2.4 V1 3 -0.1125 2.4 V2 3.07205 -0.118056 2.43841 + N0 -0.236617 0.841304 0.486024 N1 0 1 0 N2 -0.0103804 0.938666 0.344672 + txt003 +STRI + V0 3.18654 -0.104938 2.44186 V1 3.27461 -0.0655864 2.44451 V2 3.17037 -0.0625 2.4 + N0 -0.199105 0.721639 0.663019 N1 -0.316294 0.364979 0.875641 N2 -0.378646 0.420717 0.824393 + txt003 +STRI + V0 3.17037 -0.0625 2.4 V1 3.0963 -0.1 2.4 V2 3.18654 -0.104938 2.44186 + N0 -0.378646 0.420717 0.824393 N1 -0.236617 0.841304 0.486024 N2 -0.199105 0.721639 0.663019 + txt003 +STRI + V0 3.27461 -0.0655864 2.44451 V1 3.30984 0 2.44557 V2 3.2 0 2.4 + N0 -0.316294 0.364979 0.875641 N1 -0.349987 4.0695e-15 0.936755 N2 -0.410365 4.31973e-15 0.911922 + txt003 +STRI + V0 3.2 0 2.4 V1 3.17037 -0.0625 2.4 V2 3.27461 -0.0655864 2.44451 + N0 -0.410365 4.31973e-15 0.911922 N1 -0.378646 0.420717 0.824393 N2 -0.316294 0.364979 0.875641 + txt003 +STRI + V0 3.3 0 2.4 V1 3.25556 0.104167 2.4 V2 3.34075 0.10108 2.43969 + N0 0.384615 0 -0.923077 N1 0.366221 0.366221 -0.855433 N2 0.442187 0.473386 -0.761824 + txt003 +STRI + V0 3.34075 0.10108 2.43969 V1 3.38808 0 2.44036 V2 3.3 0 2.4 + N0 0.442187 0.473386 -0.761824 N1 0.463425 0 -0.886136 N2 0.384615 0 -0.923077 + txt003 +STRI + V0 3.25556 0.104167 2.4 V1 3.14444 0.166667 2.4 V2 3.22241 0.161728 2.438 + N0 0.366221 0.366221 -0.855433 N1 0.250514 0.801644 -0.54278 N2 0.269127 0.933284 -0.237808 + txt003 +STRI + V0 3.22241 0.161728 2.438 V1 3.34075 0.10108 2.43969 V2 3.25556 0.104167 2.4 + N0 0.269127 0.933284 -0.237808 N1 0.442187 0.473386 -0.761824 N2 0.366221 0.366221 -0.855433 + txt003 +STRI + V0 3.14444 0.166667 2.4 V1 3 0.1875 2.4 V2 3.06858 0.181944 2.43581 + N0 0.250514 0.801644 -0.54278 N1 0 1 -0 N2 -0.00489618 0.939227 0.343261 + txt003 +STRI + V0 3.06858 0.181944 2.43581 V1 3.22241 0.161728 2.438 V2 3.14444 0.166667 2.4 + N0 -0.00489618 0.939227 0.343261 N1 0.269127 0.933284 -0.237808 N2 0.250514 0.801644 -0.54278 + txt003 +STRI + V0 3 0.1875 2.4 V1 2.85556 0.166667 2.4 V2 2.91474 0.161728 2.43361 + N0 0 1 -0 N1 -0.267368 0.855576 0.443288 N2 -0.215548 0.724209 0.655027 + txt003 +STRI + V0 2.91474 0.161728 2.43361 V1 3.06858 0.181944 2.43581 V2 3 0.1875 2.4 + N0 -0.215548 0.724209 0.655027 N1 -0.00489618 0.939227 0.343261 N2 0 1 -0 + txt003 +STRI + V0 2.85556 0.166667 2.4 V1 2.74444 0.104167 2.4 V2 2.79641 0.10108 2.43193 + N0 -0.267368 0.855576 0.443288 N1 -0.497164 0.497164 0.711095 N2 -0.387052 0.411886 0.824949 + txt003 +STRI + V0 2.79641 0.10108 2.43193 V1 2.91474 0.161728 2.43361 V2 2.85556 0.166667 2.4 + N0 -0.387052 0.411886 0.824949 N1 -0.215548 0.724209 0.655027 N2 -0.267368 0.855576 0.443288 + txt003 +STRI + V0 2.74444 0.104167 2.4 V1 2.7 0 2.4 V2 2.74907 0 2.43125 + N0 -0.497164 0.497164 0.711095 N1 -0.6 2.24387e-29 0.8 N2 -0.467888 -4.75841e-16 0.883788 + txt003 +STRI + V0 2.74907 0 2.43125 V1 2.79641 0.10108 2.43193 V2 2.74444 0.104167 2.4 + N0 -0.467888 -4.75841e-16 0.883788 N1 -0.387052 0.411886 0.824949 N2 -0.497164 0.497164 0.711095 + txt003 +STRI + V0 3.38808 0 2.44036 V1 3.34075 0.10108 2.43969 V2 3.38244 0.0933642 2.46543 + N0 0.463425 0 -0.886136 N1 0.442187 0.473386 -0.761824 N2 0.612385 0.714958 -0.337372 + txt003 +STRI + V0 3.38244 0.0933642 2.46543 V1 3.42963 0 2.46667 V2 3.38808 0 2.44036 + N0 0.612385 0.714958 -0.337372 N1 0.694136 0 -0.719844 N2 0.463425 0 -0.886136 + txt003 +STRI + V0 3.34075 0.10108 2.43969 V1 3.22241 0.161728 2.438 V2 3.26447 0.149383 2.46235 + N0 0.442187 0.473386 -0.761824 N1 0.269127 0.933284 -0.237808 N2 0.218115 0.87054 0.44112 + txt003 +STRI + V0 3.26447 0.149383 2.46235 V1 3.38244 0.0933642 2.46543 V2 3.34075 0.10108 2.43969 + N0 0.218115 0.87054 0.44112 N1 0.612385 0.714958 -0.337372 N2 0.442187 0.473386 -0.761824 + txt003 +STRI + V0 3.22241 0.161728 2.438 V1 3.06858 0.181944 2.43581 V2 3.11111 0.168056 2.45833 + N0 0.269127 0.933284 -0.237808 N1 -0.00489618 0.939227 0.343261 N2 -0.0195232 0.665415 0.746219 + txt003 +STRI + V0 3.11111 0.168056 2.45833 V1 3.26447 0.149383 2.46235 V2 3.22241 0.161728 2.438 + N0 -0.0195232 0.665415 0.746219 N1 0.218115 0.87054 0.44112 N2 0.269127 0.933284 -0.237808 + txt003 +STRI + V0 3.06858 0.181944 2.43581 V1 2.91474 0.161728 2.43361 V2 2.95775 0.149383 2.45432 + N0 -0.00489618 0.939227 0.343261 N1 -0.215548 0.724209 0.655027 N2 -0.14959 0.481391 0.863647 + txt003 +STRI + V0 2.95775 0.149383 2.45432 V1 3.11111 0.168056 2.45833 V2 3.06858 0.181944 2.43581 + N0 -0.14959 0.481391 0.863647 N1 -0.0195232 0.665415 0.746219 N2 -0.00489618 0.939227 0.343261 + txt003 +STRI + V0 2.91474 0.161728 2.43361 V1 2.79641 0.10108 2.43193 V2 2.83978 0.0933642 2.45123 + N0 -0.215548 0.724209 0.655027 N1 -0.387052 0.411886 0.824949 N2 -0.253997 0.272114 0.928138 + txt003 +STRI + V0 2.83978 0.0933642 2.45123 V1 2.95775 0.149383 2.45432 V2 2.91474 0.161728 2.43361 + N0 -0.253997 0.272114 0.928138 N1 -0.14959 0.481391 0.863647 N2 -0.215548 0.724209 0.655027 + txt003 +STRI + V0 2.79641 0.10108 2.43193 V1 2.74907 0 2.43125 V2 2.79259 0 2.45 + N0 -0.387052 0.411886 0.824949 N1 -0.467888 -4.75841e-16 0.883788 N2 -0.306009 -1.09783e-15 0.952029 + txt003 +STRI + V0 2.79259 0 2.45 V1 2.83978 0.0933642 2.45123 V2 2.79641 0.10108 2.43193 + N0 -0.306009 -1.09783e-15 0.952029 N1 -0.253997 0.272114 0.928138 N2 -0.387052 0.411886 0.824949 + txt003 +STRI + V0 3.42963 0 2.46667 V1 3.38244 0.0933642 2.46543 V2 3.38345 0.0833333 2.47578 + N0 0.694136 0 -0.719844 N1 0.612385 0.714958 -0.337372 N2 0.0539577 0.111406 0.992309 + txt003 +STRI + V0 3.38345 0.0833333 2.47578 V1 3.42813 0 2.47734 V2 3.42963 0 2.46667 + N0 0.0539577 0.111406 0.992309 N1 0.106533 -0 0.994309 N2 0.694136 0 -0.719844 + txt003 +STRI + V0 3.38244 0.0933642 2.46543 V1 3.26447 0.149383 2.46235 V2 3.27176 0.133333 2.47188 + N0 0.612385 0.714958 -0.337372 N1 0.218115 0.87054 0.44112 N2 -0.00787186 0.108144 0.994104 + txt003 +STRI + V0 3.27176 0.133333 2.47188 V1 3.38345 0.0833333 2.47578 V2 3.38244 0.0933642 2.46543 + N0 -0.00787186 0.108144 0.994104 N1 0.0539577 0.111406 0.992309 N2 0.612385 0.714958 -0.337372 + txt003 +STRI + V0 3.26447 0.149383 2.46235 V1 3.11111 0.168056 2.45833 V2 3.12656 0.15 2.4668 + N0 0.218115 0.87054 0.44112 N1 -0.0195232 0.665415 0.746219 N2 -0.0348909 0.0594438 0.997622 + txt003 +STRI + V0 3.12656 0.15 2.4668 V1 3.27176 0.133333 2.47188 V2 3.26447 0.149383 2.46235 + N0 -0.0348909 0.0594438 0.997622 N1 -0.00787186 0.108144 0.994104 N2 0.218115 0.87054 0.44112 + txt003 +STRI + V0 3.11111 0.168056 2.45833 V1 2.95775 0.149383 2.45432 V2 2.98137 0.133333 2.46172 + N0 -0.0195232 0.665415 0.746219 N1 -0.14959 0.481391 0.863647 N2 -0.0369301 0.00796532 0.999286 + txt003 +STRI + V0 2.98137 0.133333 2.46172 V1 3.12656 0.15 2.4668 V2 3.11111 0.168056 2.45833 + N0 -0.0369301 0.00796532 0.999286 N1 -0.0348909 0.0594438 0.997622 N2 -0.0195232 0.665415 0.746219 + txt003 +STRI + V0 2.95775 0.149383 2.45432 V1 2.83978 0.0933642 2.45123 V2 2.86968 0.0833333 2.45781 + N0 -0.14959 0.481391 0.863647 N1 -0.253997 0.272114 0.928138 N2 -0.0182321 -0.0210195 0.999613 + txt003 +STRI + V0 2.86968 0.0833333 2.45781 V1 2.98137 0.133333 2.46172 V2 2.95775 0.149383 2.45432 + N0 -0.0182321 -0.0210195 0.999613 N1 -0.0369301 0.00796532 0.999286 N2 -0.14959 0.481391 0.863647 + txt003 +STRI + V0 2.83978 0.0933642 2.45123 V1 2.79259 0 2.45 V2 2.825 0 2.45625 + N0 -0.253997 0.272114 0.928138 N1 -0.306009 -1.09783e-15 0.952029 N2 2.22045e-15 -2.22045e-15 1 + txt003 +STRI + V0 2.825 0 2.45625 V1 2.86968 0.0833333 2.45781 V2 2.83978 0.0933642 2.45123 + N0 2.22045e-15 -2.22045e-15 1 N1 -0.0182321 -0.0210195 0.999613 N2 -0.253997 0.272114 0.928138 + txt003 +STRI + V0 3.42813 0 2.47734 V1 3.38345 0.0833333 2.47578 V2 3.34657 0.0733025 2.46929 + N0 0.106533 -0 0.994309 N1 0.0539577 0.111406 0.992309 N2 -0.223743 -0.242919 0.943891 + txt003 +STRI + V0 3.34657 0.0733025 2.46929 V1 3.38704 0 2.47083 V2 3.42813 0 2.47734 + N0 -0.223743 -0.242919 0.943891 N1 -0.253109 0 0.967438 N2 0.106533 -0 0.994309 + txt003 +STRI + V0 3.38345 0.0833333 2.47578 V1 3.27176 0.133333 2.47188 V2 3.2454 0.117284 2.46543 + N0 0.0539577 0.111406 0.992309 N1 -0.00787186 0.108144 0.994104 N2 -0.144371 -0.459364 0.876437 + txt003 +STRI + V0 3.2454 0.117284 2.46543 V1 3.34657 0.0733025 2.46929 V2 3.38345 0.0833333 2.47578 + N0 -0.144371 -0.459364 0.876437 N1 -0.223743 -0.242919 0.943891 N2 0.0539577 0.111406 0.992309 + txt003 +STRI + V0 3.27176 0.133333 2.47188 V1 3.12656 0.15 2.4668 V2 3.11389 0.131944 2.46042 + N0 -0.00787186 0.108144 0.994104 N1 -0.0348909 0.0594438 0.997622 N2 -0.0300305 -0.615625 0.787467 + txt003 +STRI + V0 3.11389 0.131944 2.46042 V1 3.2454 0.117284 2.46543 V2 3.27176 0.133333 2.47188 + N0 -0.0300305 -0.615625 0.787467 N1 -0.144371 -0.459364 0.876437 N2 -0.00787186 0.108144 0.994104 + txt003 +STRI + V0 3.12656 0.15 2.4668 V1 2.98137 0.133333 2.46172 V2 2.98237 0.117284 2.4554 + N0 -0.0348909 0.0594438 0.997622 N1 -0.0369301 0.00796532 0.999286 N2 0.148477 -0.721529 0.676277 + txt003 +STRI + V0 2.98237 0.117284 2.4554 V1 3.11389 0.131944 2.46042 V2 3.12656 0.15 2.4668 + N0 0.148477 -0.721529 0.676277 N1 -0.0300305 -0.615625 0.787467 N2 -0.0348909 0.0594438 0.997622 + txt003 +STRI + V0 2.98137 0.133333 2.46172 V1 2.86968 0.0833333 2.45781 V2 2.88121 0.0733025 2.45154 + N0 -0.0369301 0.00796532 0.999286 N1 -0.0182321 -0.0210195 0.999613 N2 0.507715 -0.682832 0.525324 + txt003 +STRI + V0 2.88121 0.0733025 2.45154 V1 2.98237 0.117284 2.4554 V2 2.98137 0.133333 2.46172 + N0 0.507715 -0.682832 0.525324 N1 0.148477 -0.721529 0.676277 N2 -0.0369301 0.00796532 0.999286 + txt003 +STRI + V0 2.86968 0.0833333 2.45781 V1 2.825 0 2.45625 V2 2.84074 0 2.45 + N0 -0.0182321 -0.0210195 0.999613 N1 2.22045e-15 -2.22045e-15 1 N2 0.913812 -4.13289e-15 0.406138 + txt003 +STRI + V0 2.84074 0 2.45 V1 2.88121 0.0733025 2.45154 V2 2.86968 0.0833333 2.45781 + N0 0.913812 -4.13289e-15 0.406138 N1 0.507715 -0.682832 0.525324 N2 -0.0182321 -0.0210195 0.999613 + txt003 +STRI + V0 3.38704 0 2.47083 V1 3.34657 0.0733025 2.46929 V2 3.27461 0.0655864 2.44451 + N0 -0.253109 0 0.967438 N1 -0.223743 -0.242919 0.943891 N2 -0.316294 -0.364979 0.875641 + txt003 +STRI + V0 3.27461 0.0655864 2.44451 V1 3.30984 0 2.44557 V2 3.38704 0 2.47083 + N0 -0.316294 -0.364979 0.875641 N1 -0.349987 0 0.936755 N2 -0.253109 0 0.967438 + txt003 +STRI + V0 3.34657 0.0733025 2.46929 V1 3.2454 0.117284 2.46543 V2 3.18654 0.104938 2.44186 + N0 -0.223743 -0.242919 0.943891 N1 -0.144371 -0.459364 0.876437 N2 -0.199105 -0.721639 0.663019 + txt003 +STRI + V0 3.18654 0.104938 2.44186 V1 3.27461 0.0655864 2.44451 V2 3.34657 0.0733025 2.46929 + N0 -0.199105 -0.721639 0.663019 N1 -0.316294 -0.364979 0.875641 N2 -0.223743 -0.242919 0.943891 + txt003 +STRI + V0 3.2454 0.117284 2.46543 V1 3.11389 0.131944 2.46042 V2 3.07205 0.118056 2.43841 + N0 -0.144371 -0.459364 0.876437 N1 -0.0300305 -0.615625 0.787467 N2 -0.0103804 -0.938666 0.344672 + txt003 +STRI + V0 3.07205 0.118056 2.43841 V1 3.18654 0.104938 2.44186 V2 3.2454 0.117284 2.46543 + N0 -0.0103804 -0.938666 0.344672 N1 -0.199105 -0.721639 0.663019 N2 -0.144371 -0.459364 0.876437 + txt003 +STRI + V0 3.11389 0.131944 2.46042 V1 2.98237 0.117284 2.4554 V2 2.95756 0.104938 2.43496 + N0 -0.0300305 -0.615625 0.787467 N1 0.148477 -0.721529 0.676277 N2 0.241288 -0.970358 -0.0136399 + txt003 +STRI + V0 2.95756 0.104938 2.43496 V1 3.07205 0.118056 2.43841 V2 3.11389 0.131944 2.46042 + N0 0.241288 -0.970358 -0.0136399 N1 -0.0103804 -0.938666 0.344672 N2 -0.0300305 -0.615625 0.787467 + txt003 +STRI + V0 2.98237 0.117284 2.4554 V1 2.88121 0.0733025 2.45154 V2 2.86949 0.0655864 2.43231 + N0 0.148477 -0.721529 0.676277 N1 0.507715 -0.682832 0.525324 N2 0.577416 -0.711734 -0.400031 + txt003 +STRI + V0 2.86949 0.0655864 2.43231 V1 2.95756 0.104938 2.43496 V2 2.98237 0.117284 2.4554 + N0 0.577416 -0.711734 -0.400031 N1 0.241288 -0.970358 -0.0136399 N2 0.148477 -0.721529 0.676277 + txt003 +STRI + V0 2.88121 0.0733025 2.45154 V1 2.84074 0 2.45 V2 2.83426 0 2.43125 + N0 0.507715 -0.682832 0.525324 N1 0.913812 -4.13289e-15 0.406138 N2 0.789352 -1.30938e-15 -0.613941 + txt003 +STRI + V0 2.83426 0 2.43125 V1 2.86949 0.0655864 2.43231 V2 2.88121 0.0733025 2.45154 + N0 0.789352 -1.30938e-15 -0.613941 N1 0.577416 -0.711734 -0.400031 N2 0.507715 -0.682832 0.525324 + txt003 +STRI + V0 3.30984 0 2.44557 V1 3.27461 0.0655864 2.44451 V2 3.17037 0.0625 2.4 + N0 -0.349987 0 0.936755 N1 -0.316294 -0.364979 0.875641 N2 -0.378646 -0.420717 0.824393 + txt003 +STRI + V0 3.17037 0.0625 2.4 V1 3.2 0 2.4 V2 3.30984 0 2.44557 + N0 -0.378646 -0.420717 0.824393 N1 -0.410365 0 0.911922 N2 -0.349987 0 0.936755 + txt003 +STRI + V0 3.27461 0.0655864 2.44451 V1 3.18654 0.104938 2.44186 V2 3.0963 0.1 2.4 + N0 -0.316294 -0.364979 0.875641 N1 -0.199105 -0.721639 0.663019 N2 -0.236617 -0.841304 0.486024 + txt003 +STRI + V0 3.0963 0.1 2.4 V1 3.17037 0.0625 2.4 V2 3.27461 0.0655864 2.44451 + N0 -0.236617 -0.841304 0.486024 N1 -0.378646 -0.420717 0.824393 N2 -0.316294 -0.364979 0.875641 + txt003 +STRI + V0 3.18654 0.104938 2.44186 V1 3.07205 0.118056 2.43841 V2 3 0.1125 2.4 + N0 -0.199105 -0.721639 0.663019 N1 -0.0103804 -0.938666 0.344672 N2 0 -1 0 + txt003 +STRI + V0 3 0.1125 2.4 V1 3.0963 0.1 2.4 V2 3.18654 0.104938 2.44186 + N0 0 -1 0 N1 -0.236617 -0.841304 0.486024 N2 -0.199105 -0.721639 0.663019 + txt003 +STRI + V0 3.07205 0.118056 2.43841 V1 2.95756 0.104938 2.43496 V2 2.9037 0.1 2.4 + N0 -0.0103804 -0.938666 0.344672 N1 0.241288 -0.970358 -0.0136399 N2 0.247465 -0.879877 -0.405681 + txt003 +STRI + V0 2.9037 0.1 2.4 V1 3 0.1125 2.4 V2 3.07205 0.118056 2.43841 + N0 0.247465 -0.879877 -0.405681 N1 0 -1 0 N2 -0.0103804 -0.938666 0.344672 + txt003 +STRI + V0 2.95756 0.104938 2.43496 V1 2.86949 0.0655864 2.43231 V2 2.82963 0.0625 2.4 + N0 0.241288 -0.970358 -0.0136399 N1 0.577416 -0.711734 -0.400031 N2 0.483629 -0.537366 -0.690899 + txt003 +STRI + V0 2.82963 0.0625 2.4 V1 2.9037 0.1 2.4 V2 2.95756 0.104938 2.43496 + N0 0.483629 -0.537366 -0.690899 N1 0.247465 -0.879877 -0.405681 N2 0.241288 -0.970358 -0.0136399 + txt003 +STRI + V0 2.86949 0.0655864 2.43231 V1 2.83426 0 2.43125 V2 2.8 0 2.4 + N0 0.577416 -0.711734 -0.400031 N1 0.789352 -1.30938e-15 -0.613941 N2 0.6 -3.73979e-29 -0.8 + txt003 +STRI + V0 2.8 0 2.4 V1 2.82963 0.0625 2.4 V2 2.86949 0.0655864 2.43231 + N0 0.6 -3.73979e-29 -0.8 N1 0.483629 -0.537366 -0.690899 N2 0.577416 -0.711734 -0.400031 + txt003 +STRI + V0 0.268946 -0.0750782 3.12708 V1 0.278704 0 3.12708 V2 0 0 3.15 + N0 0.241077 -0.0645609 0.968356 N1 0.249998 0 0.968246 N2 0 0 1 + txt003 +STRI + V0 0.241285 -0.141931 3.12708 V1 0.268946 -0.0750782 3.12708 V2 0 0 3.15 + N0 0.215548 -0.124615 0.968509 N1 0.241077 -0.0645609 0.968356 N2 0 0 1 + txt003 +STRI + V0 0.19814 -0.19814 3.12708 V1 0.241285 -0.141931 3.12708 V2 0 0 3.15 + N0 0.175885 -0.175885 0.96857 N1 0.215548 -0.124615 0.968509 N2 0 0 1 + txt003 +STRI + V0 0.141931 -0.241285 3.12708 V1 0.19814 -0.19814 3.12708 V2 0 0 3.15 + N0 0.124615 -0.215548 0.968509 N1 0.175885 -0.175885 0.96857 N2 0 0 1 + txt003 +STRI + V0 0.0750782 -0.268946 3.12708 V1 0.141931 -0.241285 3.12708 V2 0 0 3.15 + N0 0.0645609 -0.241077 0.968356 N1 0.124615 -0.215548 0.968509 N2 0 0 1 + txt003 +STRI + V0 0 -0.278704 3.12708 V1 0.0750782 -0.268946 3.12708 V2 0 0 3.15 + N0 -2.80184e-15 -0.249998 0.968246 N1 0.0645609 -0.241077 0.968356 N2 0 0 1 + txt003 +STRI + V0 0.278704 0 3.12708 V1 0.268946 -0.0750782 3.12708 V2 0.350254 -0.0977709 3.06667 + N0 0.249998 0 0.968246 N1 0.241077 -0.0645609 0.968356 N2 0.955496 -0.255913 0.146755 + txt003 +STRI + V0 0.350254 -0.0977709 3.06667 V1 0.362963 0 3.06667 V2 0.278704 0 3.12708 + N0 0.955496 -0.255913 0.146755 N1 0.989203 0 0.146549 N2 0.249998 0 0.968246 + txt003 +STRI + V0 0.268946 -0.0750782 3.12708 V1 0.241285 -0.141931 3.12708 V2 0.314228 -0.184834 3.06667 + N0 0.241077 -0.0645609 0.968356 N1 0.215548 -0.124615 0.968509 N2 0.856312 -0.495088 0.147029 + txt003 +STRI + V0 0.314228 -0.184834 3.06667 V1 0.350254 -0.0977709 3.06667 V2 0.268946 -0.0750782 3.12708 + N0 0.856312 -0.495088 0.147029 N1 0.955496 -0.255913 0.146755 N2 0.241077 -0.0645609 0.968356 + txt003 +STRI + V0 0.241285 -0.141931 3.12708 V1 0.19814 -0.19814 3.12708 V2 0.258037 -0.258037 3.06667 + N0 0.215548 -0.124615 0.968509 N1 0.175885 -0.175885 0.96857 N2 0.699411 -0.699411 0.147135 + txt003 +STRI + V0 0.258037 -0.258037 3.06667 V1 0.314228 -0.184834 3.06667 V2 0.241285 -0.141931 3.12708 + N0 0.699411 -0.699411 0.147135 N1 0.856312 -0.495088 0.147029 N2 0.215548 -0.124615 0.968509 + txt003 +STRI + V0 0.19814 -0.19814 3.12708 V1 0.141931 -0.241285 3.12708 V2 0.184834 -0.314228 3.06667 + N0 0.175885 -0.175885 0.96857 N1 0.124615 -0.215548 0.968509 N2 0.495088 -0.856312 0.147029 + txt003 +STRI + V0 0.184834 -0.314228 3.06667 V1 0.258037 -0.258037 3.06667 V2 0.19814 -0.19814 3.12708 + N0 0.495088 -0.856312 0.147029 N1 0.699411 -0.699411 0.147135 N2 0.175885 -0.175885 0.96857 + txt003 +STRI + V0 0.141931 -0.241285 3.12708 V1 0.0750782 -0.268946 3.12708 V2 0.0977709 -0.350254 3.06667 + N0 0.124615 -0.215548 0.968509 N1 0.0645609 -0.241077 0.968356 N2 0.255913 -0.955496 0.146755 + txt003 +STRI + V0 0.0977709 -0.350254 3.06667 V1 0.184834 -0.314228 3.06667 V2 0.141931 -0.241285 3.12708 + N0 0.255913 -0.955496 0.146755 N1 0.495088 -0.856312 0.147029 N2 0.124615 -0.215548 0.968509 + txt003 +STRI + V0 0.0750782 -0.268946 3.12708 V1 0 -0.278704 3.12708 V2 0 -0.362963 3.06667 + N0 0.0645609 -0.241077 0.968356 N1 -2.80184e-15 -0.249998 0.968246 N2 -4.98112e-16 -0.989203 0.146549 + txt003 +STRI + V0 0 -0.362963 3.06667 V1 0.0977709 -0.350254 3.06667 V2 0.0750782 -0.268946 3.12708 + N0 -4.98112e-16 -0.989203 0.146549 N1 0.255913 -0.955496 0.146755 N2 0.0645609 -0.241077 0.968356 + txt003 +STRI + V0 0.362963 0 3.06667 V1 0.350254 -0.0977709 3.06667 V2 0.313617 -0.0875289 2.98125 + N0 0.989203 0 0.146549 N1 0.955496 -0.255913 0.146755 N2 0.753688 -0.201937 -0.625441 + txt003 +STRI + V0 0.313617 -0.0875289 2.98125 V1 0.325 0 2.98125 V2 0.362963 0 3.06667 + N0 0.753688 -0.201937 -0.625441 N1 0.780869 0 -0.624695 N2 0.989203 0 0.146549 + txt003 +STRI + V0 0.350254 -0.0977709 3.06667 V1 0.314228 -0.184834 3.06667 V2 0.281352 -0.165481 2.98125 + N0 0.955496 -0.255913 0.146755 N1 0.856312 -0.495088 0.147029 N2 0.674735 -0.390178 -0.626493 + txt003 +STRI + V0 0.281352 -0.165481 2.98125 V1 0.313617 -0.0875289 2.98125 V2 0.350254 -0.0977709 3.06667 + N0 0.674735 -0.390178 -0.626493 N1 0.753688 -0.201937 -0.625441 N2 0.955496 -0.255913 0.146755 + txt003 +STRI + V0 0.314228 -0.184834 3.06667 V1 0.258037 -0.258037 3.06667 V2 0.231031 -0.231031 2.98125 + N0 0.856312 -0.495088 0.147029 N1 0.699411 -0.699411 0.147135 N2 0.550896 -0.550896 -0.626919 + txt003 +STRI + V0 0.231031 -0.231031 2.98125 V1 0.281352 -0.165481 2.98125 V2 0.314228 -0.184834 3.06667 + N0 0.550896 -0.550896 -0.626919 N1 0.674735 -0.390178 -0.626493 N2 0.856312 -0.495088 0.147029 + txt003 +STRI + V0 0.258037 -0.258037 3.06667 V1 0.184834 -0.314228 3.06667 V2 0.165481 -0.281352 2.98125 + N0 0.699411 -0.699411 0.147135 N1 0.495088 -0.856312 0.147029 N2 0.390178 -0.674735 -0.626493 + txt003 +STRI + V0 0.165481 -0.281352 2.98125 V1 0.231031 -0.231031 2.98125 V2 0.258037 -0.258037 3.06667 + N0 0.390178 -0.674735 -0.626493 N1 0.550896 -0.550896 -0.626919 N2 0.699411 -0.699411 0.147135 + txt003 +STRI + V0 0.184834 -0.314228 3.06667 V1 0.0977709 -0.350254 3.06667 V2 0.0875289 -0.313617 2.98125 + N0 0.495088 -0.856312 0.147029 N1 0.255913 -0.955496 0.146755 N2 0.201937 -0.753688 -0.625441 + txt003 +STRI + V0 0.0875289 -0.313617 2.98125 V1 0.165481 -0.281352 2.98125 V2 0.184834 -0.314228 3.06667 + N0 0.201937 -0.753688 -0.625441 N1 0.390178 -0.674735 -0.626493 N2 0.495088 -0.856312 0.147029 + txt003 +STRI + V0 0.0977709 -0.350254 3.06667 V1 0 -0.362963 3.06667 V2 -1.11022e-16 -0.325 2.98125 + N0 0.255913 -0.955496 0.146755 N1 -4.98112e-16 -0.989203 0.146549 N2 1.51803e-15 -0.780869 -0.624695 + txt003 +STRI + V0 -1.11022e-16 -0.325 2.98125 V1 0.0875289 -0.313617 2.98125 V2 0.0977709 -0.350254 3.06667 + N0 1.51803e-15 -0.780869 -0.624695 N1 0.201937 -0.753688 -0.625441 N2 0.255913 -0.955496 0.146755 + txt003 +STRI + V0 0.325 0 2.98125 V1 0.313617 -0.0875289 2.98125 V2 0.228728 -0.0638032 2.88333 + N0 0.780869 0 -0.624695 N1 0.753688 -0.201937 -0.625441 N2 0.721244 -0.193465 -0.665116 + txt003 +STRI + V0 0.228728 -0.0638032 2.88333 V1 0.237037 0 2.88333 V2 0.325 0 2.98125 + N0 0.721244 -0.193465 -0.665116 N1 0.747409 0 -0.664364 N2 0.780869 0 -0.624695 + txt003 +STRI + V0 0.313617 -0.0875289 2.98125 V1 0.281352 -0.165481 2.98125 V2 0.20518 -0.120647 2.88333 + N0 0.753688 -0.201937 -0.625441 N1 0.674735 -0.390178 -0.626493 N2 0.645526 -0.373497 -0.66618 + txt003 +STRI + V0 0.20518 -0.120647 2.88333 V1 0.228728 -0.0638032 2.88333 V2 0.313617 -0.0875289 2.98125 + N0 0.645526 -0.373497 -0.66618 N1 0.721244 -0.193465 -0.665116 N2 0.753688 -0.201937 -0.625441 + txt003 +STRI + V0 0.281352 -0.165481 2.98125 V1 0.231031 -0.231031 2.98125 V2 0.168463 -0.168463 2.88333 + N0 0.674735 -0.390178 -0.626493 N1 0.550896 -0.550896 -0.626919 N2 0.527081 -0.527081 -0.666611 + txt003 +STRI + V0 0.168463 -0.168463 2.88333 V1 0.20518 -0.120647 2.88333 V2 0.281352 -0.165481 2.98125 + N0 0.527081 -0.527081 -0.666611 N1 0.645526 -0.373497 -0.66618 N2 0.674735 -0.390178 -0.626493 + txt003 +STRI + V0 0.231031 -0.231031 2.98125 V1 0.165481 -0.281352 2.98125 V2 0.120647 -0.20518 2.88333 + N0 0.550896 -0.550896 -0.626919 N1 0.390178 -0.674735 -0.626493 N2 0.373497 -0.645526 -0.66618 + txt003 +STRI + V0 0.120647 -0.20518 2.88333 V1 0.168463 -0.168463 2.88333 V2 0.231031 -0.231031 2.98125 + N0 0.373497 -0.645526 -0.66618 N1 0.527081 -0.527081 -0.666611 N2 0.550896 -0.550896 -0.626919 + txt003 +STRI + V0 0.165481 -0.281352 2.98125 V1 0.0875289 -0.313617 2.98125 V2 0.0638032 -0.228728 2.88333 + N0 0.390178 -0.674735 -0.626493 N1 0.201937 -0.753688 -0.625441 N2 0.193465 -0.721244 -0.665116 + txt003 +STRI + V0 0.0638032 -0.228728 2.88333 V1 0.120647 -0.20518 2.88333 V2 0.165481 -0.281352 2.98125 + N0 0.193465 -0.721244 -0.665116 N1 0.373497 -0.645526 -0.66618 N2 0.390178 -0.674735 -0.626493 + txt003 +STRI + V0 0.0875289 -0.313617 2.98125 V1 -1.11022e-16 -0.325 2.98125 V2 -1.11022e-16 -0.237037 2.88333 + N0 0.201937 -0.753688 -0.625441 N1 1.51803e-15 -0.780869 -0.624695 N2 2.42292e-15 -0.747409 -0.664364 + txt003 +STRI + V0 -1.11022e-16 -0.237037 2.88333 V1 0.0638032 -0.228728 2.88333 V2 0.0875289 -0.313617 2.98125 + N0 2.42292e-15 -0.747409 -0.664364 N1 0.193465 -0.721244 -0.665116 N2 0.201937 -0.753688 -0.625441 + txt003 +STRI + V0 0.237037 0 2.88333 V1 0.228728 -0.0638032 2.88333 V2 0.165279 -0.0460445 2.78542 + N0 0.747409 0 -0.664364 N1 0.721244 -0.193465 -0.665116 N2 0.917897 -0.246906 -0.310647 + txt003 +STRI + V0 0.165279 -0.0460445 2.78542 V1 0.171296 0 2.78542 V2 0.237037 0 2.88333 + N0 0.917897 -0.246906 -0.310647 N1 0.950775 0 -0.309882 N2 0.747409 0 -0.664364 + txt003 +STRI + V0 0.228728 -0.0638032 2.88333 V1 0.20518 -0.120647 2.88333 V2 0.148234 -0.0871056 2.78542 + N0 0.721244 -0.193465 -0.665116 N1 0.645526 -0.373497 -0.66618 N2 0.822132 -0.476337 -0.311772 + txt003 +STRI + V0 0.148234 -0.0871056 2.78542 V1 0.165279 -0.0460445 2.78542 V2 0.228728 -0.0638032 2.88333 + N0 0.822132 -0.476337 -0.311772 N1 0.917897 -0.246906 -0.310647 N2 0.721244 -0.193465 -0.665116 + txt003 +STRI + V0 0.20518 -0.120647 2.88333 V1 0.168463 -0.168463 2.88333 V2 0.121672 -0.121672 2.78542 + N0 0.645526 -0.373497 -0.66618 N1 0.527081 -0.527081 -0.666611 N2 0.671754 -0.671754 -0.312241 + txt003 +STRI + V0 0.121672 -0.121672 2.78542 V1 0.148234 -0.0871056 2.78542 V2 0.20518 -0.120647 2.88333 + N0 0.671754 -0.671754 -0.312241 N1 0.822132 -0.476337 -0.311772 N2 0.645526 -0.373497 -0.66618 + txt003 +STRI + V0 0.168463 -0.168463 2.88333 V1 0.120647 -0.20518 2.88333 V2 0.0871056 -0.148234 2.78542 + N0 0.527081 -0.527081 -0.666611 N1 0.373497 -0.645526 -0.66618 N2 0.476337 -0.822132 -0.311772 + txt003 +STRI + V0 0.0871056 -0.148234 2.78542 V1 0.121672 -0.121672 2.78542 V2 0.168463 -0.168463 2.88333 + N0 0.476337 -0.822132 -0.311772 N1 0.671754 -0.671754 -0.312241 N2 0.527081 -0.527081 -0.666611 + txt003 +STRI + V0 0.120647 -0.20518 2.88333 V1 0.0638032 -0.228728 2.88333 V2 0.0460445 -0.165279 2.78542 + N0 0.373497 -0.645526 -0.66618 N1 0.193465 -0.721244 -0.665116 N2 0.246906 -0.917897 -0.310647 + txt003 +STRI + V0 0.0460445 -0.165279 2.78542 V1 0.0871056 -0.148234 2.78542 V2 0.120647 -0.20518 2.88333 + N0 0.246906 -0.917897 -0.310647 N1 0.476337 -0.822132 -0.311772 N2 0.373497 -0.645526 -0.66618 + txt003 +STRI + V0 0.0638032 -0.228728 2.88333 V1 -1.11022e-16 -0.237037 2.88333 V2 -6.66134e-16 -0.171296 2.78542 + N0 0.193465 -0.721244 -0.665116 N1 2.42292e-15 -0.747409 -0.664364 N2 2.16507e-15 -0.950775 -0.309882 + txt003 +STRI + V0 -6.66134e-16 -0.171296 2.78542 V1 0.0460445 -0.165279 2.78542 V2 0.0638032 -0.228728 2.88333 + N0 2.16507e-15 -0.950775 -0.309882 N1 0.246906 -0.917897 -0.310647 N2 0.193465 -0.721244 -0.665116 + txt003 +STRI + V0 0.171296 0 2.78542 V1 0.165279 -0.0460445 2.78542 V2 0.192963 -0.0537037 2.7 + N0 0.950775 0 -0.309882 N1 0.917897 -0.246906 -0.310647 N2 0.578783 -0.15602 0.800417 + txt003 +STRI + V0 0.192963 -0.0537037 2.7 V1 0.2 0 2.7 V2 0.171296 0 2.78542 + N0 0.578783 -0.15602 0.800417 N1 0.6 0 0.8 N2 0.950775 0 -0.309882 + txt003 +STRI + V0 0.165279 -0.0460445 2.78542 V1 0.148234 -0.0871056 2.78542 V2 0.173037 -0.10163 2.7 + N0 0.917897 -0.246906 -0.310647 N1 0.822132 -0.476337 -0.311772 N2 0.517905 -0.300385 0.800964 + txt003 +STRI + V0 0.173037 -0.10163 2.7 V1 0.192963 -0.0537037 2.7 V2 0.165279 -0.0460445 2.78542 + N0 0.517905 -0.300385 0.800964 N1 0.578783 -0.15602 0.800417 N2 0.917897 -0.246906 -0.310647 + txt003 +STRI + V0 0.148234 -0.0871056 2.78542 V1 0.121672 -0.121672 2.78542 V2 0.142 -0.142 2.7 + N0 0.822132 -0.476337 -0.311772 N1 0.671754 -0.671754 -0.312241 N2 0.423155 -0.423155 0.801174 + txt003 +STRI + V0 0.142 -0.142 2.7 V1 0.173037 -0.10163 2.7 V2 0.148234 -0.0871056 2.78542 + N0 0.423155 -0.423155 0.801174 N1 0.517905 -0.300385 0.800964 N2 0.822132 -0.476337 -0.311772 + txt003 +STRI + V0 0.121672 -0.121672 2.78542 V1 0.0871056 -0.148234 2.78542 V2 0.10163 -0.173037 2.7 + N0 0.671754 -0.671754 -0.312241 N1 0.476337 -0.822132 -0.311772 N2 0.300385 -0.517905 0.800964 + txt003 +STRI + V0 0.10163 -0.173037 2.7 V1 0.142 -0.142 2.7 V2 0.121672 -0.121672 2.78542 + N0 0.300385 -0.517905 0.800964 N1 0.423155 -0.423155 0.801174 N2 0.671754 -0.671754 -0.312241 + txt003 +STRI + V0 0.0871056 -0.148234 2.78542 V1 0.0460445 -0.165279 2.78542 V2 0.0537037 -0.192963 2.7 + N0 0.476337 -0.822132 -0.311772 N1 0.246906 -0.917897 -0.310647 N2 0.15602 -0.578783 0.800417 + txt003 +STRI + V0 0.0537037 -0.192963 2.7 V1 0.10163 -0.173037 2.7 V2 0.0871056 -0.148234 2.78542 + N0 0.15602 -0.578783 0.800417 N1 0.300385 -0.517905 0.800964 N2 0.476337 -0.822132 -0.311772 + txt003 +STRI + V0 0.0460445 -0.165279 2.78542 V1 -6.66134e-16 -0.171296 2.78542 V2 0 -0.2 2.7 + N0 0.246906 -0.917897 -0.310647 N1 2.16507e-15 -0.950775 -0.309882 N2 -3.17207e-15 -0.6 0.8 + txt003 +STRI + V0 0 -0.2 2.7 V1 0.0537037 -0.192963 2.7 V2 0.0460445 -0.165279 2.78542 + N0 -3.17207e-15 -0.6 0.8 N1 0.15602 -0.578783 0.800417 N2 0.246906 -0.917897 -0.310647 + txt003 +STRI + V0 -0.0750782 -0.268946 3.12708 V1 0 -0.278704 3.12708 V2 0 0 3.15 + N0 -0.0645609 -0.241077 0.968356 N1 0 -0.249998 0.968246 N2 0 0 1 + txt003 +STRI + V0 -0.141931 -0.241285 3.12708 V1 -0.0750782 -0.268946 3.12708 V2 0 0 3.15 + N0 -0.124615 -0.215548 0.968509 N1 -0.0645609 -0.241077 0.968356 N2 0 0 1 + txt003 +STRI + V0 -0.19814 -0.19814 3.12708 V1 -0.141931 -0.241285 3.12708 V2 0 0 3.15 + N0 -0.175885 -0.175885 0.96857 N1 -0.124615 -0.215548 0.968509 N2 0 0 1 + txt003 +STRI + V0 -0.241285 -0.141931 3.12708 V1 -0.19814 -0.19814 3.12708 V2 0 0 3.15 + N0 -0.215548 -0.124615 0.968509 N1 -0.175885 -0.175885 0.96857 N2 0 0 1 + txt003 +STRI + V0 -0.268946 -0.0750782 3.12708 V1 -0.241285 -0.141931 3.12708 V2 0 0 3.15 + N0 -0.241077 -0.0645609 0.968356 N1 -0.215548 -0.124615 0.968509 N2 0 0 1 + txt003 +STRI + V0 -0.278704 0 3.12708 V1 -0.268946 -0.0750782 3.12708 V2 0 0 3.15 + N0 -0.249998 2.80184e-15 0.968246 N1 -0.241077 -0.0645609 0.968356 N2 0 0 1 + txt003 +STRI + V0 0 -0.278704 3.12708 V1 -0.0750782 -0.268946 3.12708 V2 -0.0977709 -0.350254 3.06667 + N0 0 -0.249998 0.968246 N1 -0.0645609 -0.241077 0.968356 N2 -0.255913 -0.955496 0.146755 + txt003 +STRI + V0 -0.0977709 -0.350254 3.06667 V1 0 -0.362963 3.06667 V2 0 -0.278704 3.12708 + N0 -0.255913 -0.955496 0.146755 N1 0 -0.989203 0.146549 N2 0 -0.249998 0.968246 + txt003 +STRI + V0 -0.0750782 -0.268946 3.12708 V1 -0.141931 -0.241285 3.12708 V2 -0.184834 -0.314228 3.06667 + N0 -0.0645609 -0.241077 0.968356 N1 -0.124615 -0.215548 0.968509 N2 -0.495088 -0.856312 0.147029 + txt003 +STRI + V0 -0.184834 -0.314228 3.06667 V1 -0.0977709 -0.350254 3.06667 V2 -0.0750782 -0.268946 3.12708 + N0 -0.495088 -0.856312 0.147029 N1 -0.255913 -0.955496 0.146755 N2 -0.0645609 -0.241077 0.968356 + txt003 +STRI + V0 -0.141931 -0.241285 3.12708 V1 -0.19814 -0.19814 3.12708 V2 -0.258037 -0.258037 3.06667 + N0 -0.124615 -0.215548 0.968509 N1 -0.175885 -0.175885 0.96857 N2 -0.699411 -0.699411 0.147135 + txt003 +STRI + V0 -0.258037 -0.258037 3.06667 V1 -0.184834 -0.314228 3.06667 V2 -0.141931 -0.241285 3.12708 + N0 -0.699411 -0.699411 0.147135 N1 -0.495088 -0.856312 0.147029 N2 -0.124615 -0.215548 0.968509 + txt003 +STRI + V0 -0.19814 -0.19814 3.12708 V1 -0.241285 -0.141931 3.12708 V2 -0.314228 -0.184834 3.06667 + N0 -0.175885 -0.175885 0.96857 N1 -0.215548 -0.124615 0.968509 N2 -0.856312 -0.495088 0.147029 + txt003 +STRI + V0 -0.314228 -0.184834 3.06667 V1 -0.258037 -0.258037 3.06667 V2 -0.19814 -0.19814 3.12708 + N0 -0.856312 -0.495088 0.147029 N1 -0.699411 -0.699411 0.147135 N2 -0.175885 -0.175885 0.96857 + txt003 +STRI + V0 -0.241285 -0.141931 3.12708 V1 -0.268946 -0.0750782 3.12708 V2 -0.350254 -0.0977709 3.06667 + N0 -0.215548 -0.124615 0.968509 N1 -0.241077 -0.0645609 0.968356 N2 -0.955496 -0.255913 0.146755 + txt003 +STRI + V0 -0.350254 -0.0977709 3.06667 V1 -0.314228 -0.184834 3.06667 V2 -0.241285 -0.141931 3.12708 + N0 -0.955496 -0.255913 0.146755 N1 -0.856312 -0.495088 0.147029 N2 -0.215548 -0.124615 0.968509 + txt003 +STRI + V0 -0.268946 -0.0750782 3.12708 V1 -0.278704 0 3.12708 V2 -0.362963 0 3.06667 + N0 -0.241077 -0.0645609 0.968356 N1 -0.249998 2.80184e-15 0.968246 N2 -0.989203 4.98112e-16 0.146549 + txt003 +STRI + V0 -0.362963 0 3.06667 V1 -0.350254 -0.0977709 3.06667 V2 -0.268946 -0.0750782 3.12708 + N0 -0.989203 4.98112e-16 0.146549 N1 -0.955496 -0.255913 0.146755 N2 -0.241077 -0.0645609 0.968356 + txt003 +STRI + V0 0 -0.362963 3.06667 V1 -0.0977709 -0.350254 3.06667 V2 -0.0875289 -0.313617 2.98125 + N0 0 -0.989203 0.146549 N1 -0.255913 -0.955496 0.146755 N2 -0.201937 -0.753688 -0.625441 + txt003 +STRI + V0 -0.0875289 -0.313617 2.98125 V1 0 -0.325 2.98125 V2 0 -0.362963 3.06667 + N0 -0.201937 -0.753688 -0.625441 N1 -0 -0.780869 -0.624695 N2 0 -0.989203 0.146549 + txt003 +STRI + V0 -0.0977709 -0.350254 3.06667 V1 -0.184834 -0.314228 3.06667 V2 -0.165481 -0.281352 2.98125 + N0 -0.255913 -0.955496 0.146755 N1 -0.495088 -0.856312 0.147029 N2 -0.390178 -0.674735 -0.626493 + txt003 +STRI + V0 -0.165481 -0.281352 2.98125 V1 -0.0875289 -0.313617 2.98125 V2 -0.0977709 -0.350254 3.06667 + N0 -0.390178 -0.674735 -0.626493 N1 -0.201937 -0.753688 -0.625441 N2 -0.255913 -0.955496 0.146755 + txt003 +STRI + V0 -0.184834 -0.314228 3.06667 V1 -0.258037 -0.258037 3.06667 V2 -0.231031 -0.231031 2.98125 + N0 -0.495088 -0.856312 0.147029 N1 -0.699411 -0.699411 0.147135 N2 -0.550896 -0.550896 -0.626919 + txt003 +STRI + V0 -0.231031 -0.231031 2.98125 V1 -0.165481 -0.281352 2.98125 V2 -0.184834 -0.314228 3.06667 + N0 -0.550896 -0.550896 -0.626919 N1 -0.390178 -0.674735 -0.626493 N2 -0.495088 -0.856312 0.147029 + txt003 +STRI + V0 -0.258037 -0.258037 3.06667 V1 -0.314228 -0.184834 3.06667 V2 -0.281352 -0.165481 2.98125 + N0 -0.699411 -0.699411 0.147135 N1 -0.856312 -0.495088 0.147029 N2 -0.674735 -0.390178 -0.626493 + txt003 +STRI + V0 -0.281352 -0.165481 2.98125 V1 -0.231031 -0.231031 2.98125 V2 -0.258037 -0.258037 3.06667 + N0 -0.674735 -0.390178 -0.626493 N1 -0.550896 -0.550896 -0.626919 N2 -0.699411 -0.699411 0.147135 + txt003 +STRI + V0 -0.314228 -0.184834 3.06667 V1 -0.350254 -0.0977709 3.06667 V2 -0.313617 -0.0875289 2.98125 + N0 -0.856312 -0.495088 0.147029 N1 -0.955496 -0.255913 0.146755 N2 -0.753688 -0.201937 -0.625441 + txt003 +STRI + V0 -0.313617 -0.0875289 2.98125 V1 -0.281352 -0.165481 2.98125 V2 -0.314228 -0.184834 3.06667 + N0 -0.753688 -0.201937 -0.625441 N1 -0.674735 -0.390178 -0.626493 N2 -0.856312 -0.495088 0.147029 + txt003 +STRI + V0 -0.350254 -0.0977709 3.06667 V1 -0.362963 0 3.06667 V2 -0.325 1.11022e-16 2.98125 + N0 -0.955496 -0.255913 0.146755 N1 -0.989203 4.98112e-16 0.146549 N2 -0.780869 -1.51803e-15 -0.624695 + txt003 +STRI + V0 -0.325 1.11022e-16 2.98125 V1 -0.313617 -0.0875289 2.98125 V2 -0.350254 -0.0977709 3.06667 + N0 -0.780869 -1.51803e-15 -0.624695 N1 -0.753688 -0.201937 -0.625441 N2 -0.955496 -0.255913 0.146755 + txt003 +STRI + V0 0 -0.325 2.98125 V1 -0.0875289 -0.313617 2.98125 V2 -0.0638032 -0.228728 2.88333 + N0 -0 -0.780869 -0.624695 N1 -0.201937 -0.753688 -0.625441 N2 -0.193465 -0.721244 -0.665116 + txt003 +STRI + V0 -0.0638032 -0.228728 2.88333 V1 0 -0.237037 2.88333 V2 0 -0.325 2.98125 + N0 -0.193465 -0.721244 -0.665116 N1 -0 -0.747409 -0.664364 N2 -0 -0.780869 -0.624695 + txt003 +STRI + V0 -0.0875289 -0.313617 2.98125 V1 -0.165481 -0.281352 2.98125 V2 -0.120647 -0.20518 2.88333 + N0 -0.201937 -0.753688 -0.625441 N1 -0.390178 -0.674735 -0.626493 N2 -0.373497 -0.645526 -0.66618 + txt003 +STRI + V0 -0.120647 -0.20518 2.88333 V1 -0.0638032 -0.228728 2.88333 V2 -0.0875289 -0.313617 2.98125 + N0 -0.373497 -0.645526 -0.66618 N1 -0.193465 -0.721244 -0.665116 N2 -0.201937 -0.753688 -0.625441 + txt003 +STRI + V0 -0.165481 -0.281352 2.98125 V1 -0.231031 -0.231031 2.98125 V2 -0.168463 -0.168463 2.88333 + N0 -0.390178 -0.674735 -0.626493 N1 -0.550896 -0.550896 -0.626919 N2 -0.527081 -0.527081 -0.666611 + txt003 +STRI + V0 -0.168463 -0.168463 2.88333 V1 -0.120647 -0.20518 2.88333 V2 -0.165481 -0.281352 2.98125 + N0 -0.527081 -0.527081 -0.666611 N1 -0.373497 -0.645526 -0.66618 N2 -0.390178 -0.674735 -0.626493 + txt003 +STRI + V0 -0.231031 -0.231031 2.98125 V1 -0.281352 -0.165481 2.98125 V2 -0.20518 -0.120647 2.88333 + N0 -0.550896 -0.550896 -0.626919 N1 -0.674735 -0.390178 -0.626493 N2 -0.645526 -0.373497 -0.66618 + txt003 +STRI + V0 -0.20518 -0.120647 2.88333 V1 -0.168463 -0.168463 2.88333 V2 -0.231031 -0.231031 2.98125 + N0 -0.645526 -0.373497 -0.66618 N1 -0.527081 -0.527081 -0.666611 N2 -0.550896 -0.550896 -0.626919 + txt003 +STRI + V0 -0.281352 -0.165481 2.98125 V1 -0.313617 -0.0875289 2.98125 V2 -0.228728 -0.0638032 2.88333 + N0 -0.674735 -0.390178 -0.626493 N1 -0.753688 -0.201937 -0.625441 N2 -0.721244 -0.193465 -0.665116 + txt003 +STRI + V0 -0.228728 -0.0638032 2.88333 V1 -0.20518 -0.120647 2.88333 V2 -0.281352 -0.165481 2.98125 + N0 -0.721244 -0.193465 -0.665116 N1 -0.645526 -0.373497 -0.66618 N2 -0.674735 -0.390178 -0.626493 + txt003 +STRI + V0 -0.313617 -0.0875289 2.98125 V1 -0.325 1.11022e-16 2.98125 V2 -0.237037 1.11022e-16 2.88333 + N0 -0.753688 -0.201937 -0.625441 N1 -0.780869 -1.51803e-15 -0.624695 N2 -0.747409 -2.42292e-15 -0.664364 + txt003 +STRI + V0 -0.237037 1.11022e-16 2.88333 V1 -0.228728 -0.0638032 2.88333 V2 -0.313617 -0.0875289 2.98125 + N0 -0.747409 -2.42292e-15 -0.664364 N1 -0.721244 -0.193465 -0.665116 N2 -0.753688 -0.201937 -0.625441 + txt003 +STRI + V0 0 -0.237037 2.88333 V1 -0.0638032 -0.228728 2.88333 V2 -0.0460445 -0.165279 2.78542 + N0 -0 -0.747409 -0.664364 N1 -0.193465 -0.721244 -0.665116 N2 -0.246906 -0.917897 -0.310647 + txt003 +STRI + V0 -0.0460445 -0.165279 2.78542 V1 0 -0.171296 2.78542 V2 0 -0.237037 2.88333 + N0 -0.246906 -0.917897 -0.310647 N1 -0 -0.950775 -0.309882 N2 -0 -0.747409 -0.664364 + txt003 +STRI + V0 -0.0638032 -0.228728 2.88333 V1 -0.120647 -0.20518 2.88333 V2 -0.0871056 -0.148234 2.78542 + N0 -0.193465 -0.721244 -0.665116 N1 -0.373497 -0.645526 -0.66618 N2 -0.476337 -0.822132 -0.311772 + txt003 +STRI + V0 -0.0871056 -0.148234 2.78542 V1 -0.0460445 -0.165279 2.78542 V2 -0.0638032 -0.228728 2.88333 + N0 -0.476337 -0.822132 -0.311772 N1 -0.246906 -0.917897 -0.310647 N2 -0.193465 -0.721244 -0.665116 + txt003 +STRI + V0 -0.120647 -0.20518 2.88333 V1 -0.168463 -0.168463 2.88333 V2 -0.121672 -0.121672 2.78542 + N0 -0.373497 -0.645526 -0.66618 N1 -0.527081 -0.527081 -0.666611 N2 -0.671754 -0.671754 -0.312241 + txt003 +STRI + V0 -0.121672 -0.121672 2.78542 V1 -0.0871056 -0.148234 2.78542 V2 -0.120647 -0.20518 2.88333 + N0 -0.671754 -0.671754 -0.312241 N1 -0.476337 -0.822132 -0.311772 N2 -0.373497 -0.645526 -0.66618 + txt003 +STRI + V0 -0.168463 -0.168463 2.88333 V1 -0.20518 -0.120647 2.88333 V2 -0.148234 -0.0871056 2.78542 + N0 -0.527081 -0.527081 -0.666611 N1 -0.645526 -0.373497 -0.66618 N2 -0.822132 -0.476337 -0.311772 + txt003 +STRI + V0 -0.148234 -0.0871056 2.78542 V1 -0.121672 -0.121672 2.78542 V2 -0.168463 -0.168463 2.88333 + N0 -0.822132 -0.476337 -0.311772 N1 -0.671754 -0.671754 -0.312241 N2 -0.527081 -0.527081 -0.666611 + txt003 +STRI + V0 -0.20518 -0.120647 2.88333 V1 -0.228728 -0.0638032 2.88333 V2 -0.165279 -0.0460445 2.78542 + N0 -0.645526 -0.373497 -0.66618 N1 -0.721244 -0.193465 -0.665116 N2 -0.917897 -0.246906 -0.310647 + txt003 +STRI + V0 -0.165279 -0.0460445 2.78542 V1 -0.148234 -0.0871056 2.78542 V2 -0.20518 -0.120647 2.88333 + N0 -0.917897 -0.246906 -0.310647 N1 -0.822132 -0.476337 -0.311772 N2 -0.645526 -0.373497 -0.66618 + txt003 +STRI + V0 -0.228728 -0.0638032 2.88333 V1 -0.237037 1.11022e-16 2.88333 V2 -0.171296 6.66134e-16 2.78542 + N0 -0.721244 -0.193465 -0.665116 N1 -0.747409 -2.42292e-15 -0.664364 N2 -0.950775 -2.16507e-15 -0.309882 + txt003 +STRI + V0 -0.171296 6.66134e-16 2.78542 V1 -0.165279 -0.0460445 2.78542 V2 -0.228728 -0.0638032 2.88333 + N0 -0.950775 -2.16507e-15 -0.309882 N1 -0.917897 -0.246906 -0.310647 N2 -0.721244 -0.193465 -0.665116 + txt003 +STRI + V0 0 -0.171296 2.78542 V1 -0.0460445 -0.165279 2.78542 V2 -0.0537037 -0.192963 2.7 + N0 -0 -0.950775 -0.309882 N1 -0.246906 -0.917897 -0.310647 N2 -0.15602 -0.578783 0.800417 + txt003 +STRI + V0 -0.0537037 -0.192963 2.7 V1 0 -0.2 2.7 V2 0 -0.171296 2.78542 + N0 -0.15602 -0.578783 0.800417 N1 0 -0.6 0.8 N2 -0 -0.950775 -0.309882 + txt003 +STRI + V0 -0.0460445 -0.165279 2.78542 V1 -0.0871056 -0.148234 2.78542 V2 -0.10163 -0.173037 2.7 + N0 -0.246906 -0.917897 -0.310647 N1 -0.476337 -0.822132 -0.311772 N2 -0.300385 -0.517905 0.800964 + txt003 +STRI + V0 -0.10163 -0.173037 2.7 V1 -0.0537037 -0.192963 2.7 V2 -0.0460445 -0.165279 2.78542 + N0 -0.300385 -0.517905 0.800964 N1 -0.15602 -0.578783 0.800417 N2 -0.246906 -0.917897 -0.310647 + txt003 +STRI + V0 -0.0871056 -0.148234 2.78542 V1 -0.121672 -0.121672 2.78542 V2 -0.142 -0.142 2.7 + N0 -0.476337 -0.822132 -0.311772 N1 -0.671754 -0.671754 -0.312241 N2 -0.423155 -0.423155 0.801174 + txt003 +STRI + V0 -0.142 -0.142 2.7 V1 -0.10163 -0.173037 2.7 V2 -0.0871056 -0.148234 2.78542 + N0 -0.423155 -0.423155 0.801174 N1 -0.300385 -0.517905 0.800964 N2 -0.476337 -0.822132 -0.311772 + txt003 +STRI + V0 -0.121672 -0.121672 2.78542 V1 -0.148234 -0.0871056 2.78542 V2 -0.173037 -0.10163 2.7 + N0 -0.671754 -0.671754 -0.312241 N1 -0.822132 -0.476337 -0.311772 N2 -0.517905 -0.300385 0.800964 + txt003 +STRI + V0 -0.173037 -0.10163 2.7 V1 -0.142 -0.142 2.7 V2 -0.121672 -0.121672 2.78542 + N0 -0.517905 -0.300385 0.800964 N1 -0.423155 -0.423155 0.801174 N2 -0.671754 -0.671754 -0.312241 + txt003 +STRI + V0 -0.148234 -0.0871056 2.78542 V1 -0.165279 -0.0460445 2.78542 V2 -0.192963 -0.0537037 2.7 + N0 -0.822132 -0.476337 -0.311772 N1 -0.917897 -0.246906 -0.310647 N2 -0.578783 -0.15602 0.800417 + txt003 +STRI + V0 -0.192963 -0.0537037 2.7 V1 -0.173037 -0.10163 2.7 V2 -0.148234 -0.0871056 2.78542 + N0 -0.578783 -0.15602 0.800417 N1 -0.517905 -0.300385 0.800964 N2 -0.822132 -0.476337 -0.311772 + txt003 +STRI + V0 -0.165279 -0.0460445 2.78542 V1 -0.171296 6.66134e-16 2.78542 V2 -0.2 0 2.7 + N0 -0.917897 -0.246906 -0.310647 N1 -0.950775 -2.16507e-15 -0.309882 N2 -0.6 3.17207e-15 0.8 + txt003 +STRI + V0 -0.2 0 2.7 V1 -0.192963 -0.0537037 2.7 V2 -0.165279 -0.0460445 2.78542 + N0 -0.6 3.17207e-15 0.8 N1 -0.578783 -0.15602 0.800417 N2 -0.917897 -0.246906 -0.310647 + txt003 +STRI + V0 -0.268946 0.0750782 3.12708 V1 -0.278704 0 3.12708 V2 0 0 3.15 + N0 -0.241077 0.0645609 0.968356 N1 -0.249998 0 0.968246 N2 0 0 1 + txt003 +STRI + V0 -0.241285 0.141931 3.12708 V1 -0.268946 0.0750782 3.12708 V2 0 0 3.15 + N0 -0.215548 0.124615 0.968509 N1 -0.241077 0.0645609 0.968356 N2 0 0 1 + txt003 +STRI + V0 -0.19814 0.19814 3.12708 V1 -0.241285 0.141931 3.12708 V2 0 0 3.15 + N0 -0.175885 0.175885 0.96857 N1 -0.215548 0.124615 0.968509 N2 0 0 1 + txt003 +STRI + V0 -0.141931 0.241285 3.12708 V1 -0.19814 0.19814 3.12708 V2 0 0 3.15 + N0 -0.124615 0.215548 0.968509 N1 -0.175885 0.175885 0.96857 N2 0 0 1 + txt003 +STRI + V0 -0.0750782 0.268946 3.12708 V1 -0.141931 0.241285 3.12708 V2 0 0 3.15 + N0 -0.0645609 0.241077 0.968356 N1 -0.124615 0.215548 0.968509 N2 0 0 1 + txt003 +STRI + V0 0 0.278704 3.12708 V1 -0.0750782 0.268946 3.12708 V2 0 0 3.15 + N0 2.80184e-15 0.249998 0.968246 N1 -0.0645609 0.241077 0.968356 N2 0 0 1 + txt003 +STRI + V0 -0.278704 0 3.12708 V1 -0.268946 0.0750782 3.12708 V2 -0.350254 0.0977709 3.06667 + N0 -0.249998 0 0.968246 N1 -0.241077 0.0645609 0.968356 N2 -0.955496 0.255913 0.146755 + txt003 +STRI + V0 -0.350254 0.0977709 3.06667 V1 -0.362963 0 3.06667 V2 -0.278704 0 3.12708 + N0 -0.955496 0.255913 0.146755 N1 -0.989203 0 0.146549 N2 -0.249998 0 0.968246 + txt003 +STRI + V0 -0.268946 0.0750782 3.12708 V1 -0.241285 0.141931 3.12708 V2 -0.314228 0.184834 3.06667 + N0 -0.241077 0.0645609 0.968356 N1 -0.215548 0.124615 0.968509 N2 -0.856312 0.495088 0.147029 + txt003 +STRI + V0 -0.314228 0.184834 3.06667 V1 -0.350254 0.0977709 3.06667 V2 -0.268946 0.0750782 3.12708 + N0 -0.856312 0.495088 0.147029 N1 -0.955496 0.255913 0.146755 N2 -0.241077 0.0645609 0.968356 + txt003 +STRI + V0 -0.241285 0.141931 3.12708 V1 -0.19814 0.19814 3.12708 V2 -0.258037 0.258037 3.06667 + N0 -0.215548 0.124615 0.968509 N1 -0.175885 0.175885 0.96857 N2 -0.699411 0.699411 0.147135 + txt003 +STRI + V0 -0.258037 0.258037 3.06667 V1 -0.314228 0.184834 3.06667 V2 -0.241285 0.141931 3.12708 + N0 -0.699411 0.699411 0.147135 N1 -0.856312 0.495088 0.147029 N2 -0.215548 0.124615 0.968509 + txt003 +STRI + V0 -0.19814 0.19814 3.12708 V1 -0.141931 0.241285 3.12708 V2 -0.184834 0.314228 3.06667 + N0 -0.175885 0.175885 0.96857 N1 -0.124615 0.215548 0.968509 N2 -0.495088 0.856312 0.147029 + txt003 +STRI + V0 -0.184834 0.314228 3.06667 V1 -0.258037 0.258037 3.06667 V2 -0.19814 0.19814 3.12708 + N0 -0.495088 0.856312 0.147029 N1 -0.699411 0.699411 0.147135 N2 -0.175885 0.175885 0.96857 + txt003 +STRI + V0 -0.141931 0.241285 3.12708 V1 -0.0750782 0.268946 3.12708 V2 -0.0977709 0.350254 3.06667 + N0 -0.124615 0.215548 0.968509 N1 -0.0645609 0.241077 0.968356 N2 -0.255913 0.955496 0.146755 + txt003 +STRI + V0 -0.0977709 0.350254 3.06667 V1 -0.184834 0.314228 3.06667 V2 -0.141931 0.241285 3.12708 + N0 -0.255913 0.955496 0.146755 N1 -0.495088 0.856312 0.147029 N2 -0.124615 0.215548 0.968509 + txt003 +STRI + V0 -0.0750782 0.268946 3.12708 V1 0 0.278704 3.12708 V2 0 0.362963 3.06667 + N0 -0.0645609 0.241077 0.968356 N1 2.80184e-15 0.249998 0.968246 N2 4.98112e-16 0.989203 0.146549 + txt003 +STRI + V0 0 0.362963 3.06667 V1 -0.0977709 0.350254 3.06667 V2 -0.0750782 0.268946 3.12708 + N0 4.98112e-16 0.989203 0.146549 N1 -0.255913 0.955496 0.146755 N2 -0.0645609 0.241077 0.968356 + txt003 +STRI + V0 -0.362963 0 3.06667 V1 -0.350254 0.0977709 3.06667 V2 -0.313617 0.0875289 2.98125 + N0 -0.989203 0 0.146549 N1 -0.955496 0.255913 0.146755 N2 -0.753688 0.201937 -0.625441 + txt003 +STRI + V0 -0.313617 0.0875289 2.98125 V1 -0.325 0 2.98125 V2 -0.362963 0 3.06667 + N0 -0.753688 0.201937 -0.625441 N1 -0.780869 0 -0.624695 N2 -0.989203 0 0.146549 + txt003 +STRI + V0 -0.350254 0.0977709 3.06667 V1 -0.314228 0.184834 3.06667 V2 -0.281352 0.165481 2.98125 + N0 -0.955496 0.255913 0.146755 N1 -0.856312 0.495088 0.147029 N2 -0.674735 0.390178 -0.626493 + txt003 +STRI + V0 -0.281352 0.165481 2.98125 V1 -0.313617 0.0875289 2.98125 V2 -0.350254 0.0977709 3.06667 + N0 -0.674735 0.390178 -0.626493 N1 -0.753688 0.201937 -0.625441 N2 -0.955496 0.255913 0.146755 + txt003 +STRI + V0 -0.314228 0.184834 3.06667 V1 -0.258037 0.258037 3.06667 V2 -0.231031 0.231031 2.98125 + N0 -0.856312 0.495088 0.147029 N1 -0.699411 0.699411 0.147135 N2 -0.550896 0.550896 -0.626919 + txt003 +STRI + V0 -0.231031 0.231031 2.98125 V1 -0.281352 0.165481 2.98125 V2 -0.314228 0.184834 3.06667 + N0 -0.550896 0.550896 -0.626919 N1 -0.674735 0.390178 -0.626493 N2 -0.856312 0.495088 0.147029 + txt003 +STRI + V0 -0.258037 0.258037 3.06667 V1 -0.184834 0.314228 3.06667 V2 -0.165481 0.281352 2.98125 + N0 -0.699411 0.699411 0.147135 N1 -0.495088 0.856312 0.147029 N2 -0.390178 0.674735 -0.626493 + txt003 +STRI + V0 -0.165481 0.281352 2.98125 V1 -0.231031 0.231031 2.98125 V2 -0.258037 0.258037 3.06667 + N0 -0.390178 0.674735 -0.626493 N1 -0.550896 0.550896 -0.626919 N2 -0.699411 0.699411 0.147135 + txt003 +STRI + V0 -0.184834 0.314228 3.06667 V1 -0.0977709 0.350254 3.06667 V2 -0.0875289 0.313617 2.98125 + N0 -0.495088 0.856312 0.147029 N1 -0.255913 0.955496 0.146755 N2 -0.201937 0.753688 -0.625441 + txt003 +STRI + V0 -0.0875289 0.313617 2.98125 V1 -0.165481 0.281352 2.98125 V2 -0.184834 0.314228 3.06667 + N0 -0.201937 0.753688 -0.625441 N1 -0.390178 0.674735 -0.626493 N2 -0.495088 0.856312 0.147029 + txt003 +STRI + V0 -0.0977709 0.350254 3.06667 V1 0 0.362963 3.06667 V2 1.11022e-16 0.325 2.98125 + N0 -0.255913 0.955496 0.146755 N1 4.98112e-16 0.989203 0.146549 N2 -1.51803e-15 0.780869 -0.624695 + txt003 +STRI + V0 1.11022e-16 0.325 2.98125 V1 -0.0875289 0.313617 2.98125 V2 -0.0977709 0.350254 3.06667 + N0 -1.51803e-15 0.780869 -0.624695 N1 -0.201937 0.753688 -0.625441 N2 -0.255913 0.955496 0.146755 + txt003 +STRI + V0 -0.325 0 2.98125 V1 -0.313617 0.0875289 2.98125 V2 -0.228728 0.0638032 2.88333 + N0 -0.780869 0 -0.624695 N1 -0.753688 0.201937 -0.625441 N2 -0.721244 0.193465 -0.665116 + txt003 +STRI + V0 -0.228728 0.0638032 2.88333 V1 -0.237037 0 2.88333 V2 -0.325 0 2.98125 + N0 -0.721244 0.193465 -0.665116 N1 -0.747409 0 -0.664364 N2 -0.780869 0 -0.624695 + txt003 +STRI + V0 -0.313617 0.0875289 2.98125 V1 -0.281352 0.165481 2.98125 V2 -0.20518 0.120647 2.88333 + N0 -0.753688 0.201937 -0.625441 N1 -0.674735 0.390178 -0.626493 N2 -0.645526 0.373497 -0.66618 + txt003 +STRI + V0 -0.20518 0.120647 2.88333 V1 -0.228728 0.0638032 2.88333 V2 -0.313617 0.0875289 2.98125 + N0 -0.645526 0.373497 -0.66618 N1 -0.721244 0.193465 -0.665116 N2 -0.753688 0.201937 -0.625441 + txt003 +STRI + V0 -0.281352 0.165481 2.98125 V1 -0.231031 0.231031 2.98125 V2 -0.168463 0.168463 2.88333 + N0 -0.674735 0.390178 -0.626493 N1 -0.550896 0.550896 -0.626919 N2 -0.527081 0.527081 -0.666611 + txt003 +STRI + V0 -0.168463 0.168463 2.88333 V1 -0.20518 0.120647 2.88333 V2 -0.281352 0.165481 2.98125 + N0 -0.527081 0.527081 -0.666611 N1 -0.645526 0.373497 -0.66618 N2 -0.674735 0.390178 -0.626493 + txt003 +STRI + V0 -0.231031 0.231031 2.98125 V1 -0.165481 0.281352 2.98125 V2 -0.120647 0.20518 2.88333 + N0 -0.550896 0.550896 -0.626919 N1 -0.390178 0.674735 -0.626493 N2 -0.373497 0.645526 -0.66618 + txt003 +STRI + V0 -0.120647 0.20518 2.88333 V1 -0.168463 0.168463 2.88333 V2 -0.231031 0.231031 2.98125 + N0 -0.373497 0.645526 -0.66618 N1 -0.527081 0.527081 -0.666611 N2 -0.550896 0.550896 -0.626919 + txt003 +STRI + V0 -0.165481 0.281352 2.98125 V1 -0.0875289 0.313617 2.98125 V2 -0.0638032 0.228728 2.88333 + N0 -0.390178 0.674735 -0.626493 N1 -0.201937 0.753688 -0.625441 N2 -0.193465 0.721244 -0.665116 + txt003 +STRI + V0 -0.0638032 0.228728 2.88333 V1 -0.120647 0.20518 2.88333 V2 -0.165481 0.281352 2.98125 + N0 -0.193465 0.721244 -0.665116 N1 -0.373497 0.645526 -0.66618 N2 -0.390178 0.674735 -0.626493 + txt003 +STRI + V0 -0.0875289 0.313617 2.98125 V1 1.11022e-16 0.325 2.98125 V2 1.11022e-16 0.237037 2.88333 + N0 -0.201937 0.753688 -0.625441 N1 -1.51803e-15 0.780869 -0.624695 N2 -2.42292e-15 0.747409 -0.664364 + txt003 +STRI + V0 1.11022e-16 0.237037 2.88333 V1 -0.0638032 0.228728 2.88333 V2 -0.0875289 0.313617 2.98125 + N0 -2.42292e-15 0.747409 -0.664364 N1 -0.193465 0.721244 -0.665116 N2 -0.201937 0.753688 -0.625441 + txt003 +STRI + V0 -0.237037 0 2.88333 V1 -0.228728 0.0638032 2.88333 V2 -0.165279 0.0460445 2.78542 + N0 -0.747409 0 -0.664364 N1 -0.721244 0.193465 -0.665116 N2 -0.917897 0.246906 -0.310647 + txt003 +STRI + V0 -0.165279 0.0460445 2.78542 V1 -0.171296 0 2.78542 V2 -0.237037 0 2.88333 + N0 -0.917897 0.246906 -0.310647 N1 -0.950775 0 -0.309882 N2 -0.747409 0 -0.664364 + txt003 +STRI + V0 -0.228728 0.0638032 2.88333 V1 -0.20518 0.120647 2.88333 V2 -0.148234 0.0871056 2.78542 + N0 -0.721244 0.193465 -0.665116 N1 -0.645526 0.373497 -0.66618 N2 -0.822132 0.476337 -0.311772 + txt003 +STRI + V0 -0.148234 0.0871056 2.78542 V1 -0.165279 0.0460445 2.78542 V2 -0.228728 0.0638032 2.88333 + N0 -0.822132 0.476337 -0.311772 N1 -0.917897 0.246906 -0.310647 N2 -0.721244 0.193465 -0.665116 + txt003 +STRI + V0 -0.20518 0.120647 2.88333 V1 -0.168463 0.168463 2.88333 V2 -0.121672 0.121672 2.78542 + N0 -0.645526 0.373497 -0.66618 N1 -0.527081 0.527081 -0.666611 N2 -0.671754 0.671754 -0.312241 + txt003 +STRI + V0 -0.121672 0.121672 2.78542 V1 -0.148234 0.0871056 2.78542 V2 -0.20518 0.120647 2.88333 + N0 -0.671754 0.671754 -0.312241 N1 -0.822132 0.476337 -0.311772 N2 -0.645526 0.373497 -0.66618 + txt003 +STRI + V0 -0.168463 0.168463 2.88333 V1 -0.120647 0.20518 2.88333 V2 -0.0871056 0.148234 2.78542 + N0 -0.527081 0.527081 -0.666611 N1 -0.373497 0.645526 -0.66618 N2 -0.476337 0.822132 -0.311772 + txt003 +STRI + V0 -0.0871056 0.148234 2.78542 V1 -0.121672 0.121672 2.78542 V2 -0.168463 0.168463 2.88333 + N0 -0.476337 0.822132 -0.311772 N1 -0.671754 0.671754 -0.312241 N2 -0.527081 0.527081 -0.666611 + txt003 +STRI + V0 -0.120647 0.20518 2.88333 V1 -0.0638032 0.228728 2.88333 V2 -0.0460445 0.165279 2.78542 + N0 -0.373497 0.645526 -0.66618 N1 -0.193465 0.721244 -0.665116 N2 -0.246906 0.917897 -0.310647 + txt003 +STRI + V0 -0.0460445 0.165279 2.78542 V1 -0.0871056 0.148234 2.78542 V2 -0.120647 0.20518 2.88333 + N0 -0.246906 0.917897 -0.310647 N1 -0.476337 0.822132 -0.311772 N2 -0.373497 0.645526 -0.66618 + txt003 +STRI + V0 -0.0638032 0.228728 2.88333 V1 1.11022e-16 0.237037 2.88333 V2 6.66134e-16 0.171296 2.78542 + N0 -0.193465 0.721244 -0.665116 N1 -2.42292e-15 0.747409 -0.664364 N2 -2.16507e-15 0.950775 -0.309882 + txt003 +STRI + V0 6.66134e-16 0.171296 2.78542 V1 -0.0460445 0.165279 2.78542 V2 -0.0638032 0.228728 2.88333 + N0 -2.16507e-15 0.950775 -0.309882 N1 -0.246906 0.917897 -0.310647 N2 -0.193465 0.721244 -0.665116 + txt003 +STRI + V0 -0.171296 0 2.78542 V1 -0.165279 0.0460445 2.78542 V2 -0.192963 0.0537037 2.7 + N0 -0.950775 0 -0.309882 N1 -0.917897 0.246906 -0.310647 N2 -0.578783 0.15602 0.800417 + txt003 +STRI + V0 -0.192963 0.0537037 2.7 V1 -0.2 0 2.7 V2 -0.171296 0 2.78542 + N0 -0.578783 0.15602 0.800417 N1 -0.6 0 0.8 N2 -0.950775 0 -0.309882 + txt003 +STRI + V0 -0.165279 0.0460445 2.78542 V1 -0.148234 0.0871056 2.78542 V2 -0.173037 0.10163 2.7 + N0 -0.917897 0.246906 -0.310647 N1 -0.822132 0.476337 -0.311772 N2 -0.517905 0.300385 0.800964 + txt003 +STRI + V0 -0.173037 0.10163 2.7 V1 -0.192963 0.0537037 2.7 V2 -0.165279 0.0460445 2.78542 + N0 -0.517905 0.300385 0.800964 N1 -0.578783 0.15602 0.800417 N2 -0.917897 0.246906 -0.310647 + txt003 +STRI + V0 -0.148234 0.0871056 2.78542 V1 -0.121672 0.121672 2.78542 V2 -0.142 0.142 2.7 + N0 -0.822132 0.476337 -0.311772 N1 -0.671754 0.671754 -0.312241 N2 -0.423155 0.423155 0.801174 + txt003 +STRI + V0 -0.142 0.142 2.7 V1 -0.173037 0.10163 2.7 V2 -0.148234 0.0871056 2.78542 + N0 -0.423155 0.423155 0.801174 N1 -0.517905 0.300385 0.800964 N2 -0.822132 0.476337 -0.311772 + txt003 +STRI + V0 -0.121672 0.121672 2.78542 V1 -0.0871056 0.148234 2.78542 V2 -0.10163 0.173037 2.7 + N0 -0.671754 0.671754 -0.312241 N1 -0.476337 0.822132 -0.311772 N2 -0.300385 0.517905 0.800964 + txt003 +STRI + V0 -0.10163 0.173037 2.7 V1 -0.142 0.142 2.7 V2 -0.121672 0.121672 2.78542 + N0 -0.300385 0.517905 0.800964 N1 -0.423155 0.423155 0.801174 N2 -0.671754 0.671754 -0.312241 + txt003 +STRI + V0 -0.0871056 0.148234 2.78542 V1 -0.0460445 0.165279 2.78542 V2 -0.0537037 0.192963 2.7 + N0 -0.476337 0.822132 -0.311772 N1 -0.246906 0.917897 -0.310647 N2 -0.15602 0.578783 0.800417 + txt003 +STRI + V0 -0.0537037 0.192963 2.7 V1 -0.10163 0.173037 2.7 V2 -0.0871056 0.148234 2.78542 + N0 -0.15602 0.578783 0.800417 N1 -0.300385 0.517905 0.800964 N2 -0.476337 0.822132 -0.311772 + txt003 +STRI + V0 -0.0460445 0.165279 2.78542 V1 6.66134e-16 0.171296 2.78542 V2 0 0.2 2.7 + N0 -0.246906 0.917897 -0.310647 N1 -2.16507e-15 0.950775 -0.309882 N2 3.17207e-15 0.6 0.8 + txt003 +STRI + V0 0 0.2 2.7 V1 -0.0537037 0.192963 2.7 V2 -0.0460445 0.165279 2.78542 + N0 3.17207e-15 0.6 0.8 N1 -0.15602 0.578783 0.800417 N2 -0.246906 0.917897 -0.310647 + txt003 +STRI + V0 0.0750782 0.268946 3.12708 V1 0 0.278704 3.12708 V2 0 0 3.15 + N0 0.0645609 0.241077 0.968356 N1 -0 0.249998 0.968246 N2 0 0 1 + txt003 +STRI + V0 0.141931 0.241285 3.12708 V1 0.0750782 0.268946 3.12708 V2 0 0 3.15 + N0 0.124615 0.215548 0.968509 N1 0.0645609 0.241077 0.968356 N2 0 0 1 + txt003 +STRI + V0 0.19814 0.19814 3.12708 V1 0.141931 0.241285 3.12708 V2 0 0 3.15 + N0 0.175885 0.175885 0.96857 N1 0.124615 0.215548 0.968509 N2 0 0 1 + txt003 +STRI + V0 0.241285 0.141931 3.12708 V1 0.19814 0.19814 3.12708 V2 0 0 3.15 + N0 0.215548 0.124615 0.968509 N1 0.175885 0.175885 0.96857 N2 0 0 1 + txt003 +STRI + V0 0.268946 0.0750782 3.12708 V1 0.241285 0.141931 3.12708 V2 0 0 3.15 + N0 0.241077 0.0645609 0.968356 N1 0.215548 0.124615 0.968509 N2 0 0 1 + txt003 +STRI + V0 0.278704 0 3.12708 V1 0.268946 0.0750782 3.12708 V2 0 0 3.15 + N0 0.249998 -2.80184e-15 0.968246 N1 0.241077 0.0645609 0.968356 N2 0 0 1 + txt003 +STRI + V0 0 0.278704 3.12708 V1 0.0750782 0.268946 3.12708 V2 0.0977709 0.350254 3.06667 + N0 -0 0.249998 0.968246 N1 0.0645609 0.241077 0.968356 N2 0.255913 0.955496 0.146755 + txt003 +STRI + V0 0.0977709 0.350254 3.06667 V1 0 0.362963 3.06667 V2 0 0.278704 3.12708 + N0 0.255913 0.955496 0.146755 N1 -0 0.989203 0.146549 N2 -0 0.249998 0.968246 + txt003 +STRI + V0 0.0750782 0.268946 3.12708 V1 0.141931 0.241285 3.12708 V2 0.184834 0.314228 3.06667 + N0 0.0645609 0.241077 0.968356 N1 0.124615 0.215548 0.968509 N2 0.495088 0.856312 0.147029 + txt003 +STRI + V0 0.184834 0.314228 3.06667 V1 0.0977709 0.350254 3.06667 V2 0.0750782 0.268946 3.12708 + N0 0.495088 0.856312 0.147029 N1 0.255913 0.955496 0.146755 N2 0.0645609 0.241077 0.968356 + txt003 +STRI + V0 0.141931 0.241285 3.12708 V1 0.19814 0.19814 3.12708 V2 0.258037 0.258037 3.06667 + N0 0.124615 0.215548 0.968509 N1 0.175885 0.175885 0.96857 N2 0.699411 0.699411 0.147135 + txt003 +STRI + V0 0.258037 0.258037 3.06667 V1 0.184834 0.314228 3.06667 V2 0.141931 0.241285 3.12708 + N0 0.699411 0.699411 0.147135 N1 0.495088 0.856312 0.147029 N2 0.124615 0.215548 0.968509 + txt003 +STRI + V0 0.19814 0.19814 3.12708 V1 0.241285 0.141931 3.12708 V2 0.314228 0.184834 3.06667 + N0 0.175885 0.175885 0.96857 N1 0.215548 0.124615 0.968509 N2 0.856312 0.495088 0.147029 + txt003 +STRI + V0 0.314228 0.184834 3.06667 V1 0.258037 0.258037 3.06667 V2 0.19814 0.19814 3.12708 + N0 0.856312 0.495088 0.147029 N1 0.699411 0.699411 0.147135 N2 0.175885 0.175885 0.96857 + txt003 +STRI + V0 0.241285 0.141931 3.12708 V1 0.268946 0.0750782 3.12708 V2 0.350254 0.0977709 3.06667 + N0 0.215548 0.124615 0.968509 N1 0.241077 0.0645609 0.968356 N2 0.955496 0.255913 0.146755 + txt003 +STRI + V0 0.350254 0.0977709 3.06667 V1 0.314228 0.184834 3.06667 V2 0.241285 0.141931 3.12708 + N0 0.955496 0.255913 0.146755 N1 0.856312 0.495088 0.147029 N2 0.215548 0.124615 0.968509 + txt003 +STRI + V0 0.268946 0.0750782 3.12708 V1 0.278704 0 3.12708 V2 0.362963 0 3.06667 + N0 0.241077 0.0645609 0.968356 N1 0.249998 -2.80184e-15 0.968246 N2 0.989203 -4.98112e-16 0.146549 + txt003 +STRI + V0 0.362963 0 3.06667 V1 0.350254 0.0977709 3.06667 V2 0.268946 0.0750782 3.12708 + N0 0.989203 -4.98112e-16 0.146549 N1 0.955496 0.255913 0.146755 N2 0.241077 0.0645609 0.968356 + txt003 +STRI + V0 0 0.362963 3.06667 V1 0.0977709 0.350254 3.06667 V2 0.0875289 0.313617 2.98125 + N0 -0 0.989203 0.146549 N1 0.255913 0.955496 0.146755 N2 0.201937 0.753688 -0.625441 + txt003 +STRI + V0 0.0875289 0.313617 2.98125 V1 0 0.325 2.98125 V2 0 0.362963 3.06667 + N0 0.201937 0.753688 -0.625441 N1 0 0.780869 -0.624695 N2 -0 0.989203 0.146549 + txt003 +STRI + V0 0.0977709 0.350254 3.06667 V1 0.184834 0.314228 3.06667 V2 0.165481 0.281352 2.98125 + N0 0.255913 0.955496 0.146755 N1 0.495088 0.856312 0.147029 N2 0.390178 0.674735 -0.626493 + txt003 +STRI + V0 0.165481 0.281352 2.98125 V1 0.0875289 0.313617 2.98125 V2 0.0977709 0.350254 3.06667 + N0 0.390178 0.674735 -0.626493 N1 0.201937 0.753688 -0.625441 N2 0.255913 0.955496 0.146755 + txt003 +STRI + V0 0.184834 0.314228 3.06667 V1 0.258037 0.258037 3.06667 V2 0.231031 0.231031 2.98125 + N0 0.495088 0.856312 0.147029 N1 0.699411 0.699411 0.147135 N2 0.550896 0.550896 -0.626919 + txt003 +STRI + V0 0.231031 0.231031 2.98125 V1 0.165481 0.281352 2.98125 V2 0.184834 0.314228 3.06667 + N0 0.550896 0.550896 -0.626919 N1 0.390178 0.674735 -0.626493 N2 0.495088 0.856312 0.147029 + txt003 +STRI + V0 0.258037 0.258037 3.06667 V1 0.314228 0.184834 3.06667 V2 0.281352 0.165481 2.98125 + N0 0.699411 0.699411 0.147135 N1 0.856312 0.495088 0.147029 N2 0.674735 0.390178 -0.626493 + txt003 +STRI + V0 0.281352 0.165481 2.98125 V1 0.231031 0.231031 2.98125 V2 0.258037 0.258037 3.06667 + N0 0.674735 0.390178 -0.626493 N1 0.550896 0.550896 -0.626919 N2 0.699411 0.699411 0.147135 + txt003 +STRI + V0 0.314228 0.184834 3.06667 V1 0.350254 0.0977709 3.06667 V2 0.313617 0.0875289 2.98125 + N0 0.856312 0.495088 0.147029 N1 0.955496 0.255913 0.146755 N2 0.753688 0.201937 -0.625441 + txt003 +STRI + V0 0.313617 0.0875289 2.98125 V1 0.281352 0.165481 2.98125 V2 0.314228 0.184834 3.06667 + N0 0.753688 0.201937 -0.625441 N1 0.674735 0.390178 -0.626493 N2 0.856312 0.495088 0.147029 + txt003 +STRI + V0 0.350254 0.0977709 3.06667 V1 0.362963 0 3.06667 V2 0.325 -1.11022e-16 2.98125 + N0 0.955496 0.255913 0.146755 N1 0.989203 -4.98112e-16 0.146549 N2 0.780869 1.51803e-15 -0.624695 + txt003 +STRI + V0 0.325 -1.11022e-16 2.98125 V1 0.313617 0.0875289 2.98125 V2 0.350254 0.0977709 3.06667 + N0 0.780869 1.51803e-15 -0.624695 N1 0.753688 0.201937 -0.625441 N2 0.955496 0.255913 0.146755 + txt003 +STRI + V0 0 0.325 2.98125 V1 0.0875289 0.313617 2.98125 V2 0.0638032 0.228728 2.88333 + N0 0 0.780869 -0.624695 N1 0.201937 0.753688 -0.625441 N2 0.193465 0.721244 -0.665116 + txt003 +STRI + V0 0.0638032 0.228728 2.88333 V1 0 0.237037 2.88333 V2 0 0.325 2.98125 + N0 0.193465 0.721244 -0.665116 N1 0 0.747409 -0.664364 N2 0 0.780869 -0.624695 + txt003 +STRI + V0 0.0875289 0.313617 2.98125 V1 0.165481 0.281352 2.98125 V2 0.120647 0.20518 2.88333 + N0 0.201937 0.753688 -0.625441 N1 0.390178 0.674735 -0.626493 N2 0.373497 0.645526 -0.66618 + txt003 +STRI + V0 0.120647 0.20518 2.88333 V1 0.0638032 0.228728 2.88333 V2 0.0875289 0.313617 2.98125 + N0 0.373497 0.645526 -0.66618 N1 0.193465 0.721244 -0.665116 N2 0.201937 0.753688 -0.625441 + txt003 +STRI + V0 0.165481 0.281352 2.98125 V1 0.231031 0.231031 2.98125 V2 0.168463 0.168463 2.88333 + N0 0.390178 0.674735 -0.626493 N1 0.550896 0.550896 -0.626919 N2 0.527081 0.527081 -0.666611 + txt003 +STRI + V0 0.168463 0.168463 2.88333 V1 0.120647 0.20518 2.88333 V2 0.165481 0.281352 2.98125 + N0 0.527081 0.527081 -0.666611 N1 0.373497 0.645526 -0.66618 N2 0.390178 0.674735 -0.626493 + txt003 +STRI + V0 0.231031 0.231031 2.98125 V1 0.281352 0.165481 2.98125 V2 0.20518 0.120647 2.88333 + N0 0.550896 0.550896 -0.626919 N1 0.674735 0.390178 -0.626493 N2 0.645526 0.373497 -0.66618 + txt003 +STRI + V0 0.20518 0.120647 2.88333 V1 0.168463 0.168463 2.88333 V2 0.231031 0.231031 2.98125 + N0 0.645526 0.373497 -0.66618 N1 0.527081 0.527081 -0.666611 N2 0.550896 0.550896 -0.626919 + txt003 +STRI + V0 0.281352 0.165481 2.98125 V1 0.313617 0.0875289 2.98125 V2 0.228728 0.0638032 2.88333 + N0 0.674735 0.390178 -0.626493 N1 0.753688 0.201937 -0.625441 N2 0.721244 0.193465 -0.665116 + txt003 +STRI + V0 0.228728 0.0638032 2.88333 V1 0.20518 0.120647 2.88333 V2 0.281352 0.165481 2.98125 + N0 0.721244 0.193465 -0.665116 N1 0.645526 0.373497 -0.66618 N2 0.674735 0.390178 -0.626493 + txt003 +STRI + V0 0.313617 0.0875289 2.98125 V1 0.325 -1.11022e-16 2.98125 V2 0.237037 -1.11022e-16 2.88333 + N0 0.753688 0.201937 -0.625441 N1 0.780869 1.51803e-15 -0.624695 N2 0.747409 2.42292e-15 -0.664364 + txt003 +STRI + V0 0.237037 -1.11022e-16 2.88333 V1 0.228728 0.0638032 2.88333 V2 0.313617 0.0875289 2.98125 + N0 0.747409 2.42292e-15 -0.664364 N1 0.721244 0.193465 -0.665116 N2 0.753688 0.201937 -0.625441 + txt003 +STRI + V0 0 0.237037 2.88333 V1 0.0638032 0.228728 2.88333 V2 0.0460445 0.165279 2.78542 + N0 0 0.747409 -0.664364 N1 0.193465 0.721244 -0.665116 N2 0.246906 0.917897 -0.310647 + txt003 +STRI + V0 0.0460445 0.165279 2.78542 V1 0 0.171296 2.78542 V2 0 0.237037 2.88333 + N0 0.246906 0.917897 -0.310647 N1 0 0.950775 -0.309882 N2 0 0.747409 -0.664364 + txt003 +STRI + V0 0.0638032 0.228728 2.88333 V1 0.120647 0.20518 2.88333 V2 0.0871056 0.148234 2.78542 + N0 0.193465 0.721244 -0.665116 N1 0.373497 0.645526 -0.66618 N2 0.476337 0.822132 -0.311772 + txt003 +STRI + V0 0.0871056 0.148234 2.78542 V1 0.0460445 0.165279 2.78542 V2 0.0638032 0.228728 2.88333 + N0 0.476337 0.822132 -0.311772 N1 0.246906 0.917897 -0.310647 N2 0.193465 0.721244 -0.665116 + txt003 +STRI + V0 0.120647 0.20518 2.88333 V1 0.168463 0.168463 2.88333 V2 0.121672 0.121672 2.78542 + N0 0.373497 0.645526 -0.66618 N1 0.527081 0.527081 -0.666611 N2 0.671754 0.671754 -0.312241 + txt003 +STRI + V0 0.121672 0.121672 2.78542 V1 0.0871056 0.148234 2.78542 V2 0.120647 0.20518 2.88333 + N0 0.671754 0.671754 -0.312241 N1 0.476337 0.822132 -0.311772 N2 0.373497 0.645526 -0.66618 + txt003 +STRI + V0 0.168463 0.168463 2.88333 V1 0.20518 0.120647 2.88333 V2 0.148234 0.0871056 2.78542 + N0 0.527081 0.527081 -0.666611 N1 0.645526 0.373497 -0.66618 N2 0.822132 0.476337 -0.311772 + txt003 +STRI + V0 0.148234 0.0871056 2.78542 V1 0.121672 0.121672 2.78542 V2 0.168463 0.168463 2.88333 + N0 0.822132 0.476337 -0.311772 N1 0.671754 0.671754 -0.312241 N2 0.527081 0.527081 -0.666611 + txt003 +STRI + V0 0.20518 0.120647 2.88333 V1 0.228728 0.0638032 2.88333 V2 0.165279 0.0460445 2.78542 + N0 0.645526 0.373497 -0.66618 N1 0.721244 0.193465 -0.665116 N2 0.917897 0.246906 -0.310647 + txt003 +STRI + V0 0.165279 0.0460445 2.78542 V1 0.148234 0.0871056 2.78542 V2 0.20518 0.120647 2.88333 + N0 0.917897 0.246906 -0.310647 N1 0.822132 0.476337 -0.311772 N2 0.645526 0.373497 -0.66618 + txt003 +STRI + V0 0.228728 0.0638032 2.88333 V1 0.237037 -1.11022e-16 2.88333 V2 0.171296 -6.66134e-16 2.78542 + N0 0.721244 0.193465 -0.665116 N1 0.747409 2.42292e-15 -0.664364 N2 0.950775 2.16507e-15 -0.309882 + txt003 +STRI + V0 0.171296 -6.66134e-16 2.78542 V1 0.165279 0.0460445 2.78542 V2 0.228728 0.0638032 2.88333 + N0 0.950775 2.16507e-15 -0.309882 N1 0.917897 0.246906 -0.310647 N2 0.721244 0.193465 -0.665116 + txt003 +STRI + V0 0 0.171296 2.78542 V1 0.0460445 0.165279 2.78542 V2 0.0537037 0.192963 2.7 + N0 0 0.950775 -0.309882 N1 0.246906 0.917897 -0.310647 N2 0.15602 0.578783 0.800417 + txt003 +STRI + V0 0.0537037 0.192963 2.7 V1 0 0.2 2.7 V2 0 0.171296 2.78542 + N0 0.15602 0.578783 0.800417 N1 -0 0.6 0.8 N2 0 0.950775 -0.309882 + txt003 +STRI + V0 0.0460445 0.165279 2.78542 V1 0.0871056 0.148234 2.78542 V2 0.10163 0.173037 2.7 + N0 0.246906 0.917897 -0.310647 N1 0.476337 0.822132 -0.311772 N2 0.300385 0.517905 0.800964 + txt003 +STRI + V0 0.10163 0.173037 2.7 V1 0.0537037 0.192963 2.7 V2 0.0460445 0.165279 2.78542 + N0 0.300385 0.517905 0.800964 N1 0.15602 0.578783 0.800417 N2 0.246906 0.917897 -0.310647 + txt003 +STRI + V0 0.0871056 0.148234 2.78542 V1 0.121672 0.121672 2.78542 V2 0.142 0.142 2.7 + N0 0.476337 0.822132 -0.311772 N1 0.671754 0.671754 -0.312241 N2 0.423155 0.423155 0.801174 + txt003 +STRI + V0 0.142 0.142 2.7 V1 0.10163 0.173037 2.7 V2 0.0871056 0.148234 2.78542 + N0 0.423155 0.423155 0.801174 N1 0.300385 0.517905 0.800964 N2 0.476337 0.822132 -0.311772 + txt003 +STRI + V0 0.121672 0.121672 2.78542 V1 0.148234 0.0871056 2.78542 V2 0.173037 0.10163 2.7 + N0 0.671754 0.671754 -0.312241 N1 0.822132 0.476337 -0.311772 N2 0.517905 0.300385 0.800964 + txt003 +STRI + V0 0.173037 0.10163 2.7 V1 0.142 0.142 2.7 V2 0.121672 0.121672 2.78542 + N0 0.517905 0.300385 0.800964 N1 0.423155 0.423155 0.801174 N2 0.671754 0.671754 -0.312241 + txt003 +STRI + V0 0.148234 0.0871056 2.78542 V1 0.165279 0.0460445 2.78542 V2 0.192963 0.0537037 2.7 + N0 0.822132 0.476337 -0.311772 N1 0.917897 0.246906 -0.310647 N2 0.578783 0.15602 0.800417 + txt003 +STRI + V0 0.192963 0.0537037 2.7 V1 0.173037 0.10163 2.7 V2 0.148234 0.0871056 2.78542 + N0 0.578783 0.15602 0.800417 N1 0.517905 0.300385 0.800964 N2 0.822132 0.476337 -0.311772 + txt003 +STRI + V0 0.165279 0.0460445 2.78542 V1 0.171296 -6.66134e-16 2.78542 V2 0.2 0 2.7 + N0 0.917897 0.246906 -0.310647 N1 0.950775 2.16507e-15 -0.309882 N2 0.6 -3.17207e-15 0.8 + txt003 +STRI + V0 0.2 0 2.7 V1 0.192963 0.0537037 2.7 V2 0.165279 0.0460445 2.78542 + N0 0.6 -3.17207e-15 0.8 N1 0.578783 0.15602 0.800417 N2 0.917897 0.246906 -0.310647 + txt003 +STRI + V0 0.2 0 2.7 V1 0.192963 -0.0537037 2.7 V2 0.338579 -0.0942301 2.63611 + N0 0.6 0 0.8 N1 0.578783 -0.15602 0.800417 N2 0.258756 -0.0697517 0.963421 + txt003 +STRI + V0 0.338579 -0.0942301 2.63611 V1 0.350926 0 2.63611 V2 0.2 0 2.7 + N0 0.258756 -0.0697517 0.963421 N1 0.268354 0 0.96332 N2 0.6 0 0.8 + txt003 +STRI + V0 0.192963 -0.0537037 2.7 V1 0.173037 -0.10163 2.7 V2 0.303616 -0.178322 2.63611 + N0 0.578783 -0.15602 0.800417 N1 0.517905 -0.300385 0.800964 N2 0.231413 -0.134219 0.963552 + txt003 +STRI + V0 0.303616 -0.178322 2.63611 V1 0.338579 -0.0942301 2.63611 V2 0.192963 -0.0537037 2.7 + N0 0.231413 -0.134219 0.963552 N1 0.258756 -0.0697517 0.963421 N2 0.578783 -0.15602 0.800417 + txt003 +STRI + V0 0.173037 -0.10163 2.7 V1 0.142 -0.142 2.7 V2 0.249157 -0.249157 2.63611 + N0 0.517905 -0.300385 0.800964 N1 0.423155 -0.423155 0.801174 N2 0.189037 -0.189037 0.963603 + txt003 +STRI + V0 0.249157 -0.249157 2.63611 V1 0.303616 -0.178322 2.63611 V2 0.173037 -0.10163 2.7 + N0 0.189037 -0.189037 0.963603 N1 0.231413 -0.134219 0.963552 N2 0.517905 -0.300385 0.800964 + txt003 +STRI + V0 0.142 -0.142 2.7 V1 0.10163 -0.173037 2.7 V2 0.178322 -0.303616 2.63611 + N0 0.423155 -0.423155 0.801174 N1 0.300385 -0.517905 0.800964 N2 0.134219 -0.231413 0.963552 + txt003 +STRI + V0 0.178322 -0.303616 2.63611 V1 0.249157 -0.249157 2.63611 V2 0.142 -0.142 2.7 + N0 0.134219 -0.231413 0.963552 N1 0.189037 -0.189037 0.963603 N2 0.423155 -0.423155 0.801174 + txt003 +STRI + V0 0.10163 -0.173037 2.7 V1 0.0537037 -0.192963 2.7 V2 0.0942301 -0.338579 2.63611 + N0 0.300385 -0.517905 0.800964 N1 0.15602 -0.578783 0.800417 N2 0.0697517 -0.258756 0.963421 + txt003 +STRI + V0 0.0942301 -0.338579 2.63611 V1 0.178322 -0.303616 2.63611 V2 0.10163 -0.173037 2.7 + N0 0.0697517 -0.258756 0.963421 N1 0.134219 -0.231413 0.963552 N2 0.300385 -0.517905 0.800964 + txt003 +STRI + V0 0.0537037 -0.192963 2.7 V1 0 -0.2 2.7 V2 5.55112e-17 -0.350926 2.63611 + N0 0.15602 -0.578783 0.800417 N1 -9.91271e-17 -0.6 0.8 N2 0 -0.268354 0.96332 + txt003 +STRI + V0 5.55112e-17 -0.350926 2.63611 V1 0.0942301 -0.338579 2.63611 V2 0.0537037 -0.192963 2.7 + N0 0 -0.268354 0.96332 N1 0.0697517 -0.258756 0.963421 N2 0.15602 -0.578783 0.800417 + txt003 +STRI + V0 0.350926 0 2.63611 V1 0.338579 -0.0942301 2.63611 V2 0.553875 -0.15415 2.58889 + N0 0.268354 0 0.96332 N1 0.258756 -0.0697517 0.963421 N2 0.162011 -0.0436726 0.985822 + txt003 +STRI + V0 0.553875 -0.15415 2.58889 V1 0.574074 0 2.58889 V2 0.350926 0 2.63611 + N0 0.162011 -0.0436726 0.985822 N1 0.168031 0 0.985782 N2 0.268354 0 0.96332 + txt003 +STRI + V0 0.338579 -0.0942301 2.63611 V1 0.303616 -0.178322 2.63611 V2 0.49668 -0.291715 2.58889 + N0 0.258756 -0.0697517 0.963421 N1 0.231413 -0.134219 0.963552 N2 0.144879 -0.0840299 0.985875 + txt003 +STRI + V0 0.49668 -0.291715 2.58889 V1 0.553875 -0.15415 2.58889 V2 0.338579 -0.0942301 2.63611 + N0 0.144879 -0.0840299 0.985875 N1 0.162011 -0.0436726 0.985822 N2 0.258756 -0.0697517 0.963421 + txt003 +STRI + V0 0.303616 -0.178322 2.63611 V1 0.249157 -0.249157 2.63611 V2 0.407593 -0.407593 2.58889 + N0 0.231413 -0.134219 0.963552 N1 0.189037 -0.189037 0.963603 N2 0.118345 -0.118345 0.985895 + txt003 +STRI + V0 0.407593 -0.407593 2.58889 V1 0.49668 -0.291715 2.58889 V2 0.303616 -0.178322 2.63611 + N0 0.118345 -0.118345 0.985895 N1 0.144879 -0.0840299 0.985875 N2 0.231413 -0.134219 0.963552 + txt003 +STRI + V0 0.249157 -0.249157 2.63611 V1 0.178322 -0.303616 2.63611 V2 0.291715 -0.49668 2.58889 + N0 0.189037 -0.189037 0.963603 N1 0.134219 -0.231413 0.963552 N2 0.0840299 -0.144879 0.985875 + txt003 +STRI + V0 0.291715 -0.49668 2.58889 V1 0.407593 -0.407593 2.58889 V2 0.249157 -0.249157 2.63611 + N0 0.0840299 -0.144879 0.985875 N1 0.118345 -0.118345 0.985895 N2 0.189037 -0.189037 0.963603 + txt003 +STRI + V0 0.178322 -0.303616 2.63611 V1 0.0942301 -0.338579 2.63611 V2 0.15415 -0.553875 2.58889 + N0 0.134219 -0.231413 0.963552 N1 0.0697517 -0.258756 0.963421 N2 0.0436726 -0.162011 0.985822 + txt003 +STRI + V0 0.15415 -0.553875 2.58889 V1 0.291715 -0.49668 2.58889 V2 0.178322 -0.303616 2.63611 + N0 0.0436726 -0.162011 0.985822 N1 0.0840299 -0.144879 0.985875 N2 0.134219 -0.231413 0.963552 + txt003 +STRI + V0 0.0942301 -0.338579 2.63611 V1 5.55112e-17 -0.350926 2.63611 V2 2.22045e-16 -0.574074 2.58889 + N0 0.0697517 -0.258756 0.963421 N1 0 -0.268354 0.96332 N2 -1.93429e-17 -0.168031 0.985782 + txt003 +STRI + V0 2.22045e-16 -0.574074 2.58889 V1 0.15415 -0.553875 2.58889 V2 0.0942301 -0.338579 2.63611 + N0 -1.93429e-17 -0.168031 0.985782 N1 0.0436726 -0.162011 0.985822 N2 0.0697517 -0.258756 0.963421 + txt003 +STRI + V0 0.574074 0 2.58889 V1 0.553875 -0.15415 2.58889 V2 0.795972 -0.221528 2.55 + N0 0.168031 0 0.985782 N1 0.162011 -0.0436726 0.985822 N2 0.143025 -0.0385545 0.988968 + txt003 +STRI + V0 0.795972 -0.221528 2.55 V1 0.825 0 2.55 V2 0.574074 0 2.58889 + N0 0.143025 -0.0385545 0.988968 N1 0.14834 0 0.988936 N2 0.168031 0 0.985782 + txt003 +STRI + V0 0.553875 -0.15415 2.58889 V1 0.49668 -0.291715 2.58889 V2 0.713778 -0.419222 2.55 + N0 0.162011 -0.0436726 0.985822 N1 0.144879 -0.0840299 0.985875 N2 0.127899 -0.0741814 0.989009 + txt003 +STRI + V0 0.713778 -0.419222 2.55 V1 0.795972 -0.221528 2.55 V2 0.553875 -0.15415 2.58889 + N0 0.127899 -0.0741814 0.989009 N1 0.143025 -0.0385545 0.988968 N2 0.162011 -0.0436726 0.985822 + txt003 +STRI + V0 0.49668 -0.291715 2.58889 V1 0.407593 -0.407593 2.58889 V2 0.58575 -0.58575 2.55 + N0 0.144879 -0.0840299 0.985875 N1 0.118345 -0.118345 0.985895 N2 0.104474 -0.104474 0.989025 + txt003 +STRI + V0 0.58575 -0.58575 2.55 V1 0.713778 -0.419222 2.55 V2 0.49668 -0.291715 2.58889 + N0 0.104474 -0.104474 0.989025 N1 0.127899 -0.0741814 0.989009 N2 0.144879 -0.0840299 0.985875 + txt003 +STRI + V0 0.407593 -0.407593 2.58889 V1 0.291715 -0.49668 2.58889 V2 0.419222 -0.713778 2.55 + N0 0.118345 -0.118345 0.985895 N1 0.0840299 -0.144879 0.985875 N2 0.0741814 -0.127899 0.989009 + txt003 +STRI + V0 0.419222 -0.713778 2.55 V1 0.58575 -0.58575 2.55 V2 0.407593 -0.407593 2.58889 + N0 0.0741814 -0.127899 0.989009 N1 0.104474 -0.104474 0.989025 N2 0.118345 -0.118345 0.985895 + txt003 +STRI + V0 0.291715 -0.49668 2.58889 V1 0.15415 -0.553875 2.58889 V2 0.221528 -0.795972 2.55 + N0 0.0840299 -0.144879 0.985875 N1 0.0436726 -0.162011 0.985822 N2 0.0385545 -0.143025 0.988968 + txt003 +STRI + V0 0.221528 -0.795972 2.55 V1 0.419222 -0.713778 2.55 V2 0.291715 -0.49668 2.58889 + N0 0.0385545 -0.143025 0.988968 N1 0.0741814 -0.127899 0.989009 N2 0.0840299 -0.144879 0.985875 + txt003 +STRI + V0 0.15415 -0.553875 2.58889 V1 2.22045e-16 -0.574074 2.58889 V2 1.11022e-16 -0.825 2.55 + N0 0.0436726 -0.162011 0.985822 N1 -1.93429e-17 -0.168031 0.985782 N2 -2.37649e-17 -0.14834 0.988936 + txt003 +STRI + V0 1.11022e-16 -0.825 2.55 V1 0.221528 -0.795972 2.55 V2 0.15415 -0.553875 2.58889 + N0 -2.37649e-17 -0.14834 0.988936 N1 0.0385545 -0.143025 0.988968 N2 0.0436726 -0.162011 0.985822 + txt003 +STRI + V0 0.825 0 2.55 V1 0.795972 -0.221528 2.55 V2 1.02199 -0.284431 2.51111 + N0 0.14834 0 0.988936 N1 0.143025 -0.0385545 0.988968 N2 0.186699 -0.0503275 0.981127 + txt003 +STRI + V0 1.02199 -0.284431 2.51111 V1 1.05926 0 2.51111 V2 0.825 0 2.55 + N0 0.186699 -0.0503275 0.981127 N1 0.193633 0 0.981074 N2 0.14834 0 0.988936 + txt003 +STRI + V0 0.795972 -0.221528 2.55 V1 0.713778 -0.419222 2.55 V2 0.916455 -0.538261 2.51111 + N0 0.143025 -0.0385545 0.988968 N1 0.127899 -0.0741814 0.989009 N2 0.166959 -0.0968361 0.981197 + txt003 +STRI + V0 0.916455 -0.538261 2.51111 V1 1.02199 -0.284431 2.51111 V2 0.795972 -0.221528 2.55 + N0 0.166959 -0.0968361 0.981197 N1 0.186699 -0.0503275 0.981127 N2 0.143025 -0.0385545 0.988968 + txt003 +STRI + V0 0.713778 -0.419222 2.55 V1 0.58575 -0.58575 2.55 V2 0.752074 -0.752074 2.51111 + N0 0.127899 -0.0741814 0.989009 N1 0.104474 -0.104474 0.989025 N2 0.136382 -0.136382 0.981224 + txt003 +STRI + V0 0.752074 -0.752074 2.51111 V1 0.916455 -0.538261 2.51111 V2 0.713778 -0.419222 2.55 + N0 0.136382 -0.136382 0.981224 N1 0.166959 -0.0968361 0.981197 N2 0.127899 -0.0741814 0.989009 + txt003 +STRI + V0 0.58575 -0.58575 2.55 V1 0.419222 -0.713778 2.55 V2 0.538261 -0.916455 2.51111 + N0 0.104474 -0.104474 0.989025 N1 0.0741814 -0.127899 0.989009 N2 0.0968361 -0.166959 0.981197 + txt003 +STRI + V0 0.538261 -0.916455 2.51111 V1 0.752074 -0.752074 2.51111 V2 0.58575 -0.58575 2.55 + N0 0.0968361 -0.166959 0.981197 N1 0.136382 -0.136382 0.981224 N2 0.104474 -0.104474 0.989025 + txt003 +STRI + V0 0.419222 -0.713778 2.55 V1 0.221528 -0.795972 2.55 V2 0.284431 -1.02199 2.51111 + N0 0.0741814 -0.127899 0.989009 N1 0.0385545 -0.143025 0.988968 N2 0.0503275 -0.186699 0.981127 + txt003 +STRI + V0 0.284431 -1.02199 2.51111 V1 0.538261 -0.916455 2.51111 V2 0.419222 -0.713778 2.55 + N0 0.0503275 -0.186699 0.981127 N1 0.0968361 -0.166959 0.981197 N2 0.0741814 -0.127899 0.989009 + txt003 +STRI + V0 0.221528 -0.795972 2.55 V1 1.11022e-16 -0.825 2.55 V2 4.44089e-16 -1.05926 2.51111 + N0 0.0385545 -0.143025 0.988968 N1 -2.37649e-17 -0.14834 0.988936 N2 -7.24819e-17 -0.193633 0.981074 + txt003 +STRI + V0 4.44089e-16 -1.05926 2.51111 V1 0.284431 -1.02199 2.51111 V2 0.221528 -0.795972 2.55 + N0 -7.24819e-17 -0.193633 0.981074 N1 0.0503275 -0.186699 0.981127 N2 0.0385545 -0.143025 0.988968 + txt003 +STRI + V0 1.05926 0 2.51111 V1 1.02199 -0.284431 2.51111 V2 1.18904 -0.330924 2.46389 + N0 0.193633 0 0.981074 N1 0.186699 -0.0503275 0.981127 N2 0.376378 -0.101459 0.920894 + txt003 +STRI + V0 1.18904 -0.330924 2.46389 V1 1.23241 0 2.46389 V2 1.05926 0 2.51111 + N0 0.376378 -0.101459 0.920894 N1 0.390293 0 0.920691 N2 0.193633 0 0.981074 + txt003 +STRI + V0 1.02199 -0.284431 2.51111 V1 0.916455 -0.538261 2.51111 V2 1.06626 -0.626246 2.46389 + N0 0.186699 -0.0503275 0.981127 N1 0.166959 -0.0968361 0.981197 N2 0.336657 -0.195261 0.92116 + txt003 +STRI + V0 1.06626 -0.626246 2.46389 V1 1.18904 -0.330924 2.46389 V2 1.02199 -0.284431 2.51111 + N0 0.336657 -0.195261 0.92116 N1 0.376378 -0.101459 0.920894 N2 0.186699 -0.0503275 0.981127 + txt003 +STRI + V0 0.916455 -0.538261 2.51111 V1 0.752074 -0.752074 2.51111 V2 0.875009 -0.875009 2.46389 + N0 0.166959 -0.0968361 0.981197 N1 0.136382 -0.136382 0.981224 N2 0.275025 -0.275025 0.921262 + txt003 +STRI + V0 0.875009 -0.875009 2.46389 V1 1.06626 -0.626246 2.46389 V2 0.916455 -0.538261 2.51111 + N0 0.275025 -0.275025 0.921262 N1 0.336657 -0.195261 0.92116 N2 0.166959 -0.0968361 0.981197 + txt003 +STRI + V0 0.752074 -0.752074 2.51111 V1 0.538261 -0.916455 2.51111 V2 0.626246 -1.06626 2.46389 + N0 0.136382 -0.136382 0.981224 N1 0.0968361 -0.166959 0.981197 N2 0.195261 -0.336657 0.92116 + txt003 +STRI + V0 0.626246 -1.06626 2.46389 V1 0.875009 -0.875009 2.46389 V2 0.752074 -0.752074 2.51111 + N0 0.195261 -0.336657 0.92116 N1 0.275025 -0.275025 0.921262 N2 0.136382 -0.136382 0.981224 + txt003 +STRI + V0 0.538261 -0.916455 2.51111 V1 0.284431 -1.02199 2.51111 V2 0.330924 -1.18904 2.46389 + N0 0.0968361 -0.166959 0.981197 N1 0.0503275 -0.186699 0.981127 N2 0.101459 -0.376378 0.920894 + txt003 +STRI + V0 0.330924 -1.18904 2.46389 V1 0.626246 -1.06626 2.46389 V2 0.538261 -0.916455 2.51111 + N0 0.101459 -0.376378 0.920894 N1 0.195261 -0.336657 0.92116 N2 0.0968361 -0.166959 0.981197 + txt003 +STRI + V0 0.284431 -1.02199 2.51111 V1 4.44089e-16 -1.05926 2.51111 V2 4.44089e-16 -1.23241 2.46389 + N0 0.0503275 -0.186699 0.981127 N1 -7.24819e-17 -0.193633 0.981074 N2 -8.37138e-17 -0.390293 0.920691 + txt003 +STRI + V0 4.44089e-16 -1.23241 2.46389 V1 0.330924 -1.18904 2.46389 V2 0.284431 -1.02199 2.51111 + N0 -8.37138e-17 -0.390293 0.920691 N1 0.101459 -0.376378 0.920894 N2 0.0503275 -0.186699 0.981127 + txt003 +STRI + V0 1.23241 0 2.46389 V1 1.18904 -0.330924 2.46389 V2 1.25426 -0.349074 2.4 + N0 0.390293 0 0.920691 N1 0.376378 -0.101459 0.920894 N2 0.965535 -0.260275 -1.02004e-15 + txt003 +STRI + V0 1.25426 -0.349074 2.4 V1 1.3 0 2.4 V2 1.23241 0 2.46389 + N0 0.965535 -0.260275 -1.02004e-15 N1 1 0 -9.86865e-16 N2 0.390293 0 0.920691 + txt003 +STRI + V0 1.18904 -0.330924 2.46389 V1 1.06626 -0.626246 2.46389 V2 1.12474 -0.660593 2.4 + N0 0.376378 -0.101459 0.920894 N1 0.336657 -0.195261 0.92116 N2 0.865031 -0.501718 -9.69705e-16 + txt003 +STRI + V0 1.12474 -0.660593 2.4 V1 1.25426 -0.349074 2.4 V2 1.18904 -0.330924 2.46389 + N0 0.865031 -0.501718 -9.69705e-16 N1 0.965535 -0.260275 -1.02004e-15 N2 0.376378 -0.101459 0.920894 + txt003 +STRI + V0 1.06626 -0.626246 2.46389 V1 0.875009 -0.875009 2.46389 V2 0.923 -0.923 2.4 + N0 0.336657 -0.195261 0.92116 N1 0.275025 -0.275025 0.921262 N2 0.707107 -0.707107 -7.41433e-16 + txt003 +STRI + V0 0.923 -0.923 2.4 V1 1.12474 -0.660593 2.4 V2 1.06626 -0.626246 2.46389 + N0 0.707107 -0.707107 -7.41433e-16 N1 0.865031 -0.501718 -9.69705e-16 N2 0.336657 -0.195261 0.92116 + txt003 +STRI + V0 0.875009 -0.875009 2.46389 V1 0.626246 -1.06626 2.46389 V2 0.660593 -1.12474 2.4 + N0 0.275025 -0.275025 0.921262 N1 0.195261 -0.336657 0.92116 N2 0.501718 -0.865031 -4.67305e-16 + txt003 +STRI + V0 0.660593 -1.12474 2.4 V1 0.923 -0.923 2.4 V2 0.875009 -0.875009 2.46389 + N0 0.501718 -0.865031 -4.67305e-16 N1 0.707107 -0.707107 -7.41433e-16 N2 0.275025 -0.275025 0.921262 + txt003 +STRI + V0 0.626246 -1.06626 2.46389 V1 0.330924 -1.18904 2.46389 V2 0.349074 -1.25426 2.4 + N0 0.195261 -0.336657 0.92116 N1 0.101459 -0.376378 0.920894 N2 0.260275 -0.965535 -5.24893e-16 + txt003 +STRI + V0 0.349074 -1.25426 2.4 V1 0.660593 -1.12474 2.4 V2 0.626246 -1.06626 2.46389 + N0 0.260275 -0.965535 -5.24893e-16 N1 0.501718 -0.865031 -4.67305e-16 N2 0.195261 -0.336657 0.92116 + txt003 +STRI + V0 0.330924 -1.18904 2.46389 V1 4.44089e-16 -1.23241 2.46389 V2 6.66134e-16 -1.3 2.4 + N0 0.101459 -0.376378 0.920894 N1 -8.37138e-17 -0.390293 0.920691 N2 -4.06675e-16 -1 -1.4803e-15 + txt003 +STRI + V0 6.66134e-16 -1.3 2.4 V1 0.349074 -1.25426 2.4 V2 0.330924 -1.18904 2.46389 + N0 -4.06675e-16 -1 -1.4803e-15 N1 0.260275 -0.965535 -5.24893e-16 N2 0.101459 -0.376378 0.920894 + txt003 +STRI + V0 0 -0.2 2.7 V1 -0.0537037 -0.192963 2.7 V2 -0.0942301 -0.338579 2.63611 + N0 0 -0.6 0.8 N1 -0.15602 -0.578783 0.800417 N2 -0.0697517 -0.258756 0.963421 + txt003 +STRI + V0 -0.0942301 -0.338579 2.63611 V1 0 -0.350926 2.63611 V2 0 -0.2 2.7 + N0 -0.0697517 -0.258756 0.963421 N1 0 -0.268354 0.96332 N2 0 -0.6 0.8 + txt003 +STRI + V0 -0.0537037 -0.192963 2.7 V1 -0.10163 -0.173037 2.7 V2 -0.178322 -0.303616 2.63611 + N0 -0.15602 -0.578783 0.800417 N1 -0.300385 -0.517905 0.800964 N2 -0.134219 -0.231413 0.963552 + txt003 +STRI + V0 -0.178322 -0.303616 2.63611 V1 -0.0942301 -0.338579 2.63611 V2 -0.0537037 -0.192963 2.7 + N0 -0.134219 -0.231413 0.963552 N1 -0.0697517 -0.258756 0.963421 N2 -0.15602 -0.578783 0.800417 + txt003 +STRI + V0 -0.10163 -0.173037 2.7 V1 -0.142 -0.142 2.7 V2 -0.249157 -0.249157 2.63611 + N0 -0.300385 -0.517905 0.800964 N1 -0.423155 -0.423155 0.801174 N2 -0.189037 -0.189037 0.963603 + txt003 +STRI + V0 -0.249157 -0.249157 2.63611 V1 -0.178322 -0.303616 2.63611 V2 -0.10163 -0.173037 2.7 + N0 -0.189037 -0.189037 0.963603 N1 -0.134219 -0.231413 0.963552 N2 -0.300385 -0.517905 0.800964 + txt003 +STRI + V0 -0.142 -0.142 2.7 V1 -0.173037 -0.10163 2.7 V2 -0.303616 -0.178322 2.63611 + N0 -0.423155 -0.423155 0.801174 N1 -0.517905 -0.300385 0.800964 N2 -0.231413 -0.134219 0.963552 + txt003 +STRI + V0 -0.303616 -0.178322 2.63611 V1 -0.249157 -0.249157 2.63611 V2 -0.142 -0.142 2.7 + N0 -0.231413 -0.134219 0.963552 N1 -0.189037 -0.189037 0.963603 N2 -0.423155 -0.423155 0.801174 + txt003 +STRI + V0 -0.173037 -0.10163 2.7 V1 -0.192963 -0.0537037 2.7 V2 -0.338579 -0.0942301 2.63611 + N0 -0.517905 -0.300385 0.800964 N1 -0.578783 -0.15602 0.800417 N2 -0.258756 -0.0697517 0.963421 + txt003 +STRI + V0 -0.338579 -0.0942301 2.63611 V1 -0.303616 -0.178322 2.63611 V2 -0.173037 -0.10163 2.7 + N0 -0.258756 -0.0697517 0.963421 N1 -0.231413 -0.134219 0.963552 N2 -0.517905 -0.300385 0.800964 + txt003 +STRI + V0 -0.192963 -0.0537037 2.7 V1 -0.2 0 2.7 V2 -0.350926 -5.55112e-17 2.63611 + N0 -0.578783 -0.15602 0.800417 N1 -0.6 9.91271e-17 0.8 N2 -0.268354 0 0.96332 + txt003 +STRI + V0 -0.350926 -5.55112e-17 2.63611 V1 -0.338579 -0.0942301 2.63611 V2 -0.192963 -0.0537037 2.7 + N0 -0.268354 0 0.96332 N1 -0.258756 -0.0697517 0.963421 N2 -0.578783 -0.15602 0.800417 + txt003 +STRI + V0 0 -0.350926 2.63611 V1 -0.0942301 -0.338579 2.63611 V2 -0.15415 -0.553875 2.58889 + N0 0 -0.268354 0.96332 N1 -0.0697517 -0.258756 0.963421 N2 -0.0436726 -0.162011 0.985822 + txt003 +STRI + V0 -0.15415 -0.553875 2.58889 V1 0 -0.574074 2.58889 V2 0 -0.350926 2.63611 + N0 -0.0436726 -0.162011 0.985822 N1 0 -0.168031 0.985782 N2 0 -0.268354 0.96332 + txt003 +STRI + V0 -0.0942301 -0.338579 2.63611 V1 -0.178322 -0.303616 2.63611 V2 -0.291715 -0.49668 2.58889 + N0 -0.0697517 -0.258756 0.963421 N1 -0.134219 -0.231413 0.963552 N2 -0.0840299 -0.144879 0.985875 + txt003 +STRI + V0 -0.291715 -0.49668 2.58889 V1 -0.15415 -0.553875 2.58889 V2 -0.0942301 -0.338579 2.63611 + N0 -0.0840299 -0.144879 0.985875 N1 -0.0436726 -0.162011 0.985822 N2 -0.0697517 -0.258756 0.963421 + txt003 +STRI + V0 -0.178322 -0.303616 2.63611 V1 -0.249157 -0.249157 2.63611 V2 -0.407593 -0.407593 2.58889 + N0 -0.134219 -0.231413 0.963552 N1 -0.189037 -0.189037 0.963603 N2 -0.118345 -0.118345 0.985895 + txt003 +STRI + V0 -0.407593 -0.407593 2.58889 V1 -0.291715 -0.49668 2.58889 V2 -0.178322 -0.303616 2.63611 + N0 -0.118345 -0.118345 0.985895 N1 -0.0840299 -0.144879 0.985875 N2 -0.134219 -0.231413 0.963552 + txt003 +STRI + V0 -0.249157 -0.249157 2.63611 V1 -0.303616 -0.178322 2.63611 V2 -0.49668 -0.291715 2.58889 + N0 -0.189037 -0.189037 0.963603 N1 -0.231413 -0.134219 0.963552 N2 -0.144879 -0.0840299 0.985875 + txt003 +STRI + V0 -0.49668 -0.291715 2.58889 V1 -0.407593 -0.407593 2.58889 V2 -0.249157 -0.249157 2.63611 + N0 -0.144879 -0.0840299 0.985875 N1 -0.118345 -0.118345 0.985895 N2 -0.189037 -0.189037 0.963603 + txt003 +STRI + V0 -0.303616 -0.178322 2.63611 V1 -0.338579 -0.0942301 2.63611 V2 -0.553875 -0.15415 2.58889 + N0 -0.231413 -0.134219 0.963552 N1 -0.258756 -0.0697517 0.963421 N2 -0.162011 -0.0436726 0.985822 + txt003 +STRI + V0 -0.553875 -0.15415 2.58889 V1 -0.49668 -0.291715 2.58889 V2 -0.303616 -0.178322 2.63611 + N0 -0.162011 -0.0436726 0.985822 N1 -0.144879 -0.0840299 0.985875 N2 -0.231413 -0.134219 0.963552 + txt003 +STRI + V0 -0.338579 -0.0942301 2.63611 V1 -0.350926 -5.55112e-17 2.63611 V2 -0.574074 -2.22045e-16 2.58889 + N0 -0.258756 -0.0697517 0.963421 N1 -0.268354 0 0.96332 N2 -0.168031 1.93429e-17 0.985782 + txt003 +STRI + V0 -0.574074 -2.22045e-16 2.58889 V1 -0.553875 -0.15415 2.58889 V2 -0.338579 -0.0942301 2.63611 + N0 -0.168031 1.93429e-17 0.985782 N1 -0.162011 -0.0436726 0.985822 N2 -0.258756 -0.0697517 0.963421 + txt003 +STRI + V0 0 -0.574074 2.58889 V1 -0.15415 -0.553875 2.58889 V2 -0.221528 -0.795972 2.55 + N0 0 -0.168031 0.985782 N1 -0.0436726 -0.162011 0.985822 N2 -0.0385545 -0.143025 0.988968 + txt003 +STRI + V0 -0.221528 -0.795972 2.55 V1 0 -0.825 2.55 V2 0 -0.574074 2.58889 + N0 -0.0385545 -0.143025 0.988968 N1 0 -0.14834 0.988936 N2 0 -0.168031 0.985782 + txt003 +STRI + V0 -0.15415 -0.553875 2.58889 V1 -0.291715 -0.49668 2.58889 V2 -0.419222 -0.713778 2.55 + N0 -0.0436726 -0.162011 0.985822 N1 -0.0840299 -0.144879 0.985875 N2 -0.0741814 -0.127899 0.989009 + txt003 +STRI + V0 -0.419222 -0.713778 2.55 V1 -0.221528 -0.795972 2.55 V2 -0.15415 -0.553875 2.58889 + N0 -0.0741814 -0.127899 0.989009 N1 -0.0385545 -0.143025 0.988968 N2 -0.0436726 -0.162011 0.985822 + txt003 +STRI + V0 -0.291715 -0.49668 2.58889 V1 -0.407593 -0.407593 2.58889 V2 -0.58575 -0.58575 2.55 + N0 -0.0840299 -0.144879 0.985875 N1 -0.118345 -0.118345 0.985895 N2 -0.104474 -0.104474 0.989025 + txt003 +STRI + V0 -0.58575 -0.58575 2.55 V1 -0.419222 -0.713778 2.55 V2 -0.291715 -0.49668 2.58889 + N0 -0.104474 -0.104474 0.989025 N1 -0.0741814 -0.127899 0.989009 N2 -0.0840299 -0.144879 0.985875 + txt003 +STRI + V0 -0.407593 -0.407593 2.58889 V1 -0.49668 -0.291715 2.58889 V2 -0.713778 -0.419222 2.55 + N0 -0.118345 -0.118345 0.985895 N1 -0.144879 -0.0840299 0.985875 N2 -0.127899 -0.0741814 0.989009 + txt003 +STRI + V0 -0.713778 -0.419222 2.55 V1 -0.58575 -0.58575 2.55 V2 -0.407593 -0.407593 2.58889 + N0 -0.127899 -0.0741814 0.989009 N1 -0.104474 -0.104474 0.989025 N2 -0.118345 -0.118345 0.985895 + txt003 +STRI + V0 -0.49668 -0.291715 2.58889 V1 -0.553875 -0.15415 2.58889 V2 -0.795972 -0.221528 2.55 + N0 -0.144879 -0.0840299 0.985875 N1 -0.162011 -0.0436726 0.985822 N2 -0.143025 -0.0385545 0.988968 + txt003 +STRI + V0 -0.795972 -0.221528 2.55 V1 -0.713778 -0.419222 2.55 V2 -0.49668 -0.291715 2.58889 + N0 -0.143025 -0.0385545 0.988968 N1 -0.127899 -0.0741814 0.989009 N2 -0.144879 -0.0840299 0.985875 + txt003 +STRI + V0 -0.553875 -0.15415 2.58889 V1 -0.574074 -2.22045e-16 2.58889 V2 -0.825 -1.11022e-16 2.55 + N0 -0.162011 -0.0436726 0.985822 N1 -0.168031 1.93429e-17 0.985782 N2 -0.14834 2.37649e-17 0.988936 + txt003 +STRI + V0 -0.825 -1.11022e-16 2.55 V1 -0.795972 -0.221528 2.55 V2 -0.553875 -0.15415 2.58889 + N0 -0.14834 2.37649e-17 0.988936 N1 -0.143025 -0.0385545 0.988968 N2 -0.162011 -0.0436726 0.985822 + txt003 +STRI + V0 0 -0.825 2.55 V1 -0.221528 -0.795972 2.55 V2 -0.284431 -1.02199 2.51111 + N0 0 -0.14834 0.988936 N1 -0.0385545 -0.143025 0.988968 N2 -0.0503275 -0.186699 0.981127 + txt003 +STRI + V0 -0.284431 -1.02199 2.51111 V1 0 -1.05926 2.51111 V2 0 -0.825 2.55 + N0 -0.0503275 -0.186699 0.981127 N1 0 -0.193633 0.981074 N2 0 -0.14834 0.988936 + txt003 +STRI + V0 -0.221528 -0.795972 2.55 V1 -0.419222 -0.713778 2.55 V2 -0.538261 -0.916455 2.51111 + N0 -0.0385545 -0.143025 0.988968 N1 -0.0741814 -0.127899 0.989009 N2 -0.0968361 -0.166959 0.981197 + txt003 +STRI + V0 -0.538261 -0.916455 2.51111 V1 -0.284431 -1.02199 2.51111 V2 -0.221528 -0.795972 2.55 + N0 -0.0968361 -0.166959 0.981197 N1 -0.0503275 -0.186699 0.981127 N2 -0.0385545 -0.143025 0.988968 + txt003 +STRI + V0 -0.419222 -0.713778 2.55 V1 -0.58575 -0.58575 2.55 V2 -0.752074 -0.752074 2.51111 + N0 -0.0741814 -0.127899 0.989009 N1 -0.104474 -0.104474 0.989025 N2 -0.136382 -0.136382 0.981224 + txt003 +STRI + V0 -0.752074 -0.752074 2.51111 V1 -0.538261 -0.916455 2.51111 V2 -0.419222 -0.713778 2.55 + N0 -0.136382 -0.136382 0.981224 N1 -0.0968361 -0.166959 0.981197 N2 -0.0741814 -0.127899 0.989009 + txt003 +STRI + V0 -0.58575 -0.58575 2.55 V1 -0.713778 -0.419222 2.55 V2 -0.916455 -0.538261 2.51111 + N0 -0.104474 -0.104474 0.989025 N1 -0.127899 -0.0741814 0.989009 N2 -0.166959 -0.0968361 0.981197 + txt003 +STRI + V0 -0.916455 -0.538261 2.51111 V1 -0.752074 -0.752074 2.51111 V2 -0.58575 -0.58575 2.55 + N0 -0.166959 -0.0968361 0.981197 N1 -0.136382 -0.136382 0.981224 N2 -0.104474 -0.104474 0.989025 + txt003 +STRI + V0 -0.713778 -0.419222 2.55 V1 -0.795972 -0.221528 2.55 V2 -1.02199 -0.284431 2.51111 + N0 -0.127899 -0.0741814 0.989009 N1 -0.143025 -0.0385545 0.988968 N2 -0.186699 -0.0503275 0.981127 + txt003 +STRI + V0 -1.02199 -0.284431 2.51111 V1 -0.916455 -0.538261 2.51111 V2 -0.713778 -0.419222 2.55 + N0 -0.186699 -0.0503275 0.981127 N1 -0.166959 -0.0968361 0.981197 N2 -0.127899 -0.0741814 0.989009 + txt003 +STRI + V0 -0.795972 -0.221528 2.55 V1 -0.825 -1.11022e-16 2.55 V2 -1.05926 -4.44089e-16 2.51111 + N0 -0.143025 -0.0385545 0.988968 N1 -0.14834 2.37649e-17 0.988936 N2 -0.193633 7.24819e-17 0.981074 + txt003 +STRI + V0 -1.05926 -4.44089e-16 2.51111 V1 -1.02199 -0.284431 2.51111 V2 -0.795972 -0.221528 2.55 + N0 -0.193633 7.24819e-17 0.981074 N1 -0.186699 -0.0503275 0.981127 N2 -0.143025 -0.0385545 0.988968 + txt003 +STRI + V0 0 -1.05926 2.51111 V1 -0.284431 -1.02199 2.51111 V2 -0.330924 -1.18904 2.46389 + N0 0 -0.193633 0.981074 N1 -0.0503275 -0.186699 0.981127 N2 -0.101459 -0.376378 0.920894 + txt003 +STRI + V0 -0.330924 -1.18904 2.46389 V1 0 -1.23241 2.46389 V2 0 -1.05926 2.51111 + N0 -0.101459 -0.376378 0.920894 N1 0 -0.390293 0.920691 N2 0 -0.193633 0.981074 + txt003 +STRI + V0 -0.284431 -1.02199 2.51111 V1 -0.538261 -0.916455 2.51111 V2 -0.626246 -1.06626 2.46389 + N0 -0.0503275 -0.186699 0.981127 N1 -0.0968361 -0.166959 0.981197 N2 -0.195261 -0.336657 0.92116 + txt003 +STRI + V0 -0.626246 -1.06626 2.46389 V1 -0.330924 -1.18904 2.46389 V2 -0.284431 -1.02199 2.51111 + N0 -0.195261 -0.336657 0.92116 N1 -0.101459 -0.376378 0.920894 N2 -0.0503275 -0.186699 0.981127 + txt003 +STRI + V0 -0.538261 -0.916455 2.51111 V1 -0.752074 -0.752074 2.51111 V2 -0.875009 -0.875009 2.46389 + N0 -0.0968361 -0.166959 0.981197 N1 -0.136382 -0.136382 0.981224 N2 -0.275025 -0.275025 0.921262 + txt003 +STRI + V0 -0.875009 -0.875009 2.46389 V1 -0.626246 -1.06626 2.46389 V2 -0.538261 -0.916455 2.51111 + N0 -0.275025 -0.275025 0.921262 N1 -0.195261 -0.336657 0.92116 N2 -0.0968361 -0.166959 0.981197 + txt003 +STRI + V0 -0.752074 -0.752074 2.51111 V1 -0.916455 -0.538261 2.51111 V2 -1.06626 -0.626246 2.46389 + N0 -0.136382 -0.136382 0.981224 N1 -0.166959 -0.0968361 0.981197 N2 -0.336657 -0.195261 0.92116 + txt003 +STRI + V0 -1.06626 -0.626246 2.46389 V1 -0.875009 -0.875009 2.46389 V2 -0.752074 -0.752074 2.51111 + N0 -0.336657 -0.195261 0.92116 N1 -0.275025 -0.275025 0.921262 N2 -0.136382 -0.136382 0.981224 + txt003 +STRI + V0 -0.916455 -0.538261 2.51111 V1 -1.02199 -0.284431 2.51111 V2 -1.18904 -0.330924 2.46389 + N0 -0.166959 -0.0968361 0.981197 N1 -0.186699 -0.0503275 0.981127 N2 -0.376378 -0.101459 0.920894 + txt003 +STRI + V0 -1.18904 -0.330924 2.46389 V1 -1.06626 -0.626246 2.46389 V2 -0.916455 -0.538261 2.51111 + N0 -0.376378 -0.101459 0.920894 N1 -0.336657 -0.195261 0.92116 N2 -0.166959 -0.0968361 0.981197 + txt003 +STRI + V0 -1.02199 -0.284431 2.51111 V1 -1.05926 -4.44089e-16 2.51111 V2 -1.23241 -4.44089e-16 2.46389 + N0 -0.186699 -0.0503275 0.981127 N1 -0.193633 7.24819e-17 0.981074 N2 -0.390293 8.37138e-17 0.920691 + txt003 +STRI + V0 -1.23241 -4.44089e-16 2.46389 V1 -1.18904 -0.330924 2.46389 V2 -1.02199 -0.284431 2.51111 + N0 -0.390293 8.37138e-17 0.920691 N1 -0.376378 -0.101459 0.920894 N2 -0.186699 -0.0503275 0.981127 + txt003 +STRI + V0 0 -1.23241 2.46389 V1 -0.330924 -1.18904 2.46389 V2 -0.349074 -1.25426 2.4 + N0 0 -0.390293 0.920691 N1 -0.101459 -0.376378 0.920894 N2 -0.260275 -0.965535 -1.02004e-15 + txt003 +STRI + V0 -0.349074 -1.25426 2.4 V1 0 -1.3 2.4 V2 0 -1.23241 2.46389 + N0 -0.260275 -0.965535 -1.02004e-15 N1 -0 -1 -9.86865e-16 N2 0 -0.390293 0.920691 + txt003 +STRI + V0 -0.330924 -1.18904 2.46389 V1 -0.626246 -1.06626 2.46389 V2 -0.660593 -1.12474 2.4 + N0 -0.101459 -0.376378 0.920894 N1 -0.195261 -0.336657 0.92116 N2 -0.501718 -0.865031 -9.69705e-16 + txt003 +STRI + V0 -0.660593 -1.12474 2.4 V1 -0.349074 -1.25426 2.4 V2 -0.330924 -1.18904 2.46389 + N0 -0.501718 -0.865031 -9.69705e-16 N1 -0.260275 -0.965535 -1.02004e-15 N2 -0.101459 -0.376378 0.920894 + txt003 +STRI + V0 -0.626246 -1.06626 2.46389 V1 -0.875009 -0.875009 2.46389 V2 -0.923 -0.923 2.4 + N0 -0.195261 -0.336657 0.92116 N1 -0.275025 -0.275025 0.921262 N2 -0.707107 -0.707107 -7.41433e-16 + txt003 +STRI + V0 -0.923 -0.923 2.4 V1 -0.660593 -1.12474 2.4 V2 -0.626246 -1.06626 2.46389 + N0 -0.707107 -0.707107 -7.41433e-16 N1 -0.501718 -0.865031 -9.69705e-16 N2 -0.195261 -0.336657 0.92116 + txt003 +STRI + V0 -0.875009 -0.875009 2.46389 V1 -1.06626 -0.626246 2.46389 V2 -1.12474 -0.660593 2.4 + N0 -0.275025 -0.275025 0.921262 N1 -0.336657 -0.195261 0.92116 N2 -0.865031 -0.501718 -4.67305e-16 + txt003 +STRI + V0 -1.12474 -0.660593 2.4 V1 -0.923 -0.923 2.4 V2 -0.875009 -0.875009 2.46389 + N0 -0.865031 -0.501718 -4.67305e-16 N1 -0.707107 -0.707107 -7.41433e-16 N2 -0.275025 -0.275025 0.921262 + txt003 +STRI + V0 -1.06626 -0.626246 2.46389 V1 -1.18904 -0.330924 2.46389 V2 -1.25426 -0.349074 2.4 + N0 -0.336657 -0.195261 0.92116 N1 -0.376378 -0.101459 0.920894 N2 -0.965535 -0.260275 -5.24893e-16 + txt003 +STRI + V0 -1.25426 -0.349074 2.4 V1 -1.12474 -0.660593 2.4 V2 -1.06626 -0.626246 2.46389 + N0 -0.965535 -0.260275 -5.24893e-16 N1 -0.865031 -0.501718 -4.67305e-16 N2 -0.336657 -0.195261 0.92116 + txt003 +STRI + V0 -1.18904 -0.330924 2.46389 V1 -1.23241 -4.44089e-16 2.46389 V2 -1.3 -6.66134e-16 2.4 + N0 -0.376378 -0.101459 0.920894 N1 -0.390293 8.37138e-17 0.920691 N2 -1 4.06675e-16 -1.4803e-15 + txt003 +STRI + V0 -1.3 -6.66134e-16 2.4 V1 -1.25426 -0.349074 2.4 V2 -1.18904 -0.330924 2.46389 + N0 -1 4.06675e-16 -1.4803e-15 N1 -0.965535 -0.260275 -5.24893e-16 N2 -0.376378 -0.101459 0.920894 + txt003 +STRI + V0 -0.2 0 2.7 V1 -0.192963 0.0537037 2.7 V2 -0.338579 0.0942301 2.63611 + N0 -0.6 0 0.8 N1 -0.578783 0.15602 0.800417 N2 -0.258756 0.0697517 0.963421 + txt003 +STRI + V0 -0.338579 0.0942301 2.63611 V1 -0.350926 0 2.63611 V2 -0.2 0 2.7 + N0 -0.258756 0.0697517 0.963421 N1 -0.268354 0 0.96332 N2 -0.6 0 0.8 + txt003 +STRI + V0 -0.192963 0.0537037 2.7 V1 -0.173037 0.10163 2.7 V2 -0.303616 0.178322 2.63611 + N0 -0.578783 0.15602 0.800417 N1 -0.517905 0.300385 0.800964 N2 -0.231413 0.134219 0.963552 + txt003 +STRI + V0 -0.303616 0.178322 2.63611 V1 -0.338579 0.0942301 2.63611 V2 -0.192963 0.0537037 2.7 + N0 -0.231413 0.134219 0.963552 N1 -0.258756 0.0697517 0.963421 N2 -0.578783 0.15602 0.800417 + txt003 +STRI + V0 -0.173037 0.10163 2.7 V1 -0.142 0.142 2.7 V2 -0.249157 0.249157 2.63611 + N0 -0.517905 0.300385 0.800964 N1 -0.423155 0.423155 0.801174 N2 -0.189037 0.189037 0.963603 + txt003 +STRI + V0 -0.249157 0.249157 2.63611 V1 -0.303616 0.178322 2.63611 V2 -0.173037 0.10163 2.7 + N0 -0.189037 0.189037 0.963603 N1 -0.231413 0.134219 0.963552 N2 -0.517905 0.300385 0.800964 + txt003 +STRI + V0 -0.142 0.142 2.7 V1 -0.10163 0.173037 2.7 V2 -0.178322 0.303616 2.63611 + N0 -0.423155 0.423155 0.801174 N1 -0.300385 0.517905 0.800964 N2 -0.134219 0.231413 0.963552 + txt003 +STRI + V0 -0.178322 0.303616 2.63611 V1 -0.249157 0.249157 2.63611 V2 -0.142 0.142 2.7 + N0 -0.134219 0.231413 0.963552 N1 -0.189037 0.189037 0.963603 N2 -0.423155 0.423155 0.801174 + txt003 +STRI + V0 -0.10163 0.173037 2.7 V1 -0.0537037 0.192963 2.7 V2 -0.0942301 0.338579 2.63611 + N0 -0.300385 0.517905 0.800964 N1 -0.15602 0.578783 0.800417 N2 -0.0697517 0.258756 0.963421 + txt003 +STRI + V0 -0.0942301 0.338579 2.63611 V1 -0.178322 0.303616 2.63611 V2 -0.10163 0.173037 2.7 + N0 -0.0697517 0.258756 0.963421 N1 -0.134219 0.231413 0.963552 N2 -0.300385 0.517905 0.800964 + txt003 +STRI + V0 -0.0537037 0.192963 2.7 V1 0 0.2 2.7 V2 -5.55112e-17 0.350926 2.63611 + N0 -0.15602 0.578783 0.800417 N1 9.91271e-17 0.6 0.8 N2 -0 0.268354 0.96332 + txt003 +STRI + V0 -5.55112e-17 0.350926 2.63611 V1 -0.0942301 0.338579 2.63611 V2 -0.0537037 0.192963 2.7 + N0 -0 0.268354 0.96332 N1 -0.0697517 0.258756 0.963421 N2 -0.15602 0.578783 0.800417 + txt003 +STRI + V0 -0.350926 0 2.63611 V1 -0.338579 0.0942301 2.63611 V2 -0.553875 0.15415 2.58889 + N0 -0.268354 0 0.96332 N1 -0.258756 0.0697517 0.963421 N2 -0.162011 0.0436726 0.985822 + txt003 +STRI + V0 -0.553875 0.15415 2.58889 V1 -0.574074 0 2.58889 V2 -0.350926 0 2.63611 + N0 -0.162011 0.0436726 0.985822 N1 -0.168031 0 0.985782 N2 -0.268354 0 0.96332 + txt003 +STRI + V0 -0.338579 0.0942301 2.63611 V1 -0.303616 0.178322 2.63611 V2 -0.49668 0.291715 2.58889 + N0 -0.258756 0.0697517 0.963421 N1 -0.231413 0.134219 0.963552 N2 -0.144879 0.0840299 0.985875 + txt003 +STRI + V0 -0.49668 0.291715 2.58889 V1 -0.553875 0.15415 2.58889 V2 -0.338579 0.0942301 2.63611 + N0 -0.144879 0.0840299 0.985875 N1 -0.162011 0.0436726 0.985822 N2 -0.258756 0.0697517 0.963421 + txt003 +STRI + V0 -0.303616 0.178322 2.63611 V1 -0.249157 0.249157 2.63611 V2 -0.407593 0.407593 2.58889 + N0 -0.231413 0.134219 0.963552 N1 -0.189037 0.189037 0.963603 N2 -0.118345 0.118345 0.985895 + txt003 +STRI + V0 -0.407593 0.407593 2.58889 V1 -0.49668 0.291715 2.58889 V2 -0.303616 0.178322 2.63611 + N0 -0.118345 0.118345 0.985895 N1 -0.144879 0.0840299 0.985875 N2 -0.231413 0.134219 0.963552 + txt003 +STRI + V0 -0.249157 0.249157 2.63611 V1 -0.178322 0.303616 2.63611 V2 -0.291715 0.49668 2.58889 + N0 -0.189037 0.189037 0.963603 N1 -0.134219 0.231413 0.963552 N2 -0.0840299 0.144879 0.985875 + txt003 +STRI + V0 -0.291715 0.49668 2.58889 V1 -0.407593 0.407593 2.58889 V2 -0.249157 0.249157 2.63611 + N0 -0.0840299 0.144879 0.985875 N1 -0.118345 0.118345 0.985895 N2 -0.189037 0.189037 0.963603 + txt003 +STRI + V0 -0.178322 0.303616 2.63611 V1 -0.0942301 0.338579 2.63611 V2 -0.15415 0.553875 2.58889 + N0 -0.134219 0.231413 0.963552 N1 -0.0697517 0.258756 0.963421 N2 -0.0436726 0.162011 0.985822 + txt003 +STRI + V0 -0.15415 0.553875 2.58889 V1 -0.291715 0.49668 2.58889 V2 -0.178322 0.303616 2.63611 + N0 -0.0436726 0.162011 0.985822 N1 -0.0840299 0.144879 0.985875 N2 -0.134219 0.231413 0.963552 + txt003 +STRI + V0 -0.0942301 0.338579 2.63611 V1 -5.55112e-17 0.350926 2.63611 V2 -2.22045e-16 0.574074 2.58889 + N0 -0.0697517 0.258756 0.963421 N1 -0 0.268354 0.96332 N2 1.93429e-17 0.168031 0.985782 + txt003 +STRI + V0 -2.22045e-16 0.574074 2.58889 V1 -0.15415 0.553875 2.58889 V2 -0.0942301 0.338579 2.63611 + N0 1.93429e-17 0.168031 0.985782 N1 -0.0436726 0.162011 0.985822 N2 -0.0697517 0.258756 0.963421 + txt003 +STRI + V0 -0.574074 0 2.58889 V1 -0.553875 0.15415 2.58889 V2 -0.795972 0.221528 2.55 + N0 -0.168031 0 0.985782 N1 -0.162011 0.0436726 0.985822 N2 -0.143025 0.0385545 0.988968 + txt003 +STRI + V0 -0.795972 0.221528 2.55 V1 -0.825 0 2.55 V2 -0.574074 0 2.58889 + N0 -0.143025 0.0385545 0.988968 N1 -0.14834 0 0.988936 N2 -0.168031 0 0.985782 + txt003 +STRI + V0 -0.553875 0.15415 2.58889 V1 -0.49668 0.291715 2.58889 V2 -0.713778 0.419222 2.55 + N0 -0.162011 0.0436726 0.985822 N1 -0.144879 0.0840299 0.985875 N2 -0.127899 0.0741814 0.989009 + txt003 +STRI + V0 -0.713778 0.419222 2.55 V1 -0.795972 0.221528 2.55 V2 -0.553875 0.15415 2.58889 + N0 -0.127899 0.0741814 0.989009 N1 -0.143025 0.0385545 0.988968 N2 -0.162011 0.0436726 0.985822 + txt003 +STRI + V0 -0.49668 0.291715 2.58889 V1 -0.407593 0.407593 2.58889 V2 -0.58575 0.58575 2.55 + N0 -0.144879 0.0840299 0.985875 N1 -0.118345 0.118345 0.985895 N2 -0.104474 0.104474 0.989025 + txt003 +STRI + V0 -0.58575 0.58575 2.55 V1 -0.713778 0.419222 2.55 V2 -0.49668 0.291715 2.58889 + N0 -0.104474 0.104474 0.989025 N1 -0.127899 0.0741814 0.989009 N2 -0.144879 0.0840299 0.985875 + txt003 +STRI + V0 -0.407593 0.407593 2.58889 V1 -0.291715 0.49668 2.58889 V2 -0.419222 0.713778 2.55 + N0 -0.118345 0.118345 0.985895 N1 -0.0840299 0.144879 0.985875 N2 -0.0741814 0.127899 0.989009 + txt003 +STRI + V0 -0.419222 0.713778 2.55 V1 -0.58575 0.58575 2.55 V2 -0.407593 0.407593 2.58889 + N0 -0.0741814 0.127899 0.989009 N1 -0.104474 0.104474 0.989025 N2 -0.118345 0.118345 0.985895 + txt003 +STRI + V0 -0.291715 0.49668 2.58889 V1 -0.15415 0.553875 2.58889 V2 -0.221528 0.795972 2.55 + N0 -0.0840299 0.144879 0.985875 N1 -0.0436726 0.162011 0.985822 N2 -0.0385545 0.143025 0.988968 + txt003 +STRI + V0 -0.221528 0.795972 2.55 V1 -0.419222 0.713778 2.55 V2 -0.291715 0.49668 2.58889 + N0 -0.0385545 0.143025 0.988968 N1 -0.0741814 0.127899 0.989009 N2 -0.0840299 0.144879 0.985875 + txt003 +STRI + V0 -0.15415 0.553875 2.58889 V1 -2.22045e-16 0.574074 2.58889 V2 -1.11022e-16 0.825 2.55 + N0 -0.0436726 0.162011 0.985822 N1 1.93429e-17 0.168031 0.985782 N2 2.37649e-17 0.14834 0.988936 + txt003 +STRI + V0 -1.11022e-16 0.825 2.55 V1 -0.221528 0.795972 2.55 V2 -0.15415 0.553875 2.58889 + N0 2.37649e-17 0.14834 0.988936 N1 -0.0385545 0.143025 0.988968 N2 -0.0436726 0.162011 0.985822 + txt003 +STRI + V0 -0.825 0 2.55 V1 -0.795972 0.221528 2.55 V2 -1.02199 0.284431 2.51111 + N0 -0.14834 0 0.988936 N1 -0.143025 0.0385545 0.988968 N2 -0.186699 0.0503275 0.981127 + txt003 +STRI + V0 -1.02199 0.284431 2.51111 V1 -1.05926 0 2.51111 V2 -0.825 0 2.55 + N0 -0.186699 0.0503275 0.981127 N1 -0.193633 0 0.981074 N2 -0.14834 0 0.988936 + txt003 +STRI + V0 -0.795972 0.221528 2.55 V1 -0.713778 0.419222 2.55 V2 -0.916455 0.538261 2.51111 + N0 -0.143025 0.0385545 0.988968 N1 -0.127899 0.0741814 0.989009 N2 -0.166959 0.0968361 0.981197 + txt003 +STRI + V0 -0.916455 0.538261 2.51111 V1 -1.02199 0.284431 2.51111 V2 -0.795972 0.221528 2.55 + N0 -0.166959 0.0968361 0.981197 N1 -0.186699 0.0503275 0.981127 N2 -0.143025 0.0385545 0.988968 + txt003 +STRI + V0 -0.713778 0.419222 2.55 V1 -0.58575 0.58575 2.55 V2 -0.752074 0.752074 2.51111 + N0 -0.127899 0.0741814 0.989009 N1 -0.104474 0.104474 0.989025 N2 -0.136382 0.136382 0.981224 + txt003 +STRI + V0 -0.752074 0.752074 2.51111 V1 -0.916455 0.538261 2.51111 V2 -0.713778 0.419222 2.55 + N0 -0.136382 0.136382 0.981224 N1 -0.166959 0.0968361 0.981197 N2 -0.127899 0.0741814 0.989009 + txt003 +STRI + V0 -0.58575 0.58575 2.55 V1 -0.419222 0.713778 2.55 V2 -0.538261 0.916455 2.51111 + N0 -0.104474 0.104474 0.989025 N1 -0.0741814 0.127899 0.989009 N2 -0.0968361 0.166959 0.981197 + txt003 +STRI + V0 -0.538261 0.916455 2.51111 V1 -0.752074 0.752074 2.51111 V2 -0.58575 0.58575 2.55 + N0 -0.0968361 0.166959 0.981197 N1 -0.136382 0.136382 0.981224 N2 -0.104474 0.104474 0.989025 + txt003 +STRI + V0 -0.419222 0.713778 2.55 V1 -0.221528 0.795972 2.55 V2 -0.284431 1.02199 2.51111 + N0 -0.0741814 0.127899 0.989009 N1 -0.0385545 0.143025 0.988968 N2 -0.0503275 0.186699 0.981127 + txt003 +STRI + V0 -0.284431 1.02199 2.51111 V1 -0.538261 0.916455 2.51111 V2 -0.419222 0.713778 2.55 + N0 -0.0503275 0.186699 0.981127 N1 -0.0968361 0.166959 0.981197 N2 -0.0741814 0.127899 0.989009 + txt003 +STRI + V0 -0.221528 0.795972 2.55 V1 -1.11022e-16 0.825 2.55 V2 -4.44089e-16 1.05926 2.51111 + N0 -0.0385545 0.143025 0.988968 N1 2.37649e-17 0.14834 0.988936 N2 7.24819e-17 0.193633 0.981074 + txt003 +STRI + V0 -4.44089e-16 1.05926 2.51111 V1 -0.284431 1.02199 2.51111 V2 -0.221528 0.795972 2.55 + N0 7.24819e-17 0.193633 0.981074 N1 -0.0503275 0.186699 0.981127 N2 -0.0385545 0.143025 0.988968 + txt003 +STRI + V0 -1.05926 0 2.51111 V1 -1.02199 0.284431 2.51111 V2 -1.18904 0.330924 2.46389 + N0 -0.193633 0 0.981074 N1 -0.186699 0.0503275 0.981127 N2 -0.376378 0.101459 0.920894 + txt003 +STRI + V0 -1.18904 0.330924 2.46389 V1 -1.23241 0 2.46389 V2 -1.05926 0 2.51111 + N0 -0.376378 0.101459 0.920894 N1 -0.390293 0 0.920691 N2 -0.193633 0 0.981074 + txt003 +STRI + V0 -1.02199 0.284431 2.51111 V1 -0.916455 0.538261 2.51111 V2 -1.06626 0.626246 2.46389 + N0 -0.186699 0.0503275 0.981127 N1 -0.166959 0.0968361 0.981197 N2 -0.336657 0.195261 0.92116 + txt003 +STRI + V0 -1.06626 0.626246 2.46389 V1 -1.18904 0.330924 2.46389 V2 -1.02199 0.284431 2.51111 + N0 -0.336657 0.195261 0.92116 N1 -0.376378 0.101459 0.920894 N2 -0.186699 0.0503275 0.981127 + txt003 +STRI + V0 -0.916455 0.538261 2.51111 V1 -0.752074 0.752074 2.51111 V2 -0.875009 0.875009 2.46389 + N0 -0.166959 0.0968361 0.981197 N1 -0.136382 0.136382 0.981224 N2 -0.275025 0.275025 0.921262 + txt003 +STRI + V0 -0.875009 0.875009 2.46389 V1 -1.06626 0.626246 2.46389 V2 -0.916455 0.538261 2.51111 + N0 -0.275025 0.275025 0.921262 N1 -0.336657 0.195261 0.92116 N2 -0.166959 0.0968361 0.981197 + txt003 +STRI + V0 -0.752074 0.752074 2.51111 V1 -0.538261 0.916455 2.51111 V2 -0.626246 1.06626 2.46389 + N0 -0.136382 0.136382 0.981224 N1 -0.0968361 0.166959 0.981197 N2 -0.195261 0.336657 0.92116 + txt003 +STRI + V0 -0.626246 1.06626 2.46389 V1 -0.875009 0.875009 2.46389 V2 -0.752074 0.752074 2.51111 + N0 -0.195261 0.336657 0.92116 N1 -0.275025 0.275025 0.921262 N2 -0.136382 0.136382 0.981224 + txt003 +STRI + V0 -0.538261 0.916455 2.51111 V1 -0.284431 1.02199 2.51111 V2 -0.330924 1.18904 2.46389 + N0 -0.0968361 0.166959 0.981197 N1 -0.0503275 0.186699 0.981127 N2 -0.101459 0.376378 0.920894 + txt003 +STRI + V0 -0.330924 1.18904 2.46389 V1 -0.626246 1.06626 2.46389 V2 -0.538261 0.916455 2.51111 + N0 -0.101459 0.376378 0.920894 N1 -0.195261 0.336657 0.92116 N2 -0.0968361 0.166959 0.981197 + txt003 +STRI + V0 -0.284431 1.02199 2.51111 V1 -4.44089e-16 1.05926 2.51111 V2 -4.44089e-16 1.23241 2.46389 + N0 -0.0503275 0.186699 0.981127 N1 7.24819e-17 0.193633 0.981074 N2 8.37138e-17 0.390293 0.920691 + txt003 +STRI + V0 -4.44089e-16 1.23241 2.46389 V1 -0.330924 1.18904 2.46389 V2 -0.284431 1.02199 2.51111 + N0 8.37138e-17 0.390293 0.920691 N1 -0.101459 0.376378 0.920894 N2 -0.0503275 0.186699 0.981127 + txt003 +STRI + V0 -1.23241 0 2.46389 V1 -1.18904 0.330924 2.46389 V2 -1.25426 0.349074 2.4 + N0 -0.390293 0 0.920691 N1 -0.376378 0.101459 0.920894 N2 -0.965535 0.260275 -1.02004e-15 + txt003 +STRI + V0 -1.25426 0.349074 2.4 V1 -1.3 0 2.4 V2 -1.23241 0 2.46389 + N0 -0.965535 0.260275 -1.02004e-15 N1 -1 0 -9.86865e-16 N2 -0.390293 0 0.920691 + txt003 +STRI + V0 -1.18904 0.330924 2.46389 V1 -1.06626 0.626246 2.46389 V2 -1.12474 0.660593 2.4 + N0 -0.376378 0.101459 0.920894 N1 -0.336657 0.195261 0.92116 N2 -0.865031 0.501718 -9.69705e-16 + txt003 +STRI + V0 -1.12474 0.660593 2.4 V1 -1.25426 0.349074 2.4 V2 -1.18904 0.330924 2.46389 + N0 -0.865031 0.501718 -9.69705e-16 N1 -0.965535 0.260275 -1.02004e-15 N2 -0.376378 0.101459 0.920894 + txt003 +STRI + V0 -1.06626 0.626246 2.46389 V1 -0.875009 0.875009 2.46389 V2 -0.923 0.923 2.4 + N0 -0.336657 0.195261 0.92116 N1 -0.275025 0.275025 0.921262 N2 -0.707107 0.707107 -7.41433e-16 + txt003 +STRI + V0 -0.923 0.923 2.4 V1 -1.12474 0.660593 2.4 V2 -1.06626 0.626246 2.46389 + N0 -0.707107 0.707107 -7.41433e-16 N1 -0.865031 0.501718 -9.69705e-16 N2 -0.336657 0.195261 0.92116 + txt003 +STRI + V0 -0.875009 0.875009 2.46389 V1 -0.626246 1.06626 2.46389 V2 -0.660593 1.12474 2.4 + N0 -0.275025 0.275025 0.921262 N1 -0.195261 0.336657 0.92116 N2 -0.501718 0.865031 -4.67305e-16 + txt003 +STRI + V0 -0.660593 1.12474 2.4 V1 -0.923 0.923 2.4 V2 -0.875009 0.875009 2.46389 + N0 -0.501718 0.865031 -4.67305e-16 N1 -0.707107 0.707107 -7.41433e-16 N2 -0.275025 0.275025 0.921262 + txt003 +STRI + V0 -0.626246 1.06626 2.46389 V1 -0.330924 1.18904 2.46389 V2 -0.349074 1.25426 2.4 + N0 -0.195261 0.336657 0.92116 N1 -0.101459 0.376378 0.920894 N2 -0.260275 0.965535 -5.24893e-16 + txt003 +STRI + V0 -0.349074 1.25426 2.4 V1 -0.660593 1.12474 2.4 V2 -0.626246 1.06626 2.46389 + N0 -0.260275 0.965535 -5.24893e-16 N1 -0.501718 0.865031 -4.67305e-16 N2 -0.195261 0.336657 0.92116 + txt003 +STRI + V0 -0.330924 1.18904 2.46389 V1 -4.44089e-16 1.23241 2.46389 V2 -6.66134e-16 1.3 2.4 + N0 -0.101459 0.376378 0.920894 N1 8.37138e-17 0.390293 0.920691 N2 4.06675e-16 1 -1.4803e-15 + txt003 +STRI + V0 -6.66134e-16 1.3 2.4 V1 -0.349074 1.25426 2.4 V2 -0.330924 1.18904 2.46389 + N0 4.06675e-16 1 -1.4803e-15 N1 -0.260275 0.965535 -5.24893e-16 N2 -0.101459 0.376378 0.920894 + txt003 +STRI + V0 0 0.2 2.7 V1 0.0537037 0.192963 2.7 V2 0.0942301 0.338579 2.63611 + N0 -0 0.6 0.8 N1 0.15602 0.578783 0.800417 N2 0.0697517 0.258756 0.963421 + txt003 +STRI + V0 0.0942301 0.338579 2.63611 V1 0 0.350926 2.63611 V2 0 0.2 2.7 + N0 0.0697517 0.258756 0.963421 N1 -0 0.268354 0.96332 N2 -0 0.6 0.8 + txt003 +STRI + V0 0.0537037 0.192963 2.7 V1 0.10163 0.173037 2.7 V2 0.178322 0.303616 2.63611 + N0 0.15602 0.578783 0.800417 N1 0.300385 0.517905 0.800964 N2 0.134219 0.231413 0.963552 + txt003 +STRI + V0 0.178322 0.303616 2.63611 V1 0.0942301 0.338579 2.63611 V2 0.0537037 0.192963 2.7 + N0 0.134219 0.231413 0.963552 N1 0.0697517 0.258756 0.963421 N2 0.15602 0.578783 0.800417 + txt003 +STRI + V0 0.10163 0.173037 2.7 V1 0.142 0.142 2.7 V2 0.249157 0.249157 2.63611 + N0 0.300385 0.517905 0.800964 N1 0.423155 0.423155 0.801174 N2 0.189037 0.189037 0.963603 + txt003 +STRI + V0 0.249157 0.249157 2.63611 V1 0.178322 0.303616 2.63611 V2 0.10163 0.173037 2.7 + N0 0.189037 0.189037 0.963603 N1 0.134219 0.231413 0.963552 N2 0.300385 0.517905 0.800964 + txt003 +STRI + V0 0.142 0.142 2.7 V1 0.173037 0.10163 2.7 V2 0.303616 0.178322 2.63611 + N0 0.423155 0.423155 0.801174 N1 0.517905 0.300385 0.800964 N2 0.231413 0.134219 0.963552 + txt003 +STRI + V0 0.303616 0.178322 2.63611 V1 0.249157 0.249157 2.63611 V2 0.142 0.142 2.7 + N0 0.231413 0.134219 0.963552 N1 0.189037 0.189037 0.963603 N2 0.423155 0.423155 0.801174 + txt003 +STRI + V0 0.173037 0.10163 2.7 V1 0.192963 0.0537037 2.7 V2 0.338579 0.0942301 2.63611 + N0 0.517905 0.300385 0.800964 N1 0.578783 0.15602 0.800417 N2 0.258756 0.0697517 0.963421 + txt003 +STRI + V0 0.338579 0.0942301 2.63611 V1 0.303616 0.178322 2.63611 V2 0.173037 0.10163 2.7 + N0 0.258756 0.0697517 0.963421 N1 0.231413 0.134219 0.963552 N2 0.517905 0.300385 0.800964 + txt003 +STRI + V0 0.192963 0.0537037 2.7 V1 0.2 0 2.7 V2 0.350926 5.55112e-17 2.63611 + N0 0.578783 0.15602 0.800417 N1 0.6 -9.91271e-17 0.8 N2 0.268354 0 0.96332 + txt003 +STRI + V0 0.350926 5.55112e-17 2.63611 V1 0.338579 0.0942301 2.63611 V2 0.192963 0.0537037 2.7 + N0 0.268354 0 0.96332 N1 0.258756 0.0697517 0.963421 N2 0.578783 0.15602 0.800417 + txt003 +STRI + V0 0 0.350926 2.63611 V1 0.0942301 0.338579 2.63611 V2 0.15415 0.553875 2.58889 + N0 -0 0.268354 0.96332 N1 0.0697517 0.258756 0.963421 N2 0.0436726 0.162011 0.985822 + txt003 +STRI + V0 0.15415 0.553875 2.58889 V1 0 0.574074 2.58889 V2 0 0.350926 2.63611 + N0 0.0436726 0.162011 0.985822 N1 -0 0.168031 0.985782 N2 -0 0.268354 0.96332 + txt003 +STRI + V0 0.0942301 0.338579 2.63611 V1 0.178322 0.303616 2.63611 V2 0.291715 0.49668 2.58889 + N0 0.0697517 0.258756 0.963421 N1 0.134219 0.231413 0.963552 N2 0.0840299 0.144879 0.985875 + txt003 +STRI + V0 0.291715 0.49668 2.58889 V1 0.15415 0.553875 2.58889 V2 0.0942301 0.338579 2.63611 + N0 0.0840299 0.144879 0.985875 N1 0.0436726 0.162011 0.985822 N2 0.0697517 0.258756 0.963421 + txt003 +STRI + V0 0.178322 0.303616 2.63611 V1 0.249157 0.249157 2.63611 V2 0.407593 0.407593 2.58889 + N0 0.134219 0.231413 0.963552 N1 0.189037 0.189037 0.963603 N2 0.118345 0.118345 0.985895 + txt003 +STRI + V0 0.407593 0.407593 2.58889 V1 0.291715 0.49668 2.58889 V2 0.178322 0.303616 2.63611 + N0 0.118345 0.118345 0.985895 N1 0.0840299 0.144879 0.985875 N2 0.134219 0.231413 0.963552 + txt003 +STRI + V0 0.249157 0.249157 2.63611 V1 0.303616 0.178322 2.63611 V2 0.49668 0.291715 2.58889 + N0 0.189037 0.189037 0.963603 N1 0.231413 0.134219 0.963552 N2 0.144879 0.0840299 0.985875 + txt003 +STRI + V0 0.49668 0.291715 2.58889 V1 0.407593 0.407593 2.58889 V2 0.249157 0.249157 2.63611 + N0 0.144879 0.0840299 0.985875 N1 0.118345 0.118345 0.985895 N2 0.189037 0.189037 0.963603 + txt003 +STRI + V0 0.303616 0.178322 2.63611 V1 0.338579 0.0942301 2.63611 V2 0.553875 0.15415 2.58889 + N0 0.231413 0.134219 0.963552 N1 0.258756 0.0697517 0.963421 N2 0.162011 0.0436726 0.985822 + txt003 +STRI + V0 0.553875 0.15415 2.58889 V1 0.49668 0.291715 2.58889 V2 0.303616 0.178322 2.63611 + N0 0.162011 0.0436726 0.985822 N1 0.144879 0.0840299 0.985875 N2 0.231413 0.134219 0.963552 + txt003 +STRI + V0 0.338579 0.0942301 2.63611 V1 0.350926 5.55112e-17 2.63611 V2 0.574074 2.22045e-16 2.58889 + N0 0.258756 0.0697517 0.963421 N1 0.268354 0 0.96332 N2 0.168031 -1.93429e-17 0.985782 + txt003 +STRI + V0 0.574074 2.22045e-16 2.58889 V1 0.553875 0.15415 2.58889 V2 0.338579 0.0942301 2.63611 + N0 0.168031 -1.93429e-17 0.985782 N1 0.162011 0.0436726 0.985822 N2 0.258756 0.0697517 0.963421 + txt003 +STRI + V0 0 0.574074 2.58889 V1 0.15415 0.553875 2.58889 V2 0.221528 0.795972 2.55 + N0 -0 0.168031 0.985782 N1 0.0436726 0.162011 0.985822 N2 0.0385545 0.143025 0.988968 + txt003 +STRI + V0 0.221528 0.795972 2.55 V1 0 0.825 2.55 V2 0 0.574074 2.58889 + N0 0.0385545 0.143025 0.988968 N1 -0 0.14834 0.988936 N2 -0 0.168031 0.985782 + txt003 +STRI + V0 0.15415 0.553875 2.58889 V1 0.291715 0.49668 2.58889 V2 0.419222 0.713778 2.55 + N0 0.0436726 0.162011 0.985822 N1 0.0840299 0.144879 0.985875 N2 0.0741814 0.127899 0.989009 + txt003 +STRI + V0 0.419222 0.713778 2.55 V1 0.221528 0.795972 2.55 V2 0.15415 0.553875 2.58889 + N0 0.0741814 0.127899 0.989009 N1 0.0385545 0.143025 0.988968 N2 0.0436726 0.162011 0.985822 + txt003 +STRI + V0 0.291715 0.49668 2.58889 V1 0.407593 0.407593 2.58889 V2 0.58575 0.58575 2.55 + N0 0.0840299 0.144879 0.985875 N1 0.118345 0.118345 0.985895 N2 0.104474 0.104474 0.989025 + txt003 +STRI + V0 0.58575 0.58575 2.55 V1 0.419222 0.713778 2.55 V2 0.291715 0.49668 2.58889 + N0 0.104474 0.104474 0.989025 N1 0.0741814 0.127899 0.989009 N2 0.0840299 0.144879 0.985875 + txt003 +STRI + V0 0.407593 0.407593 2.58889 V1 0.49668 0.291715 2.58889 V2 0.713778 0.419222 2.55 + N0 0.118345 0.118345 0.985895 N1 0.144879 0.0840299 0.985875 N2 0.127899 0.0741814 0.989009 + txt003 +STRI + V0 0.713778 0.419222 2.55 V1 0.58575 0.58575 2.55 V2 0.407593 0.407593 2.58889 + N0 0.127899 0.0741814 0.989009 N1 0.104474 0.104474 0.989025 N2 0.118345 0.118345 0.985895 + txt003 +STRI + V0 0.49668 0.291715 2.58889 V1 0.553875 0.15415 2.58889 V2 0.795972 0.221528 2.55 + N0 0.144879 0.0840299 0.985875 N1 0.162011 0.0436726 0.985822 N2 0.143025 0.0385545 0.988968 + txt003 +STRI + V0 0.795972 0.221528 2.55 V1 0.713778 0.419222 2.55 V2 0.49668 0.291715 2.58889 + N0 0.143025 0.0385545 0.988968 N1 0.127899 0.0741814 0.989009 N2 0.144879 0.0840299 0.985875 + txt003 +STRI + V0 0.553875 0.15415 2.58889 V1 0.574074 2.22045e-16 2.58889 V2 0.825 1.11022e-16 2.55 + N0 0.162011 0.0436726 0.985822 N1 0.168031 -1.93429e-17 0.985782 N2 0.14834 -2.37649e-17 0.988936 + txt003 +STRI + V0 0.825 1.11022e-16 2.55 V1 0.795972 0.221528 2.55 V2 0.553875 0.15415 2.58889 + N0 0.14834 -2.37649e-17 0.988936 N1 0.143025 0.0385545 0.988968 N2 0.162011 0.0436726 0.985822 + txt003 +STRI + V0 0 0.825 2.55 V1 0.221528 0.795972 2.55 V2 0.284431 1.02199 2.51111 + N0 -0 0.14834 0.988936 N1 0.0385545 0.143025 0.988968 N2 0.0503275 0.186699 0.981127 + txt003 +STRI + V0 0.284431 1.02199 2.51111 V1 0 1.05926 2.51111 V2 0 0.825 2.55 + N0 0.0503275 0.186699 0.981127 N1 -0 0.193633 0.981074 N2 -0 0.14834 0.988936 + txt003 +STRI + V0 0.221528 0.795972 2.55 V1 0.419222 0.713778 2.55 V2 0.538261 0.916455 2.51111 + N0 0.0385545 0.143025 0.988968 N1 0.0741814 0.127899 0.989009 N2 0.0968361 0.166959 0.981197 + txt003 +STRI + V0 0.538261 0.916455 2.51111 V1 0.284431 1.02199 2.51111 V2 0.221528 0.795972 2.55 + N0 0.0968361 0.166959 0.981197 N1 0.0503275 0.186699 0.981127 N2 0.0385545 0.143025 0.988968 + txt003 +STRI + V0 0.419222 0.713778 2.55 V1 0.58575 0.58575 2.55 V2 0.752074 0.752074 2.51111 + N0 0.0741814 0.127899 0.989009 N1 0.104474 0.104474 0.989025 N2 0.136382 0.136382 0.981224 + txt003 +STRI + V0 0.752074 0.752074 2.51111 V1 0.538261 0.916455 2.51111 V2 0.419222 0.713778 2.55 + N0 0.136382 0.136382 0.981224 N1 0.0968361 0.166959 0.981197 N2 0.0741814 0.127899 0.989009 + txt003 +STRI + V0 0.58575 0.58575 2.55 V1 0.713778 0.419222 2.55 V2 0.916455 0.538261 2.51111 + N0 0.104474 0.104474 0.989025 N1 0.127899 0.0741814 0.989009 N2 0.166959 0.0968361 0.981197 + txt003 +STRI + V0 0.916455 0.538261 2.51111 V1 0.752074 0.752074 2.51111 V2 0.58575 0.58575 2.55 + N0 0.166959 0.0968361 0.981197 N1 0.136382 0.136382 0.981224 N2 0.104474 0.104474 0.989025 + txt003 +STRI + V0 0.713778 0.419222 2.55 V1 0.795972 0.221528 2.55 V2 1.02199 0.284431 2.51111 + N0 0.127899 0.0741814 0.989009 N1 0.143025 0.0385545 0.988968 N2 0.186699 0.0503275 0.981127 + txt003 +STRI + V0 1.02199 0.284431 2.51111 V1 0.916455 0.538261 2.51111 V2 0.713778 0.419222 2.55 + N0 0.186699 0.0503275 0.981127 N1 0.166959 0.0968361 0.981197 N2 0.127899 0.0741814 0.989009 + txt003 +STRI + V0 0.795972 0.221528 2.55 V1 0.825 1.11022e-16 2.55 V2 1.05926 4.44089e-16 2.51111 + N0 0.143025 0.0385545 0.988968 N1 0.14834 -2.37649e-17 0.988936 N2 0.193633 -7.24819e-17 0.981074 + txt003 +STRI + V0 1.05926 4.44089e-16 2.51111 V1 1.02199 0.284431 2.51111 V2 0.795972 0.221528 2.55 + N0 0.193633 -7.24819e-17 0.981074 N1 0.186699 0.0503275 0.981127 N2 0.143025 0.0385545 0.988968 + txt003 +STRI + V0 0 1.05926 2.51111 V1 0.284431 1.02199 2.51111 V2 0.330924 1.18904 2.46389 + N0 -0 0.193633 0.981074 N1 0.0503275 0.186699 0.981127 N2 0.101459 0.376378 0.920894 + txt003 +STRI + V0 0.330924 1.18904 2.46389 V1 0 1.23241 2.46389 V2 0 1.05926 2.51111 + N0 0.101459 0.376378 0.920894 N1 -0 0.390293 0.920691 N2 -0 0.193633 0.981074 + txt003 +STRI + V0 0.284431 1.02199 2.51111 V1 0.538261 0.916455 2.51111 V2 0.626246 1.06626 2.46389 + N0 0.0503275 0.186699 0.981127 N1 0.0968361 0.166959 0.981197 N2 0.195261 0.336657 0.92116 + txt003 +STRI + V0 0.626246 1.06626 2.46389 V1 0.330924 1.18904 2.46389 V2 0.284431 1.02199 2.51111 + N0 0.195261 0.336657 0.92116 N1 0.101459 0.376378 0.920894 N2 0.0503275 0.186699 0.981127 + txt003 +STRI + V0 0.538261 0.916455 2.51111 V1 0.752074 0.752074 2.51111 V2 0.875009 0.875009 2.46389 + N0 0.0968361 0.166959 0.981197 N1 0.136382 0.136382 0.981224 N2 0.275025 0.275025 0.921262 + txt003 +STRI + V0 0.875009 0.875009 2.46389 V1 0.626246 1.06626 2.46389 V2 0.538261 0.916455 2.51111 + N0 0.275025 0.275025 0.921262 N1 0.195261 0.336657 0.92116 N2 0.0968361 0.166959 0.981197 + txt003 +STRI + V0 0.752074 0.752074 2.51111 V1 0.916455 0.538261 2.51111 V2 1.06626 0.626246 2.46389 + N0 0.136382 0.136382 0.981224 N1 0.166959 0.0968361 0.981197 N2 0.336657 0.195261 0.92116 + txt003 +STRI + V0 1.06626 0.626246 2.46389 V1 0.875009 0.875009 2.46389 V2 0.752074 0.752074 2.51111 + N0 0.336657 0.195261 0.92116 N1 0.275025 0.275025 0.921262 N2 0.136382 0.136382 0.981224 + txt003 +STRI + V0 0.916455 0.538261 2.51111 V1 1.02199 0.284431 2.51111 V2 1.18904 0.330924 2.46389 + N0 0.166959 0.0968361 0.981197 N1 0.186699 0.0503275 0.981127 N2 0.376378 0.101459 0.920894 + txt003 +STRI + V0 1.18904 0.330924 2.46389 V1 1.06626 0.626246 2.46389 V2 0.916455 0.538261 2.51111 + N0 0.376378 0.101459 0.920894 N1 0.336657 0.195261 0.92116 N2 0.166959 0.0968361 0.981197 + txt003 +STRI + V0 1.02199 0.284431 2.51111 V1 1.05926 4.44089e-16 2.51111 V2 1.23241 4.44089e-16 2.46389 + N0 0.186699 0.0503275 0.981127 N1 0.193633 -7.24819e-17 0.981074 N2 0.390293 -8.37138e-17 0.920691 + txt003 +STRI + V0 1.23241 4.44089e-16 2.46389 V1 1.18904 0.330924 2.46389 V2 1.02199 0.284431 2.51111 + N0 0.390293 -8.37138e-17 0.920691 N1 0.376378 0.101459 0.920894 N2 0.186699 0.0503275 0.981127 + txt003 +STRI + V0 0 1.23241 2.46389 V1 0.330924 1.18904 2.46389 V2 0.349074 1.25426 2.4 + N0 -0 0.390293 0.920691 N1 0.101459 0.376378 0.920894 N2 0.260275 0.965535 -1.02004e-15 + txt003 +STRI + V0 0.349074 1.25426 2.4 V1 0 1.3 2.4 V2 0 1.23241 2.46389 + N0 0.260275 0.965535 -1.02004e-15 N1 0 1 -9.86865e-16 N2 -0 0.390293 0.920691 + txt003 +STRI + V0 0.330924 1.18904 2.46389 V1 0.626246 1.06626 2.46389 V2 0.660593 1.12474 2.4 + N0 0.101459 0.376378 0.920894 N1 0.195261 0.336657 0.92116 N2 0.501718 0.865031 -9.69705e-16 + txt003 +STRI + V0 0.660593 1.12474 2.4 V1 0.349074 1.25426 2.4 V2 0.330924 1.18904 2.46389 + N0 0.501718 0.865031 -9.69705e-16 N1 0.260275 0.965535 -1.02004e-15 N2 0.101459 0.376378 0.920894 + txt003 +STRI + V0 0.626246 1.06626 2.46389 V1 0.875009 0.875009 2.46389 V2 0.923 0.923 2.4 + N0 0.195261 0.336657 0.92116 N1 0.275025 0.275025 0.921262 N2 0.707107 0.707107 -7.41433e-16 + txt003 +STRI + V0 0.923 0.923 2.4 V1 0.660593 1.12474 2.4 V2 0.626246 1.06626 2.46389 + N0 0.707107 0.707107 -7.41433e-16 N1 0.501718 0.865031 -9.69705e-16 N2 0.195261 0.336657 0.92116 + txt003 +STRI + V0 0.875009 0.875009 2.46389 V1 1.06626 0.626246 2.46389 V2 1.12474 0.660593 2.4 + N0 0.275025 0.275025 0.921262 N1 0.336657 0.195261 0.92116 N2 0.865031 0.501718 -4.67305e-16 + txt003 +STRI + V0 1.12474 0.660593 2.4 V1 0.923 0.923 2.4 V2 0.875009 0.875009 2.46389 + N0 0.865031 0.501718 -4.67305e-16 N1 0.707107 0.707107 -7.41433e-16 N2 0.275025 0.275025 0.921262 + txt003 +STRI + V0 1.06626 0.626246 2.46389 V1 1.18904 0.330924 2.46389 V2 1.25426 0.349074 2.4 + N0 0.336657 0.195261 0.92116 N1 0.376378 0.101459 0.920894 N2 0.965535 0.260275 -5.24893e-16 + txt003 +STRI + V0 1.25426 0.349074 2.4 V1 1.12474 0.660593 2.4 V2 1.06626 0.626246 2.46389 + N0 0.965535 0.260275 -5.24893e-16 N1 0.865031 0.501718 -4.67305e-16 N2 0.336657 0.195261 0.92116 + txt003 +STRI + V0 1.18904 0.330924 2.46389 V1 1.23241 4.44089e-16 2.46389 V2 1.3 6.66134e-16 2.4 + N0 0.376378 0.101459 0.920894 N1 0.390293 -8.37138e-17 0.920691 N2 1 -4.06675e-16 -1.4803e-15 + txt003 +STRI + V0 1.3 6.66134e-16 2.4 V1 1.25426 0.349074 2.4 V2 1.18904 0.330924 2.46389 + N0 1 -4.06675e-16 -1.4803e-15 N1 0.965535 0.260275 -5.24893e-16 N2 0.376378 0.101459 0.920894 + txt003 +STRI + V0 0.584584 0.162696 0.00590278 V1 0.605903 0 0.00590278 V2 0 0 0 + N0 0.0218614 0.00589307 -0.999744 N1 0.0226746 0 -0.999743 N2 0 0 -1 + txt003 +STRI + V0 0.524218 0.307888 0.00590278 V1 0.584584 0.162696 0.00590278 V2 0 0 0 + N0 0.0195486 0.0113382 -0.999745 N1 0.0218614 0.00589307 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 0.430191 0.430191 0.00590278 V1 0.524218 0.307888 0.00590278 V2 0 0 0 + N0 0.015968 0.015968 -0.999745 N1 0.0195486 0.0113382 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 0.307888 0.524218 0.00590278 V1 0.430191 0.430191 0.00590278 V2 0 0 0 + N0 0.0113382 0.0195486 -0.999745 N1 0.015968 0.015968 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 0.162696 0.584584 0.00590278 V1 0.307888 0.524218 0.00590278 V2 0 0 0 + N0 0.00589307 0.0218614 -0.999744 N1 0.0113382 0.0195486 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 0 0.605903 0.00590278 V1 0.162696 0.584584 0.00590278 V2 0 0 0 + N0 4.94615e-18 0.0226746 -0.999743 N1 0.00589307 0.0218614 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 0.605903 0 0.00590278 V1 0.584584 0.162696 0.00590278 V2 0.986255 0.274486 0.0222222 + N0 0.0226746 0 -0.999743 N1 0.0218614 0.00589307 -0.999744 N2 0.0601415 0.0162121 -0.998058 + txt003 +STRI + V0 0.986255 0.274486 0.0222222 V1 1.02222 0 0.0222222 V2 0.605903 0 0.00590278 + N0 0.0601415 0.0162121 -0.998058 N1 0.0623783 0 -0.998053 N2 0.0226746 0 -0.999743 + txt003 +STRI + V0 0.584584 0.162696 0.00590278 V1 0.524218 0.307888 0.00590278 V2 0.884412 0.51944 0.0222222 + N0 0.0218614 0.00589307 -0.999744 N1 0.0195486 0.0113382 -0.999745 N2 0.0537792 0.0311919 -0.998066 + txt003 +STRI + V0 0.884412 0.51944 0.0222222 V1 0.986255 0.274486 0.0222222 V2 0.584584 0.162696 0.00590278 + N0 0.0537792 0.0311919 -0.998066 N1 0.0601415 0.0162121 -0.998058 N2 0.0218614 0.00589307 -0.999744 + txt003 +STRI + V0 0.524218 0.307888 0.00590278 V1 0.430191 0.430191 0.00590278 V2 0.725778 0.725778 0.0222222 + N0 0.0195486 0.0113382 -0.999745 N1 0.015968 0.015968 -0.999745 N2 0.0439291 0.0439291 -0.998068 + txt003 +STRI + V0 0.725778 0.725778 0.0222222 V1 0.884412 0.51944 0.0222222 V2 0.524218 0.307888 0.00590278 + N0 0.0439291 0.0439291 -0.998068 N1 0.0537792 0.0311919 -0.998066 N2 0.0195486 0.0113382 -0.999745 + txt003 +STRI + V0 0.430191 0.430191 0.00590278 V1 0.307888 0.524218 0.00590278 V2 0.51944 0.884412 0.0222222 + N0 0.015968 0.015968 -0.999745 N1 0.0113382 0.0195486 -0.999745 N2 0.0311919 0.0537792 -0.998066 + txt003 +STRI + V0 0.51944 0.884412 0.0222222 V1 0.725778 0.725778 0.0222222 V2 0.430191 0.430191 0.00590278 + N0 0.0311919 0.0537792 -0.998066 N1 0.0439291 0.0439291 -0.998068 N2 0.015968 0.015968 -0.999745 + txt003 +STRI + V0 0.307888 0.524218 0.00590278 V1 0.162696 0.584584 0.00590278 V2 0.274486 0.986255 0.0222222 + N0 0.0113382 0.0195486 -0.999745 N1 0.00589307 0.0218614 -0.999744 N2 0.0162121 0.0601415 -0.998058 + txt003 +STRI + V0 0.274486 0.986255 0.0222222 V1 0.51944 0.884412 0.0222222 V2 0.307888 0.524218 0.00590278 + N0 0.0162121 0.0601415 -0.998058 N1 0.0311919 0.0537792 -0.998066 N2 0.0113382 0.0195486 -0.999745 + txt003 +STRI + V0 0.162696 0.584584 0.00590278 V1 0 0.605903 0.00590278 V2 -2.22045e-16 1.02222 0.0222222 + N0 0.00589307 0.0218614 -0.999744 N1 4.94615e-18 0.0226746 -0.999743 N2 0 0.0623783 -0.998053 + txt003 +STRI + V0 -2.22045e-16 1.02222 0.0222222 V1 0.274486 0.986255 0.0222222 V2 0.162696 0.584584 0.00590278 + N0 0 0.0623783 -0.998053 N1 0.0162121 0.0601415 -0.998058 N2 0.00589307 0.0218614 -0.999744 + txt003 +STRI + V0 1.02222 0 0.0222222 V1 0.986255 0.274486 0.0222222 V2 1.23918 0.344878 0.046875 + N0 0.0623783 0 -0.998053 N1 0.0601415 0.0162121 -0.998058 N2 0.136353 0.0367561 -0.989978 + txt003 +STRI + V0 1.23918 0.344878 0.046875 V1 1.28438 0 0.046875 V2 1.02222 0 0.0222222 + N0 0.136353 0.0367561 -0.989978 N1 0.141421 0 -0.989949 N2 0.0623783 0 -0.998053 + txt003 +STRI + V0 0.986255 0.274486 0.0222222 V1 0.884412 0.51944 0.0222222 V2 1.11122 0.652653 0.046875 + N0 0.0601415 0.0162121 -0.998058 N1 0.0537792 0.0311919 -0.998066 N2 0.121932 0.0707208 -0.990016 + txt003 +STRI + V0 1.11122 0.652653 0.046875 V1 1.23918 0.344878 0.046875 V2 0.986255 0.274486 0.0222222 + N0 0.121932 0.0707208 -0.990016 N1 0.136353 0.0367561 -0.989978 N2 0.0601415 0.0162121 -0.998058 + txt003 +STRI + V0 0.884412 0.51944 0.0222222 V1 0.725778 0.725778 0.0222222 V2 0.911906 0.911906 0.046875 + N0 0.0537792 0.0311919 -0.998066 N1 0.0439291 0.0439291 -0.998068 N2 0.0996006 0.0996006 -0.99003 + txt003 +STRI + V0 0.911906 0.911906 0.046875 V1 1.11122 0.652653 0.046875 V2 0.884412 0.51944 0.0222222 + N0 0.0996006 0.0996006 -0.99003 N1 0.121932 0.0707208 -0.990016 N2 0.0537792 0.0311919 -0.998066 + txt003 +STRI + V0 0.725778 0.725778 0.0222222 V1 0.51944 0.884412 0.0222222 V2 0.652653 1.11122 0.046875 + N0 0.0439291 0.0439291 -0.998068 N1 0.0311919 0.0537792 -0.998066 N2 0.0707208 0.121932 -0.990016 + txt003 +STRI + V0 0.652653 1.11122 0.046875 V1 0.911906 0.911906 0.046875 V2 0.725778 0.725778 0.0222222 + N0 0.0707208 0.121932 -0.990016 N1 0.0996006 0.0996006 -0.99003 N2 0.0439291 0.0439291 -0.998068 + txt003 +STRI + V0 0.51944 0.884412 0.0222222 V1 0.274486 0.986255 0.0222222 V2 0.344878 1.23918 0.046875 + N0 0.0311919 0.0537792 -0.998066 N1 0.0162121 0.0601415 -0.998058 N2 0.0367561 0.136353 -0.989978 + txt003 +STRI + V0 0.344878 1.23918 0.046875 V1 0.652653 1.11122 0.046875 V2 0.51944 0.884412 0.0222222 + N0 0.0367561 0.136353 -0.989978 N1 0.0707208 0.121932 -0.990016 N2 0.0311919 0.0537792 -0.998066 + txt003 +STRI + V0 0.274486 0.986255 0.0222222 V1 -2.22045e-16 1.02222 0.0222222 V2 2.22045e-16 1.28437 0.046875 + N0 0.0162121 0.0601415 -0.998058 N1 0 0.0623783 -0.998053 N2 0 0.141421 -0.989949 + txt003 +STRI + V0 2.22045e-16 1.28437 0.046875 V1 0.344878 1.23918 0.046875 V2 0.274486 0.986255 0.0222222 + N0 0 0.141421 -0.989949 N1 0.0367561 0.136353 -0.989978 N2 0.0162121 0.0601415 -0.998058 + txt003 +STRI + V0 1.28438 0 0.046875 V1 1.23918 0.344878 0.046875 V2 1.37754 0.383385 0.0777778 + N0 0.141421 0 -0.989949 N1 0.136353 0.0367561 -0.989978 N2 0.316788 0.085395 -0.944644 + txt003 +STRI + V0 1.37754 0.383385 0.0777778 V1 1.42778 0 0.0777778 V2 1.28438 0 0.046875 + N0 0.316788 0.085395 -0.944644 N1 0.328521 0 -0.944497 N2 0.141421 0 -0.989949 + txt003 +STRI + V0 1.23918 0.344878 0.046875 V1 1.11122 0.652653 0.046875 V2 1.23529 0.725523 0.0777778 + N0 0.136353 0.0367561 -0.989978 N1 0.121932 0.0707208 -0.990016 N2 0.283331 0.164332 -0.944838 + txt003 +STRI + V0 1.23529 0.725523 0.0777778 V1 1.37754 0.383385 0.0777778 V2 1.23918 0.344878 0.046875 + N0 0.283331 0.164332 -0.944838 N1 0.316788 0.085395 -0.944644 N2 0.136353 0.0367561 -0.989978 + txt003 +STRI + V0 1.11122 0.652653 0.046875 V1 0.911906 0.911906 0.046875 V2 1.01372 1.01372 0.0777778 + N0 0.121932 0.0707208 -0.990016 N1 0.0996006 0.0996006 -0.99003 N2 0.231454 0.231454 -0.944912 + txt003 +STRI + V0 1.01372 1.01372 0.0777778 V1 1.23529 0.725523 0.0777778 V2 1.11122 0.652653 0.046875 + N0 0.231454 0.231454 -0.944912 N1 0.283331 0.164332 -0.944838 N2 0.121932 0.0707208 -0.990016 + txt003 +STRI + V0 0.911906 0.911906 0.046875 V1 0.652653 1.11122 0.046875 V2 0.725523 1.23529 0.0777778 + N0 0.0996006 0.0996006 -0.99003 N1 0.0707208 0.121932 -0.990016 N2 0.164332 0.283331 -0.944838 + txt003 +STRI + V0 0.725523 1.23529 0.0777778 V1 1.01372 1.01372 0.0777778 V2 0.911906 0.911906 0.046875 + N0 0.164332 0.283331 -0.944838 N1 0.231454 0.231454 -0.944912 N2 0.0996006 0.0996006 -0.99003 + txt003 +STRI + V0 0.652653 1.11122 0.046875 V1 0.344878 1.23918 0.046875 V2 0.383385 1.37754 0.0777778 + N0 0.0707208 0.121932 -0.990016 N1 0.0367561 0.136353 -0.989978 N2 0.085395 0.316788 -0.944644 + txt003 +STRI + V0 0.383385 1.37754 0.0777778 V1 0.725523 1.23529 0.0777778 V2 0.652653 1.11122 0.046875 + N0 0.085395 0.316788 -0.944644 N1 0.164332 0.283331 -0.944838 N2 0.0707208 0.121932 -0.990016 + txt003 +STRI + V0 0.344878 1.23918 0.046875 V1 2.22045e-16 1.28437 0.046875 V2 -2.22045e-16 1.42778 0.0777778 + N0 0.0367561 0.136353 -0.989978 N1 0 0.141421 -0.989949 N2 6.08223e-17 0.328521 -0.944497 + txt003 +STRI + V0 -2.22045e-16 1.42778 0.0777778 V1 0.383385 1.37754 0.0777778 V2 0.344878 1.23918 0.046875 + N0 6.08223e-17 0.328521 -0.944497 N1 0.085395 0.316788 -0.944644 N2 0.0367561 0.136353 -0.989978 + txt003 +STRI + V0 1.42778 0 0.0777778 V1 1.37754 0.383385 0.0777778 V2 1.4355 0.399515 0.112847 + N0 0.328521 0 -0.944497 N1 0.316788 0.085395 -0.944644 N2 0.743044 0.200299 -0.638566 + txt003 +STRI + V0 1.4355 0.399515 0.112847 V1 1.48785 0 0.112847 V2 1.42778 0 0.0777778 + N0 0.743044 0.200299 -0.638566 N1 0.770022 0 -0.638018 N2 0.328521 0 -0.944497 + txt003 +STRI + V0 1.37754 0.383385 0.0777778 V1 1.23529 0.725523 0.0777778 V2 1.28726 0.756047 0.112847 + N0 0.316788 0.085395 -0.944644 N1 0.283331 0.164332 -0.944838 N2 0.665182 0.385806 -0.639286 + txt003 +STRI + V0 1.28726 0.756047 0.112847 V1 1.4355 0.399515 0.112847 V2 1.37754 0.383385 0.0777778 + N0 0.665182 0.385806 -0.639286 N1 0.743044 0.200299 -0.638566 N2 0.316788 0.085395 -0.944644 + txt003 +STRI + V0 1.23529 0.725523 0.0777778 V1 1.01372 1.01372 0.0777778 V2 1.05637 1.05637 0.112847 + N0 0.283331 0.164332 -0.944838 N1 0.231454 0.231454 -0.944912 N2 0.543581 0.543581 -0.639562 + txt003 +STRI + V0 1.05637 1.05637 0.112847 V1 1.28726 0.756047 0.112847 V2 1.23529 0.725523 0.0777778 + N0 0.543581 0.543581 -0.639562 N1 0.665182 0.385806 -0.639286 N2 0.283331 0.164332 -0.944838 + txt003 +STRI + V0 1.01372 1.01372 0.0777778 V1 0.725523 1.23529 0.0777778 V2 0.756047 1.28726 0.112847 + N0 0.231454 0.231454 -0.944912 N1 0.164332 0.283331 -0.944838 N2 0.385806 0.665182 -0.639286 + txt003 +STRI + V0 0.756047 1.28726 0.112847 V1 1.05637 1.05637 0.112847 V2 1.01372 1.01372 0.0777778 + N0 0.385806 0.665182 -0.639286 N1 0.543581 0.543581 -0.639562 N2 0.231454 0.231454 -0.944912 + txt003 +STRI + V0 0.725523 1.23529 0.0777778 V1 0.383385 1.37754 0.0777778 V2 0.399515 1.4355 0.112847 + N0 0.164332 0.283331 -0.944838 N1 0.085395 0.316788 -0.944644 N2 0.200299 0.743044 -0.638566 + txt003 +STRI + V0 0.399515 1.4355 0.112847 V1 0.756047 1.28726 0.112847 V2 0.725523 1.23529 0.0777778 + N0 0.200299 0.743044 -0.638566 N1 0.385806 0.665182 -0.639286 N2 0.164332 0.283331 -0.944838 + txt003 +STRI + V0 0.383385 1.37754 0.0777778 V1 -2.22045e-16 1.42778 0.0777778 V2 0 1.48785 0.112847 + N0 0.085395 0.316788 -0.944644 N1 6.08223e-17 0.328521 -0.944497 N2 1.36806e-16 0.770022 -0.638018 + txt003 +STRI + V0 0 1.48785 0.112847 V1 0.399515 1.4355 0.112847 V2 0.383385 1.37754 0.0777778 + N0 1.36806e-16 0.770022 -0.638018 N1 0.200299 0.743044 -0.638566 N2 0.085395 0.316788 -0.944644 + txt003 +STRI + V0 1.48785 0 0.112847 V1 1.4355 0.399515 0.112847 V2 1.44722 0.402778 0.15 + N0 0.770022 0 -0.638018 N1 0.743044 0.200299 -0.638566 N2 0.965535 0.260275 -2.07142e-16 + txt003 +STRI + V0 1.44722 0.402778 0.15 V1 1.5 0 0.15 V2 1.48785 0 0.112847 + N0 0.965535 0.260275 -2.07142e-16 N1 1 0 0 N2 0.770022 0 -0.638018 + txt003 +STRI + V0 1.4355 0.399515 0.112847 V1 1.28726 0.756047 0.112847 V2 1.29778 0.762222 0.15 + N0 0.743044 0.200299 -0.638566 N1 0.665182 0.385806 -0.639286 N2 0.865031 0.501718 -5.46348e-16 + txt003 +STRI + V0 1.29778 0.762222 0.15 V1 1.44722 0.402778 0.15 V2 1.4355 0.399515 0.112847 + N0 0.865031 0.501718 -5.46348e-16 N1 0.965535 0.260275 -2.07142e-16 N2 0.743044 0.200299 -0.638566 + txt003 +STRI + V0 1.28726 0.756047 0.112847 V1 1.05637 1.05637 0.112847 V2 1.065 1.065 0.15 + N0 0.665182 0.385806 -0.639286 N1 0.543581 0.543581 -0.639562 N2 0.707107 0.707107 -6.97819e-16 + txt003 +STRI + V0 1.065 1.065 0.15 V1 1.29778 0.762222 0.15 V2 1.28726 0.756047 0.112847 + N0 0.707107 0.707107 -6.97819e-16 N1 0.865031 0.501718 -5.46348e-16 N2 0.665182 0.385806 -0.639286 + txt003 +STRI + V0 1.05637 1.05637 0.112847 V1 0.756047 1.28726 0.112847 V2 0.762222 1.29778 0.15 + N0 0.543581 0.543581 -0.639562 N1 0.385806 0.665182 -0.639286 N2 0.501718 0.865031 -5.46348e-16 + txt003 +STRI + V0 0.762222 1.29778 0.15 V1 1.065 1.065 0.15 V2 1.05637 1.05637 0.112847 + N0 0.501718 0.865031 -5.46348e-16 N1 0.707107 0.707107 -6.97819e-16 N2 0.543581 0.543581 -0.639562 + txt003 +STRI + V0 0.756047 1.28726 0.112847 V1 0.399515 1.4355 0.112847 V2 0.402778 1.44722 0.15 + N0 0.385806 0.665182 -0.639286 N1 0.200299 0.743044 -0.638566 N2 0.260275 0.965535 -2.07142e-16 + txt003 +STRI + V0 0.402778 1.44722 0.15 V1 0.762222 1.29778 0.15 V2 0.756047 1.28726 0.112847 + N0 0.260275 0.965535 -2.07142e-16 N1 0.501718 0.865031 -5.46348e-16 N2 0.385806 0.665182 -0.639286 + txt003 +STRI + V0 0.399515 1.4355 0.112847 V1 0 1.48785 0.112847 V2 0 1.5 0.15 + N0 0.200299 0.743044 -0.638566 N1 1.36806e-16 0.770022 -0.638018 N2 0 1 -0 + txt003 +STRI + V0 0 1.5 0.15 V1 0.402778 1.44722 0.15 V2 0.399515 1.4355 0.112847 + N0 0 1 -0 N1 0.260275 0.965535 -2.07142e-16 N2 0.200299 0.743044 -0.638566 + txt003 +STRI + V0 -0.162696 0.584584 0.00590278 V1 0 0.605903 0.00590278 V2 0 0 0 + N0 -0.00589307 0.0218614 -0.999744 N1 0 0.0226746 -0.999743 N2 0 0 -1 + txt003 +STRI + V0 -0.307888 0.524218 0.00590278 V1 -0.162696 0.584584 0.00590278 V2 0 0 0 + N0 -0.0113382 0.0195486 -0.999745 N1 -0.00589307 0.0218614 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 -0.430191 0.430191 0.00590278 V1 -0.307888 0.524218 0.00590278 V2 0 0 0 + N0 -0.015968 0.015968 -0.999745 N1 -0.0113382 0.0195486 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 -0.524218 0.307888 0.00590278 V1 -0.430191 0.430191 0.00590278 V2 0 0 0 + N0 -0.0195486 0.0113382 -0.999745 N1 -0.015968 0.015968 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 -0.584584 0.162696 0.00590278 V1 -0.524218 0.307888 0.00590278 V2 0 0 0 + N0 -0.0218614 0.00589307 -0.999744 N1 -0.0195486 0.0113382 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 -0.605903 0 0.00590278 V1 -0.584584 0.162696 0.00590278 V2 0 0 0 + N0 -0.0226746 4.94615e-18 -0.999743 N1 -0.0218614 0.00589307 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 0 0.605903 0.00590278 V1 -0.162696 0.584584 0.00590278 V2 -0.274486 0.986255 0.0222222 + N0 0 0.0226746 -0.999743 N1 -0.00589307 0.0218614 -0.999744 N2 -0.0162121 0.0601415 -0.998058 + txt003 +STRI + V0 -0.274486 0.986255 0.0222222 V1 0 1.02222 0.0222222 V2 0 0.605903 0.00590278 + N0 -0.0162121 0.0601415 -0.998058 N1 0 0.0623783 -0.998053 N2 0 0.0226746 -0.999743 + txt003 +STRI + V0 -0.162696 0.584584 0.00590278 V1 -0.307888 0.524218 0.00590278 V2 -0.51944 0.884412 0.0222222 + N0 -0.00589307 0.0218614 -0.999744 N1 -0.0113382 0.0195486 -0.999745 N2 -0.0311919 0.0537792 -0.998066 + txt003 +STRI + V0 -0.51944 0.884412 0.0222222 V1 -0.274486 0.986255 0.0222222 V2 -0.162696 0.584584 0.00590278 + N0 -0.0311919 0.0537792 -0.998066 N1 -0.0162121 0.0601415 -0.998058 N2 -0.00589307 0.0218614 -0.999744 + txt003 +STRI + V0 -0.307888 0.524218 0.00590278 V1 -0.430191 0.430191 0.00590278 V2 -0.725778 0.725778 0.0222222 + N0 -0.0113382 0.0195486 -0.999745 N1 -0.015968 0.015968 -0.999745 N2 -0.0439291 0.0439291 -0.998068 + txt003 +STRI + V0 -0.725778 0.725778 0.0222222 V1 -0.51944 0.884412 0.0222222 V2 -0.307888 0.524218 0.00590278 + N0 -0.0439291 0.0439291 -0.998068 N1 -0.0311919 0.0537792 -0.998066 N2 -0.0113382 0.0195486 -0.999745 + txt003 +STRI + V0 -0.430191 0.430191 0.00590278 V1 -0.524218 0.307888 0.00590278 V2 -0.884412 0.51944 0.0222222 + N0 -0.015968 0.015968 -0.999745 N1 -0.0195486 0.0113382 -0.999745 N2 -0.0537792 0.0311919 -0.998066 + txt003 +STRI + V0 -0.884412 0.51944 0.0222222 V1 -0.725778 0.725778 0.0222222 V2 -0.430191 0.430191 0.00590278 + N0 -0.0537792 0.0311919 -0.998066 N1 -0.0439291 0.0439291 -0.998068 N2 -0.015968 0.015968 -0.999745 + txt003 +STRI + V0 -0.524218 0.307888 0.00590278 V1 -0.584584 0.162696 0.00590278 V2 -0.986255 0.274486 0.0222222 + N0 -0.0195486 0.0113382 -0.999745 N1 -0.0218614 0.00589307 -0.999744 N2 -0.0601415 0.0162121 -0.998058 + txt003 +STRI + V0 -0.986255 0.274486 0.0222222 V1 -0.884412 0.51944 0.0222222 V2 -0.524218 0.307888 0.00590278 + N0 -0.0601415 0.0162121 -0.998058 N1 -0.0537792 0.0311919 -0.998066 N2 -0.0195486 0.0113382 -0.999745 + txt003 +STRI + V0 -0.584584 0.162696 0.00590278 V1 -0.605903 0 0.00590278 V2 -1.02222 -2.22045e-16 0.0222222 + N0 -0.0218614 0.00589307 -0.999744 N1 -0.0226746 4.94615e-18 -0.999743 N2 -0.0623783 -0 -0.998053 + txt003 +STRI + V0 -1.02222 -2.22045e-16 0.0222222 V1 -0.986255 0.274486 0.0222222 V2 -0.584584 0.162696 0.00590278 + N0 -0.0623783 -0 -0.998053 N1 -0.0601415 0.0162121 -0.998058 N2 -0.0218614 0.00589307 -0.999744 + txt003 +STRI + V0 0 1.02222 0.0222222 V1 -0.274486 0.986255 0.0222222 V2 -0.344878 1.23918 0.046875 + N0 0 0.0623783 -0.998053 N1 -0.0162121 0.0601415 -0.998058 N2 -0.0367561 0.136353 -0.989978 + txt003 +STRI + V0 -0.344878 1.23918 0.046875 V1 0 1.28438 0.046875 V2 0 1.02222 0.0222222 + N0 -0.0367561 0.136353 -0.989978 N1 0 0.141421 -0.989949 N2 0 0.0623783 -0.998053 + txt003 +STRI + V0 -0.274486 0.986255 0.0222222 V1 -0.51944 0.884412 0.0222222 V2 -0.652653 1.11122 0.046875 + N0 -0.0162121 0.0601415 -0.998058 N1 -0.0311919 0.0537792 -0.998066 N2 -0.0707208 0.121932 -0.990016 + txt003 +STRI + V0 -0.652653 1.11122 0.046875 V1 -0.344878 1.23918 0.046875 V2 -0.274486 0.986255 0.0222222 + N0 -0.0707208 0.121932 -0.990016 N1 -0.0367561 0.136353 -0.989978 N2 -0.0162121 0.0601415 -0.998058 + txt003 +STRI + V0 -0.51944 0.884412 0.0222222 V1 -0.725778 0.725778 0.0222222 V2 -0.911906 0.911906 0.046875 + N0 -0.0311919 0.0537792 -0.998066 N1 -0.0439291 0.0439291 -0.998068 N2 -0.0996006 0.0996006 -0.99003 + txt003 +STRI + V0 -0.911906 0.911906 0.046875 V1 -0.652653 1.11122 0.046875 V2 -0.51944 0.884412 0.0222222 + N0 -0.0996006 0.0996006 -0.99003 N1 -0.0707208 0.121932 -0.990016 N2 -0.0311919 0.0537792 -0.998066 + txt003 +STRI + V0 -0.725778 0.725778 0.0222222 V1 -0.884412 0.51944 0.0222222 V2 -1.11122 0.652653 0.046875 + N0 -0.0439291 0.0439291 -0.998068 N1 -0.0537792 0.0311919 -0.998066 N2 -0.121932 0.0707208 -0.990016 + txt003 +STRI + V0 -1.11122 0.652653 0.046875 V1 -0.911906 0.911906 0.046875 V2 -0.725778 0.725778 0.0222222 + N0 -0.121932 0.0707208 -0.990016 N1 -0.0996006 0.0996006 -0.99003 N2 -0.0439291 0.0439291 -0.998068 + txt003 +STRI + V0 -0.884412 0.51944 0.0222222 V1 -0.986255 0.274486 0.0222222 V2 -1.23918 0.344878 0.046875 + N0 -0.0537792 0.0311919 -0.998066 N1 -0.0601415 0.0162121 -0.998058 N2 -0.136353 0.0367561 -0.989978 + txt003 +STRI + V0 -1.23918 0.344878 0.046875 V1 -1.11122 0.652653 0.046875 V2 -0.884412 0.51944 0.0222222 + N0 -0.136353 0.0367561 -0.989978 N1 -0.121932 0.0707208 -0.990016 N2 -0.0537792 0.0311919 -0.998066 + txt003 +STRI + V0 -0.986255 0.274486 0.0222222 V1 -1.02222 -2.22045e-16 0.0222222 V2 -1.28437 2.22045e-16 0.046875 + N0 -0.0601415 0.0162121 -0.998058 N1 -0.0623783 -0 -0.998053 N2 -0.141421 -0 -0.989949 + txt003 +STRI + V0 -1.28437 2.22045e-16 0.046875 V1 -1.23918 0.344878 0.046875 V2 -0.986255 0.274486 0.0222222 + N0 -0.141421 -0 -0.989949 N1 -0.136353 0.0367561 -0.989978 N2 -0.0601415 0.0162121 -0.998058 + txt003 +STRI + V0 0 1.28438 0.046875 V1 -0.344878 1.23918 0.046875 V2 -0.383385 1.37754 0.0777778 + N0 0 0.141421 -0.989949 N1 -0.0367561 0.136353 -0.989978 N2 -0.085395 0.316788 -0.944644 + txt003 +STRI + V0 -0.383385 1.37754 0.0777778 V1 0 1.42778 0.0777778 V2 0 1.28438 0.046875 + N0 -0.085395 0.316788 -0.944644 N1 0 0.328521 -0.944497 N2 0 0.141421 -0.989949 + txt003 +STRI + V0 -0.344878 1.23918 0.046875 V1 -0.652653 1.11122 0.046875 V2 -0.725523 1.23529 0.0777778 + N0 -0.0367561 0.136353 -0.989978 N1 -0.0707208 0.121932 -0.990016 N2 -0.164332 0.283331 -0.944838 + txt003 +STRI + V0 -0.725523 1.23529 0.0777778 V1 -0.383385 1.37754 0.0777778 V2 -0.344878 1.23918 0.046875 + N0 -0.164332 0.283331 -0.944838 N1 -0.085395 0.316788 -0.944644 N2 -0.0367561 0.136353 -0.989978 + txt003 +STRI + V0 -0.652653 1.11122 0.046875 V1 -0.911906 0.911906 0.046875 V2 -1.01372 1.01372 0.0777778 + N0 -0.0707208 0.121932 -0.990016 N1 -0.0996006 0.0996006 -0.99003 N2 -0.231454 0.231454 -0.944912 + txt003 +STRI + V0 -1.01372 1.01372 0.0777778 V1 -0.725523 1.23529 0.0777778 V2 -0.652653 1.11122 0.046875 + N0 -0.231454 0.231454 -0.944912 N1 -0.164332 0.283331 -0.944838 N2 -0.0707208 0.121932 -0.990016 + txt003 +STRI + V0 -0.911906 0.911906 0.046875 V1 -1.11122 0.652653 0.046875 V2 -1.23529 0.725523 0.0777778 + N0 -0.0996006 0.0996006 -0.99003 N1 -0.121932 0.0707208 -0.990016 N2 -0.283331 0.164332 -0.944838 + txt003 +STRI + V0 -1.23529 0.725523 0.0777778 V1 -1.01372 1.01372 0.0777778 V2 -0.911906 0.911906 0.046875 + N0 -0.283331 0.164332 -0.944838 N1 -0.231454 0.231454 -0.944912 N2 -0.0996006 0.0996006 -0.99003 + txt003 +STRI + V0 -1.11122 0.652653 0.046875 V1 -1.23918 0.344878 0.046875 V2 -1.37754 0.383385 0.0777778 + N0 -0.121932 0.0707208 -0.990016 N1 -0.136353 0.0367561 -0.989978 N2 -0.316788 0.085395 -0.944644 + txt003 +STRI + V0 -1.37754 0.383385 0.0777778 V1 -1.23529 0.725523 0.0777778 V2 -1.11122 0.652653 0.046875 + N0 -0.316788 0.085395 -0.944644 N1 -0.283331 0.164332 -0.944838 N2 -0.121932 0.0707208 -0.990016 + txt003 +STRI + V0 -1.23918 0.344878 0.046875 V1 -1.28437 2.22045e-16 0.046875 V2 -1.42778 -2.22045e-16 0.0777778 + N0 -0.136353 0.0367561 -0.989978 N1 -0.141421 -0 -0.989949 N2 -0.328521 6.08223e-17 -0.944497 + txt003 +STRI + V0 -1.42778 -2.22045e-16 0.0777778 V1 -1.37754 0.383385 0.0777778 V2 -1.23918 0.344878 0.046875 + N0 -0.328521 6.08223e-17 -0.944497 N1 -0.316788 0.085395 -0.944644 N2 -0.136353 0.0367561 -0.989978 + txt003 +STRI + V0 0 1.42778 0.0777778 V1 -0.383385 1.37754 0.0777778 V2 -0.399515 1.4355 0.112847 + N0 0 0.328521 -0.944497 N1 -0.085395 0.316788 -0.944644 N2 -0.200299 0.743044 -0.638566 + txt003 +STRI + V0 -0.399515 1.4355 0.112847 V1 0 1.48785 0.112847 V2 0 1.42778 0.0777778 + N0 -0.200299 0.743044 -0.638566 N1 0 0.770022 -0.638018 N2 0 0.328521 -0.944497 + txt003 +STRI + V0 -0.383385 1.37754 0.0777778 V1 -0.725523 1.23529 0.0777778 V2 -0.756047 1.28726 0.112847 + N0 -0.085395 0.316788 -0.944644 N1 -0.164332 0.283331 -0.944838 N2 -0.385806 0.665182 -0.639286 + txt003 +STRI + V0 -0.756047 1.28726 0.112847 V1 -0.399515 1.4355 0.112847 V2 -0.383385 1.37754 0.0777778 + N0 -0.385806 0.665182 -0.639286 N1 -0.200299 0.743044 -0.638566 N2 -0.085395 0.316788 -0.944644 + txt003 +STRI + V0 -0.725523 1.23529 0.0777778 V1 -1.01372 1.01372 0.0777778 V2 -1.05637 1.05637 0.112847 + N0 -0.164332 0.283331 -0.944838 N1 -0.231454 0.231454 -0.944912 N2 -0.543581 0.543581 -0.639562 + txt003 +STRI + V0 -1.05637 1.05637 0.112847 V1 -0.756047 1.28726 0.112847 V2 -0.725523 1.23529 0.0777778 + N0 -0.543581 0.543581 -0.639562 N1 -0.385806 0.665182 -0.639286 N2 -0.164332 0.283331 -0.944838 + txt003 +STRI + V0 -1.01372 1.01372 0.0777778 V1 -1.23529 0.725523 0.0777778 V2 -1.28726 0.756047 0.112847 + N0 -0.231454 0.231454 -0.944912 N1 -0.283331 0.164332 -0.944838 N2 -0.665182 0.385806 -0.639286 + txt003 +STRI + V0 -1.28726 0.756047 0.112847 V1 -1.05637 1.05637 0.112847 V2 -1.01372 1.01372 0.0777778 + N0 -0.665182 0.385806 -0.639286 N1 -0.543581 0.543581 -0.639562 N2 -0.231454 0.231454 -0.944912 + txt003 +STRI + V0 -1.23529 0.725523 0.0777778 V1 -1.37754 0.383385 0.0777778 V2 -1.4355 0.399515 0.112847 + N0 -0.283331 0.164332 -0.944838 N1 -0.316788 0.085395 -0.944644 N2 -0.743044 0.200299 -0.638566 + txt003 +STRI + V0 -1.4355 0.399515 0.112847 V1 -1.28726 0.756047 0.112847 V2 -1.23529 0.725523 0.0777778 + N0 -0.743044 0.200299 -0.638566 N1 -0.665182 0.385806 -0.639286 N2 -0.283331 0.164332 -0.944838 + txt003 +STRI + V0 -1.37754 0.383385 0.0777778 V1 -1.42778 -2.22045e-16 0.0777778 V2 -1.48785 0 0.112847 + N0 -0.316788 0.085395 -0.944644 N1 -0.328521 6.08223e-17 -0.944497 N2 -0.770022 1.36806e-16 -0.638018 + txt003 +STRI + V0 -1.48785 0 0.112847 V1 -1.4355 0.399515 0.112847 V2 -1.37754 0.383385 0.0777778 + N0 -0.770022 1.36806e-16 -0.638018 N1 -0.743044 0.200299 -0.638566 N2 -0.316788 0.085395 -0.944644 + txt003 +STRI + V0 0 1.48785 0.112847 V1 -0.399515 1.4355 0.112847 V2 -0.402778 1.44722 0.15 + N0 0 0.770022 -0.638018 N1 -0.200299 0.743044 -0.638566 N2 -0.260275 0.965535 -2.07142e-16 + txt003 +STRI + V0 -0.402778 1.44722 0.15 V1 0 1.5 0.15 V2 0 1.48785 0.112847 + N0 -0.260275 0.965535 -2.07142e-16 N1 0 1 -0 N2 0 0.770022 -0.638018 + txt003 +STRI + V0 -0.399515 1.4355 0.112847 V1 -0.756047 1.28726 0.112847 V2 -0.762222 1.29778 0.15 + N0 -0.200299 0.743044 -0.638566 N1 -0.385806 0.665182 -0.639286 N2 -0.501718 0.865031 -5.46348e-16 + txt003 +STRI + V0 -0.762222 1.29778 0.15 V1 -0.402778 1.44722 0.15 V2 -0.399515 1.4355 0.112847 + N0 -0.501718 0.865031 -5.46348e-16 N1 -0.260275 0.965535 -2.07142e-16 N2 -0.200299 0.743044 -0.638566 + txt003 +STRI + V0 -0.756047 1.28726 0.112847 V1 -1.05637 1.05637 0.112847 V2 -1.065 1.065 0.15 + N0 -0.385806 0.665182 -0.639286 N1 -0.543581 0.543581 -0.639562 N2 -0.707107 0.707107 -6.97819e-16 + txt003 +STRI + V0 -1.065 1.065 0.15 V1 -0.762222 1.29778 0.15 V2 -0.756047 1.28726 0.112847 + N0 -0.707107 0.707107 -6.97819e-16 N1 -0.501718 0.865031 -5.46348e-16 N2 -0.385806 0.665182 -0.639286 + txt003 +STRI + V0 -1.05637 1.05637 0.112847 V1 -1.28726 0.756047 0.112847 V2 -1.29778 0.762222 0.15 + N0 -0.543581 0.543581 -0.639562 N1 -0.665182 0.385806 -0.639286 N2 -0.865031 0.501718 -5.46348e-16 + txt003 +STRI + V0 -1.29778 0.762222 0.15 V1 -1.065 1.065 0.15 V2 -1.05637 1.05637 0.112847 + N0 -0.865031 0.501718 -5.46348e-16 N1 -0.707107 0.707107 -6.97819e-16 N2 -0.543581 0.543581 -0.639562 + txt003 +STRI + V0 -1.28726 0.756047 0.112847 V1 -1.4355 0.399515 0.112847 V2 -1.44722 0.402778 0.15 + N0 -0.665182 0.385806 -0.639286 N1 -0.743044 0.200299 -0.638566 N2 -0.965535 0.260275 -2.07142e-16 + txt003 +STRI + V0 -1.44722 0.402778 0.15 V1 -1.29778 0.762222 0.15 V2 -1.28726 0.756047 0.112847 + N0 -0.965535 0.260275 -2.07142e-16 N1 -0.865031 0.501718 -5.46348e-16 N2 -0.665182 0.385806 -0.639286 + txt003 +STRI + V0 -1.4355 0.399515 0.112847 V1 -1.48785 0 0.112847 V2 -1.5 0 0.15 + N0 -0.743044 0.200299 -0.638566 N1 -0.770022 1.36806e-16 -0.638018 N2 -1 0 0 + txt003 +STRI + V0 -1.5 0 0.15 V1 -1.44722 0.402778 0.15 V2 -1.4355 0.399515 0.112847 + N0 -1 0 0 N1 -0.965535 0.260275 -2.07142e-16 N2 -0.743044 0.200299 -0.638566 + txt003 +STRI + V0 -0.584584 -0.162696 0.00590278 V1 -0.605903 0 0.00590278 V2 0 0 0 + N0 -0.0218614 -0.00589307 -0.999744 N1 -0.0226746 -0 -0.999743 N2 0 0 -1 + txt003 +STRI + V0 -0.524218 -0.307888 0.00590278 V1 -0.584584 -0.162696 0.00590278 V2 0 0 0 + N0 -0.0195486 -0.0113382 -0.999745 N1 -0.0218614 -0.00589307 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 -0.430191 -0.430191 0.00590278 V1 -0.524218 -0.307888 0.00590278 V2 0 0 0 + N0 -0.015968 -0.015968 -0.999745 N1 -0.0195486 -0.0113382 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 -0.307888 -0.524218 0.00590278 V1 -0.430191 -0.430191 0.00590278 V2 0 0 0 + N0 -0.0113382 -0.0195486 -0.999745 N1 -0.015968 -0.015968 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 -0.162696 -0.584584 0.00590278 V1 -0.307888 -0.524218 0.00590278 V2 0 0 0 + N0 -0.00589307 -0.0218614 -0.999744 N1 -0.0113382 -0.0195486 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 0 -0.605903 0.00590278 V1 -0.162696 -0.584584 0.00590278 V2 0 0 0 + N0 -4.94615e-18 -0.0226746 -0.999743 N1 -0.00589307 -0.0218614 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 -0.605903 0 0.00590278 V1 -0.584584 -0.162696 0.00590278 V2 -0.986255 -0.274486 0.0222222 + N0 -0.0226746 -0 -0.999743 N1 -0.0218614 -0.00589307 -0.999744 N2 -0.0601415 -0.0162121 -0.998058 + txt003 +STRI + V0 -0.986255 -0.274486 0.0222222 V1 -1.02222 0 0.0222222 V2 -0.605903 0 0.00590278 + N0 -0.0601415 -0.0162121 -0.998058 N1 -0.0623783 -0 -0.998053 N2 -0.0226746 -0 -0.999743 + txt003 +STRI + V0 -0.584584 -0.162696 0.00590278 V1 -0.524218 -0.307888 0.00590278 V2 -0.884412 -0.51944 0.0222222 + N0 -0.0218614 -0.00589307 -0.999744 N1 -0.0195486 -0.0113382 -0.999745 N2 -0.0537792 -0.0311919 -0.998066 + txt003 +STRI + V0 -0.884412 -0.51944 0.0222222 V1 -0.986255 -0.274486 0.0222222 V2 -0.584584 -0.162696 0.00590278 + N0 -0.0537792 -0.0311919 -0.998066 N1 -0.0601415 -0.0162121 -0.998058 N2 -0.0218614 -0.00589307 -0.999744 + txt003 +STRI + V0 -0.524218 -0.307888 0.00590278 V1 -0.430191 -0.430191 0.00590278 V2 -0.725778 -0.725778 0.0222222 + N0 -0.0195486 -0.0113382 -0.999745 N1 -0.015968 -0.015968 -0.999745 N2 -0.0439291 -0.0439291 -0.998068 + txt003 +STRI + V0 -0.725778 -0.725778 0.0222222 V1 -0.884412 -0.51944 0.0222222 V2 -0.524218 -0.307888 0.00590278 + N0 -0.0439291 -0.0439291 -0.998068 N1 -0.0537792 -0.0311919 -0.998066 N2 -0.0195486 -0.0113382 -0.999745 + txt003 +STRI + V0 -0.430191 -0.430191 0.00590278 V1 -0.307888 -0.524218 0.00590278 V2 -0.51944 -0.884412 0.0222222 + N0 -0.015968 -0.015968 -0.999745 N1 -0.0113382 -0.0195486 -0.999745 N2 -0.0311919 -0.0537792 -0.998066 + txt003 +STRI + V0 -0.51944 -0.884412 0.0222222 V1 -0.725778 -0.725778 0.0222222 V2 -0.430191 -0.430191 0.00590278 + N0 -0.0311919 -0.0537792 -0.998066 N1 -0.0439291 -0.0439291 -0.998068 N2 -0.015968 -0.015968 -0.999745 + txt003 +STRI + V0 -0.307888 -0.524218 0.00590278 V1 -0.162696 -0.584584 0.00590278 V2 -0.274486 -0.986255 0.0222222 + N0 -0.0113382 -0.0195486 -0.999745 N1 -0.00589307 -0.0218614 -0.999744 N2 -0.0162121 -0.0601415 -0.998058 + txt003 +STRI + V0 -0.274486 -0.986255 0.0222222 V1 -0.51944 -0.884412 0.0222222 V2 -0.307888 -0.524218 0.00590278 + N0 -0.0162121 -0.0601415 -0.998058 N1 -0.0311919 -0.0537792 -0.998066 N2 -0.0113382 -0.0195486 -0.999745 + txt003 +STRI + V0 -0.162696 -0.584584 0.00590278 V1 0 -0.605903 0.00590278 V2 2.22045e-16 -1.02222 0.0222222 + N0 -0.00589307 -0.0218614 -0.999744 N1 -4.94615e-18 -0.0226746 -0.999743 N2 0 -0.0623783 -0.998053 + txt003 +STRI + V0 2.22045e-16 -1.02222 0.0222222 V1 -0.274486 -0.986255 0.0222222 V2 -0.162696 -0.584584 0.00590278 + N0 0 -0.0623783 -0.998053 N1 -0.0162121 -0.0601415 -0.998058 N2 -0.00589307 -0.0218614 -0.999744 + txt003 +STRI + V0 -1.02222 0 0.0222222 V1 -0.986255 -0.274486 0.0222222 V2 -1.23918 -0.344878 0.046875 + N0 -0.0623783 -0 -0.998053 N1 -0.0601415 -0.0162121 -0.998058 N2 -0.136353 -0.0367561 -0.989978 + txt003 +STRI + V0 -1.23918 -0.344878 0.046875 V1 -1.28438 0 0.046875 V2 -1.02222 0 0.0222222 + N0 -0.136353 -0.0367561 -0.989978 N1 -0.141421 -0 -0.989949 N2 -0.0623783 -0 -0.998053 + txt003 +STRI + V0 -0.986255 -0.274486 0.0222222 V1 -0.884412 -0.51944 0.0222222 V2 -1.11122 -0.652653 0.046875 + N0 -0.0601415 -0.0162121 -0.998058 N1 -0.0537792 -0.0311919 -0.998066 N2 -0.121932 -0.0707208 -0.990016 + txt003 +STRI + V0 -1.11122 -0.652653 0.046875 V1 -1.23918 -0.344878 0.046875 V2 -0.986255 -0.274486 0.0222222 + N0 -0.121932 -0.0707208 -0.990016 N1 -0.136353 -0.0367561 -0.989978 N2 -0.0601415 -0.0162121 -0.998058 + txt003 +STRI + V0 -0.884412 -0.51944 0.0222222 V1 -0.725778 -0.725778 0.0222222 V2 -0.911906 -0.911906 0.046875 + N0 -0.0537792 -0.0311919 -0.998066 N1 -0.0439291 -0.0439291 -0.998068 N2 -0.0996006 -0.0996006 -0.99003 + txt003 +STRI + V0 -0.911906 -0.911906 0.046875 V1 -1.11122 -0.652653 0.046875 V2 -0.884412 -0.51944 0.0222222 + N0 -0.0996006 -0.0996006 -0.99003 N1 -0.121932 -0.0707208 -0.990016 N2 -0.0537792 -0.0311919 -0.998066 + txt003 +STRI + V0 -0.725778 -0.725778 0.0222222 V1 -0.51944 -0.884412 0.0222222 V2 -0.652653 -1.11122 0.046875 + N0 -0.0439291 -0.0439291 -0.998068 N1 -0.0311919 -0.0537792 -0.998066 N2 -0.0707208 -0.121932 -0.990016 + txt003 +STRI + V0 -0.652653 -1.11122 0.046875 V1 -0.911906 -0.911906 0.046875 V2 -0.725778 -0.725778 0.0222222 + N0 -0.0707208 -0.121932 -0.990016 N1 -0.0996006 -0.0996006 -0.99003 N2 -0.0439291 -0.0439291 -0.998068 + txt003 +STRI + V0 -0.51944 -0.884412 0.0222222 V1 -0.274486 -0.986255 0.0222222 V2 -0.344878 -1.23918 0.046875 + N0 -0.0311919 -0.0537792 -0.998066 N1 -0.0162121 -0.0601415 -0.998058 N2 -0.0367561 -0.136353 -0.989978 + txt003 +STRI + V0 -0.344878 -1.23918 0.046875 V1 -0.652653 -1.11122 0.046875 V2 -0.51944 -0.884412 0.0222222 + N0 -0.0367561 -0.136353 -0.989978 N1 -0.0707208 -0.121932 -0.990016 N2 -0.0311919 -0.0537792 -0.998066 + txt003 +STRI + V0 -0.274486 -0.986255 0.0222222 V1 2.22045e-16 -1.02222 0.0222222 V2 -2.22045e-16 -1.28437 0.046875 + N0 -0.0162121 -0.0601415 -0.998058 N1 0 -0.0623783 -0.998053 N2 0 -0.141421 -0.989949 + txt003 +STRI + V0 -2.22045e-16 -1.28437 0.046875 V1 -0.344878 -1.23918 0.046875 V2 -0.274486 -0.986255 0.0222222 + N0 0 -0.141421 -0.989949 N1 -0.0367561 -0.136353 -0.989978 N2 -0.0162121 -0.0601415 -0.998058 + txt003 +STRI + V0 -1.28438 0 0.046875 V1 -1.23918 -0.344878 0.046875 V2 -1.37754 -0.383385 0.0777778 + N0 -0.141421 -0 -0.989949 N1 -0.136353 -0.0367561 -0.989978 N2 -0.316788 -0.085395 -0.944644 + txt003 +STRI + V0 -1.37754 -0.383385 0.0777778 V1 -1.42778 0 0.0777778 V2 -1.28438 0 0.046875 + N0 -0.316788 -0.085395 -0.944644 N1 -0.328521 -0 -0.944497 N2 -0.141421 -0 -0.989949 + txt003 +STRI + V0 -1.23918 -0.344878 0.046875 V1 -1.11122 -0.652653 0.046875 V2 -1.23529 -0.725523 0.0777778 + N0 -0.136353 -0.0367561 -0.989978 N1 -0.121932 -0.0707208 -0.990016 N2 -0.283331 -0.164332 -0.944838 + txt003 +STRI + V0 -1.23529 -0.725523 0.0777778 V1 -1.37754 -0.383385 0.0777778 V2 -1.23918 -0.344878 0.046875 + N0 -0.283331 -0.164332 -0.944838 N1 -0.316788 -0.085395 -0.944644 N2 -0.136353 -0.0367561 -0.989978 + txt003 +STRI + V0 -1.11122 -0.652653 0.046875 V1 -0.911906 -0.911906 0.046875 V2 -1.01372 -1.01372 0.0777778 + N0 -0.121932 -0.0707208 -0.990016 N1 -0.0996006 -0.0996006 -0.99003 N2 -0.231454 -0.231454 -0.944912 + txt003 +STRI + V0 -1.01372 -1.01372 0.0777778 V1 -1.23529 -0.725523 0.0777778 V2 -1.11122 -0.652653 0.046875 + N0 -0.231454 -0.231454 -0.944912 N1 -0.283331 -0.164332 -0.944838 N2 -0.121932 -0.0707208 -0.990016 + txt003 +STRI + V0 -0.911906 -0.911906 0.046875 V1 -0.652653 -1.11122 0.046875 V2 -0.725523 -1.23529 0.0777778 + N0 -0.0996006 -0.0996006 -0.99003 N1 -0.0707208 -0.121932 -0.990016 N2 -0.164332 -0.283331 -0.944838 + txt003 +STRI + V0 -0.725523 -1.23529 0.0777778 V1 -1.01372 -1.01372 0.0777778 V2 -0.911906 -0.911906 0.046875 + N0 -0.164332 -0.283331 -0.944838 N1 -0.231454 -0.231454 -0.944912 N2 -0.0996006 -0.0996006 -0.99003 + txt003 +STRI + V0 -0.652653 -1.11122 0.046875 V1 -0.344878 -1.23918 0.046875 V2 -0.383385 -1.37754 0.0777778 + N0 -0.0707208 -0.121932 -0.990016 N1 -0.0367561 -0.136353 -0.989978 N2 -0.085395 -0.316788 -0.944644 + txt003 +STRI + V0 -0.383385 -1.37754 0.0777778 V1 -0.725523 -1.23529 0.0777778 V2 -0.652653 -1.11122 0.046875 + N0 -0.085395 -0.316788 -0.944644 N1 -0.164332 -0.283331 -0.944838 N2 -0.0707208 -0.121932 -0.990016 + txt003 +STRI + V0 -0.344878 -1.23918 0.046875 V1 -2.22045e-16 -1.28437 0.046875 V2 2.22045e-16 -1.42778 0.0777778 + N0 -0.0367561 -0.136353 -0.989978 N1 0 -0.141421 -0.989949 N2 -6.08223e-17 -0.328521 -0.944497 + txt003 +STRI + V0 2.22045e-16 -1.42778 0.0777778 V1 -0.383385 -1.37754 0.0777778 V2 -0.344878 -1.23918 0.046875 + N0 -6.08223e-17 -0.328521 -0.944497 N1 -0.085395 -0.316788 -0.944644 N2 -0.0367561 -0.136353 -0.989978 + txt003 +STRI + V0 -1.42778 0 0.0777778 V1 -1.37754 -0.383385 0.0777778 V2 -1.4355 -0.399515 0.112847 + N0 -0.328521 -0 -0.944497 N1 -0.316788 -0.085395 -0.944644 N2 -0.743044 -0.200299 -0.638566 + txt003 +STRI + V0 -1.4355 -0.399515 0.112847 V1 -1.48785 0 0.112847 V2 -1.42778 0 0.0777778 + N0 -0.743044 -0.200299 -0.638566 N1 -0.770022 -0 -0.638018 N2 -0.328521 -0 -0.944497 + txt003 +STRI + V0 -1.37754 -0.383385 0.0777778 V1 -1.23529 -0.725523 0.0777778 V2 -1.28726 -0.756047 0.112847 + N0 -0.316788 -0.085395 -0.944644 N1 -0.283331 -0.164332 -0.944838 N2 -0.665182 -0.385806 -0.639286 + txt003 +STRI + V0 -1.28726 -0.756047 0.112847 V1 -1.4355 -0.399515 0.112847 V2 -1.37754 -0.383385 0.0777778 + N0 -0.665182 -0.385806 -0.639286 N1 -0.743044 -0.200299 -0.638566 N2 -0.316788 -0.085395 -0.944644 + txt003 +STRI + V0 -1.23529 -0.725523 0.0777778 V1 -1.01372 -1.01372 0.0777778 V2 -1.05637 -1.05637 0.112847 + N0 -0.283331 -0.164332 -0.944838 N1 -0.231454 -0.231454 -0.944912 N2 -0.543581 -0.543581 -0.639562 + txt003 +STRI + V0 -1.05637 -1.05637 0.112847 V1 -1.28726 -0.756047 0.112847 V2 -1.23529 -0.725523 0.0777778 + N0 -0.543581 -0.543581 -0.639562 N1 -0.665182 -0.385806 -0.639286 N2 -0.283331 -0.164332 -0.944838 + txt003 +STRI + V0 -1.01372 -1.01372 0.0777778 V1 -0.725523 -1.23529 0.0777778 V2 -0.756047 -1.28726 0.112847 + N0 -0.231454 -0.231454 -0.944912 N1 -0.164332 -0.283331 -0.944838 N2 -0.385806 -0.665182 -0.639286 + txt003 +STRI + V0 -0.756047 -1.28726 0.112847 V1 -1.05637 -1.05637 0.112847 V2 -1.01372 -1.01372 0.0777778 + N0 -0.385806 -0.665182 -0.639286 N1 -0.543581 -0.543581 -0.639562 N2 -0.231454 -0.231454 -0.944912 + txt003 +STRI + V0 -0.725523 -1.23529 0.0777778 V1 -0.383385 -1.37754 0.0777778 V2 -0.399515 -1.4355 0.112847 + N0 -0.164332 -0.283331 -0.944838 N1 -0.085395 -0.316788 -0.944644 N2 -0.200299 -0.743044 -0.638566 + txt003 +STRI + V0 -0.399515 -1.4355 0.112847 V1 -0.756047 -1.28726 0.112847 V2 -0.725523 -1.23529 0.0777778 + N0 -0.200299 -0.743044 -0.638566 N1 -0.385806 -0.665182 -0.639286 N2 -0.164332 -0.283331 -0.944838 + txt003 +STRI + V0 -0.383385 -1.37754 0.0777778 V1 2.22045e-16 -1.42778 0.0777778 V2 0 -1.48785 0.112847 + N0 -0.085395 -0.316788 -0.944644 N1 -6.08223e-17 -0.328521 -0.944497 N2 -1.36806e-16 -0.770022 -0.638018 + txt003 +STRI + V0 0 -1.48785 0.112847 V1 -0.399515 -1.4355 0.112847 V2 -0.383385 -1.37754 0.0777778 + N0 -1.36806e-16 -0.770022 -0.638018 N1 -0.200299 -0.743044 -0.638566 N2 -0.085395 -0.316788 -0.944644 + txt003 +STRI + V0 -1.48785 0 0.112847 V1 -1.4355 -0.399515 0.112847 V2 -1.44722 -0.402778 0.15 + N0 -0.770022 -0 -0.638018 N1 -0.743044 -0.200299 -0.638566 N2 -0.965535 -0.260275 -2.07142e-16 + txt003 +STRI + V0 -1.44722 -0.402778 0.15 V1 -1.5 0 0.15 V2 -1.48785 0 0.112847 + N0 -0.965535 -0.260275 -2.07142e-16 N1 -1 0 0 N2 -0.770022 -0 -0.638018 + txt003 +STRI + V0 -1.4355 -0.399515 0.112847 V1 -1.28726 -0.756047 0.112847 V2 -1.29778 -0.762222 0.15 + N0 -0.743044 -0.200299 -0.638566 N1 -0.665182 -0.385806 -0.639286 N2 -0.865031 -0.501718 -5.46348e-16 + txt003 +STRI + V0 -1.29778 -0.762222 0.15 V1 -1.44722 -0.402778 0.15 V2 -1.4355 -0.399515 0.112847 + N0 -0.865031 -0.501718 -5.46348e-16 N1 -0.965535 -0.260275 -2.07142e-16 N2 -0.743044 -0.200299 -0.638566 + txt003 +STRI + V0 -1.28726 -0.756047 0.112847 V1 -1.05637 -1.05637 0.112847 V2 -1.065 -1.065 0.15 + N0 -0.665182 -0.385806 -0.639286 N1 -0.543581 -0.543581 -0.639562 N2 -0.707107 -0.707107 -6.97819e-16 + txt003 +STRI + V0 -1.065 -1.065 0.15 V1 -1.29778 -0.762222 0.15 V2 -1.28726 -0.756047 0.112847 + N0 -0.707107 -0.707107 -6.97819e-16 N1 -0.865031 -0.501718 -5.46348e-16 N2 -0.665182 -0.385806 -0.639286 + txt003 +STRI + V0 -1.05637 -1.05637 0.112847 V1 -0.756047 -1.28726 0.112847 V2 -0.762222 -1.29778 0.15 + N0 -0.543581 -0.543581 -0.639562 N1 -0.385806 -0.665182 -0.639286 N2 -0.501718 -0.865031 -5.46348e-16 + txt003 +STRI + V0 -0.762222 -1.29778 0.15 V1 -1.065 -1.065 0.15 V2 -1.05637 -1.05637 0.112847 + N0 -0.501718 -0.865031 -5.46348e-16 N1 -0.707107 -0.707107 -6.97819e-16 N2 -0.543581 -0.543581 -0.639562 + txt003 +STRI + V0 -0.756047 -1.28726 0.112847 V1 -0.399515 -1.4355 0.112847 V2 -0.402778 -1.44722 0.15 + N0 -0.385806 -0.665182 -0.639286 N1 -0.200299 -0.743044 -0.638566 N2 -0.260275 -0.965535 -2.07142e-16 + txt003 +STRI + V0 -0.402778 -1.44722 0.15 V1 -0.762222 -1.29778 0.15 V2 -0.756047 -1.28726 0.112847 + N0 -0.260275 -0.965535 -2.07142e-16 N1 -0.501718 -0.865031 -5.46348e-16 N2 -0.385806 -0.665182 -0.639286 + txt003 +STRI + V0 -0.399515 -1.4355 0.112847 V1 0 -1.48785 0.112847 V2 0 -1.5 0.15 + N0 -0.200299 -0.743044 -0.638566 N1 -1.36806e-16 -0.770022 -0.638018 N2 0 -1 0 + txt003 +STRI + V0 0 -1.5 0.15 V1 -0.402778 -1.44722 0.15 V2 -0.399515 -1.4355 0.112847 + N0 0 -1 0 N1 -0.260275 -0.965535 -2.07142e-16 N2 -0.200299 -0.743044 -0.638566 + txt003 +STRI + V0 0.162696 -0.584584 0.00590278 V1 0 -0.605903 0.00590278 V2 0 0 0 + N0 0.00589307 -0.0218614 -0.999744 N1 0 -0.0226746 -0.999743 N2 0 0 -1 + txt003 +STRI + V0 0.307888 -0.524218 0.00590278 V1 0.162696 -0.584584 0.00590278 V2 0 0 0 + N0 0.0113382 -0.0195486 -0.999745 N1 0.00589307 -0.0218614 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 0.430191 -0.430191 0.00590278 V1 0.307888 -0.524218 0.00590278 V2 0 0 0 + N0 0.015968 -0.015968 -0.999745 N1 0.0113382 -0.0195486 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 0.524218 -0.307888 0.00590278 V1 0.430191 -0.430191 0.00590278 V2 0 0 0 + N0 0.0195486 -0.0113382 -0.999745 N1 0.015968 -0.015968 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 0.584584 -0.162696 0.00590278 V1 0.524218 -0.307888 0.00590278 V2 0 0 0 + N0 0.0218614 -0.00589307 -0.999744 N1 0.0195486 -0.0113382 -0.999745 N2 0 0 -1 + txt003 +STRI + V0 0.605903 0 0.00590278 V1 0.584584 -0.162696 0.00590278 V2 0 0 0 + N0 0.0226746 -4.94615e-18 -0.999743 N1 0.0218614 -0.00589307 -0.999744 N2 0 0 -1 + txt003 +STRI + V0 0 -0.605903 0.00590278 V1 0.162696 -0.584584 0.00590278 V2 0.274486 -0.986255 0.0222222 + N0 0 -0.0226746 -0.999743 N1 0.00589307 -0.0218614 -0.999744 N2 0.0162121 -0.0601415 -0.998058 + txt003 +STRI + V0 0.274486 -0.986255 0.0222222 V1 0 -1.02222 0.0222222 V2 0 -0.605903 0.00590278 + N0 0.0162121 -0.0601415 -0.998058 N1 0 -0.0623783 -0.998053 N2 0 -0.0226746 -0.999743 + txt003 +STRI + V0 0.162696 -0.584584 0.00590278 V1 0.307888 -0.524218 0.00590278 V2 0.51944 -0.884412 0.0222222 + N0 0.00589307 -0.0218614 -0.999744 N1 0.0113382 -0.0195486 -0.999745 N2 0.0311919 -0.0537792 -0.998066 + txt003 +STRI + V0 0.51944 -0.884412 0.0222222 V1 0.274486 -0.986255 0.0222222 V2 0.162696 -0.584584 0.00590278 + N0 0.0311919 -0.0537792 -0.998066 N1 0.0162121 -0.0601415 -0.998058 N2 0.00589307 -0.0218614 -0.999744 + txt003 +STRI + V0 0.307888 -0.524218 0.00590278 V1 0.430191 -0.430191 0.00590278 V2 0.725778 -0.725778 0.0222222 + N0 0.0113382 -0.0195486 -0.999745 N1 0.015968 -0.015968 -0.999745 N2 0.0439291 -0.0439291 -0.998068 + txt003 +STRI + V0 0.725778 -0.725778 0.0222222 V1 0.51944 -0.884412 0.0222222 V2 0.307888 -0.524218 0.00590278 + N0 0.0439291 -0.0439291 -0.998068 N1 0.0311919 -0.0537792 -0.998066 N2 0.0113382 -0.0195486 -0.999745 + txt003 +STRI + V0 0.430191 -0.430191 0.00590278 V1 0.524218 -0.307888 0.00590278 V2 0.884412 -0.51944 0.0222222 + N0 0.015968 -0.015968 -0.999745 N1 0.0195486 -0.0113382 -0.999745 N2 0.0537792 -0.0311919 -0.998066 + txt003 +STRI + V0 0.884412 -0.51944 0.0222222 V1 0.725778 -0.725778 0.0222222 V2 0.430191 -0.430191 0.00590278 + N0 0.0537792 -0.0311919 -0.998066 N1 0.0439291 -0.0439291 -0.998068 N2 0.015968 -0.015968 -0.999745 + txt003 +STRI + V0 0.524218 -0.307888 0.00590278 V1 0.584584 -0.162696 0.00590278 V2 0.986255 -0.274486 0.0222222 + N0 0.0195486 -0.0113382 -0.999745 N1 0.0218614 -0.00589307 -0.999744 N2 0.0601415 -0.0162121 -0.998058 + txt003 +STRI + V0 0.986255 -0.274486 0.0222222 V1 0.884412 -0.51944 0.0222222 V2 0.524218 -0.307888 0.00590278 + N0 0.0601415 -0.0162121 -0.998058 N1 0.0537792 -0.0311919 -0.998066 N2 0.0195486 -0.0113382 -0.999745 + txt003 +STRI + V0 0.584584 -0.162696 0.00590278 V1 0.605903 0 0.00590278 V2 1.02222 2.22045e-16 0.0222222 + N0 0.0218614 -0.00589307 -0.999744 N1 0.0226746 -4.94615e-18 -0.999743 N2 0.0623783 0 -0.998053 + txt003 +STRI + V0 1.02222 2.22045e-16 0.0222222 V1 0.986255 -0.274486 0.0222222 V2 0.584584 -0.162696 0.00590278 + N0 0.0623783 0 -0.998053 N1 0.0601415 -0.0162121 -0.998058 N2 0.0218614 -0.00589307 -0.999744 + txt003 +STRI + V0 0 -1.02222 0.0222222 V1 0.274486 -0.986255 0.0222222 V2 0.344878 -1.23918 0.046875 + N0 0 -0.0623783 -0.998053 N1 0.0162121 -0.0601415 -0.998058 N2 0.0367561 -0.136353 -0.989978 + txt003 +STRI + V0 0.344878 -1.23918 0.046875 V1 0 -1.28438 0.046875 V2 0 -1.02222 0.0222222 + N0 0.0367561 -0.136353 -0.989978 N1 0 -0.141421 -0.989949 N2 0 -0.0623783 -0.998053 + txt003 +STRI + V0 0.274486 -0.986255 0.0222222 V1 0.51944 -0.884412 0.0222222 V2 0.652653 -1.11122 0.046875 + N0 0.0162121 -0.0601415 -0.998058 N1 0.0311919 -0.0537792 -0.998066 N2 0.0707208 -0.121932 -0.990016 + txt003 +STRI + V0 0.652653 -1.11122 0.046875 V1 0.344878 -1.23918 0.046875 V2 0.274486 -0.986255 0.0222222 + N0 0.0707208 -0.121932 -0.990016 N1 0.0367561 -0.136353 -0.989978 N2 0.0162121 -0.0601415 -0.998058 + txt003 +STRI + V0 0.51944 -0.884412 0.0222222 V1 0.725778 -0.725778 0.0222222 V2 0.911906 -0.911906 0.046875 + N0 0.0311919 -0.0537792 -0.998066 N1 0.0439291 -0.0439291 -0.998068 N2 0.0996006 -0.0996006 -0.99003 + txt003 +STRI + V0 0.911906 -0.911906 0.046875 V1 0.652653 -1.11122 0.046875 V2 0.51944 -0.884412 0.0222222 + N0 0.0996006 -0.0996006 -0.99003 N1 0.0707208 -0.121932 -0.990016 N2 0.0311919 -0.0537792 -0.998066 + txt003 +STRI + V0 0.725778 -0.725778 0.0222222 V1 0.884412 -0.51944 0.0222222 V2 1.11122 -0.652653 0.046875 + N0 0.0439291 -0.0439291 -0.998068 N1 0.0537792 -0.0311919 -0.998066 N2 0.121932 -0.0707208 -0.990016 + txt003 +STRI + V0 1.11122 -0.652653 0.046875 V1 0.911906 -0.911906 0.046875 V2 0.725778 -0.725778 0.0222222 + N0 0.121932 -0.0707208 -0.990016 N1 0.0996006 -0.0996006 -0.99003 N2 0.0439291 -0.0439291 -0.998068 + txt003 +STRI + V0 0.884412 -0.51944 0.0222222 V1 0.986255 -0.274486 0.0222222 V2 1.23918 -0.344878 0.046875 + N0 0.0537792 -0.0311919 -0.998066 N1 0.0601415 -0.0162121 -0.998058 N2 0.136353 -0.0367561 -0.989978 + txt003 +STRI + V0 1.23918 -0.344878 0.046875 V1 1.11122 -0.652653 0.046875 V2 0.884412 -0.51944 0.0222222 + N0 0.136353 -0.0367561 -0.989978 N1 0.121932 -0.0707208 -0.990016 N2 0.0537792 -0.0311919 -0.998066 + txt003 +STRI + V0 0.986255 -0.274486 0.0222222 V1 1.02222 2.22045e-16 0.0222222 V2 1.28437 -2.22045e-16 0.046875 + N0 0.0601415 -0.0162121 -0.998058 N1 0.0623783 0 -0.998053 N2 0.141421 0 -0.989949 + txt003 +STRI + V0 1.28437 -2.22045e-16 0.046875 V1 1.23918 -0.344878 0.046875 V2 0.986255 -0.274486 0.0222222 + N0 0.141421 0 -0.989949 N1 0.136353 -0.0367561 -0.989978 N2 0.0601415 -0.0162121 -0.998058 + txt003 +STRI + V0 0 -1.28438 0.046875 V1 0.344878 -1.23918 0.046875 V2 0.383385 -1.37754 0.0777778 + N0 0 -0.141421 -0.989949 N1 0.0367561 -0.136353 -0.989978 N2 0.085395 -0.316788 -0.944644 + txt003 +STRI + V0 0.383385 -1.37754 0.0777778 V1 0 -1.42778 0.0777778 V2 0 -1.28438 0.046875 + N0 0.085395 -0.316788 -0.944644 N1 0 -0.328521 -0.944497 N2 0 -0.141421 -0.989949 + txt003 +STRI + V0 0.344878 -1.23918 0.046875 V1 0.652653 -1.11122 0.046875 V2 0.725523 -1.23529 0.0777778 + N0 0.0367561 -0.136353 -0.989978 N1 0.0707208 -0.121932 -0.990016 N2 0.164332 -0.283331 -0.944838 + txt003 +STRI + V0 0.725523 -1.23529 0.0777778 V1 0.383385 -1.37754 0.0777778 V2 0.344878 -1.23918 0.046875 + N0 0.164332 -0.283331 -0.944838 N1 0.085395 -0.316788 -0.944644 N2 0.0367561 -0.136353 -0.989978 + txt003 +STRI + V0 0.652653 -1.11122 0.046875 V1 0.911906 -0.911906 0.046875 V2 1.01372 -1.01372 0.0777778 + N0 0.0707208 -0.121932 -0.990016 N1 0.0996006 -0.0996006 -0.99003 N2 0.231454 -0.231454 -0.944912 + txt003 +STRI + V0 1.01372 -1.01372 0.0777778 V1 0.725523 -1.23529 0.0777778 V2 0.652653 -1.11122 0.046875 + N0 0.231454 -0.231454 -0.944912 N1 0.164332 -0.283331 -0.944838 N2 0.0707208 -0.121932 -0.990016 + txt003 +STRI + V0 0.911906 -0.911906 0.046875 V1 1.11122 -0.652653 0.046875 V2 1.23529 -0.725523 0.0777778 + N0 0.0996006 -0.0996006 -0.99003 N1 0.121932 -0.0707208 -0.990016 N2 0.283331 -0.164332 -0.944838 + txt003 +STRI + V0 1.23529 -0.725523 0.0777778 V1 1.01372 -1.01372 0.0777778 V2 0.911906 -0.911906 0.046875 + N0 0.283331 -0.164332 -0.944838 N1 0.231454 -0.231454 -0.944912 N2 0.0996006 -0.0996006 -0.99003 + txt003 +STRI + V0 1.11122 -0.652653 0.046875 V1 1.23918 -0.344878 0.046875 V2 1.37754 -0.383385 0.0777778 + N0 0.121932 -0.0707208 -0.990016 N1 0.136353 -0.0367561 -0.989978 N2 0.316788 -0.085395 -0.944644 + txt003 +STRI + V0 1.37754 -0.383385 0.0777778 V1 1.23529 -0.725523 0.0777778 V2 1.11122 -0.652653 0.046875 + N0 0.316788 -0.085395 -0.944644 N1 0.283331 -0.164332 -0.944838 N2 0.121932 -0.0707208 -0.990016 + txt003 +STRI + V0 1.23918 -0.344878 0.046875 V1 1.28437 -2.22045e-16 0.046875 V2 1.42778 2.22045e-16 0.0777778 + N0 0.136353 -0.0367561 -0.989978 N1 0.141421 0 -0.989949 N2 0.328521 -6.08223e-17 -0.944497 + txt003 +STRI + V0 1.42778 2.22045e-16 0.0777778 V1 1.37754 -0.383385 0.0777778 V2 1.23918 -0.344878 0.046875 + N0 0.328521 -6.08223e-17 -0.944497 N1 0.316788 -0.085395 -0.944644 N2 0.136353 -0.0367561 -0.989978 + txt003 +STRI + V0 0 -1.42778 0.0777778 V1 0.383385 -1.37754 0.0777778 V2 0.399515 -1.4355 0.112847 + N0 0 -0.328521 -0.944497 N1 0.085395 -0.316788 -0.944644 N2 0.200299 -0.743044 -0.638566 + txt003 +STRI + V0 0.399515 -1.4355 0.112847 V1 0 -1.48785 0.112847 V2 0 -1.42778 0.0777778 + N0 0.200299 -0.743044 -0.638566 N1 0 -0.770022 -0.638018 N2 0 -0.328521 -0.944497 + txt003 +STRI + V0 0.383385 -1.37754 0.0777778 V1 0.725523 -1.23529 0.0777778 V2 0.756047 -1.28726 0.112847 + N0 0.085395 -0.316788 -0.944644 N1 0.164332 -0.283331 -0.944838 N2 0.385806 -0.665182 -0.639286 + txt003 +STRI + V0 0.756047 -1.28726 0.112847 V1 0.399515 -1.4355 0.112847 V2 0.383385 -1.37754 0.0777778 + N0 0.385806 -0.665182 -0.639286 N1 0.200299 -0.743044 -0.638566 N2 0.085395 -0.316788 -0.944644 + txt003 +STRI + V0 0.725523 -1.23529 0.0777778 V1 1.01372 -1.01372 0.0777778 V2 1.05637 -1.05637 0.112847 + N0 0.164332 -0.283331 -0.944838 N1 0.231454 -0.231454 -0.944912 N2 0.543581 -0.543581 -0.639562 + txt003 +STRI + V0 1.05637 -1.05637 0.112847 V1 0.756047 -1.28726 0.112847 V2 0.725523 -1.23529 0.0777778 + N0 0.543581 -0.543581 -0.639562 N1 0.385806 -0.665182 -0.639286 N2 0.164332 -0.283331 -0.944838 + txt003 +STRI + V0 1.01372 -1.01372 0.0777778 V1 1.23529 -0.725523 0.0777778 V2 1.28726 -0.756047 0.112847 + N0 0.231454 -0.231454 -0.944912 N1 0.283331 -0.164332 -0.944838 N2 0.665182 -0.385806 -0.639286 + txt003 +STRI + V0 1.28726 -0.756047 0.112847 V1 1.05637 -1.05637 0.112847 V2 1.01372 -1.01372 0.0777778 + N0 0.665182 -0.385806 -0.639286 N1 0.543581 -0.543581 -0.639562 N2 0.231454 -0.231454 -0.944912 + txt003 +STRI + V0 1.23529 -0.725523 0.0777778 V1 1.37754 -0.383385 0.0777778 V2 1.4355 -0.399515 0.112847 + N0 0.283331 -0.164332 -0.944838 N1 0.316788 -0.085395 -0.944644 N2 0.743044 -0.200299 -0.638566 + txt003 +STRI + V0 1.4355 -0.399515 0.112847 V1 1.28726 -0.756047 0.112847 V2 1.23529 -0.725523 0.0777778 + N0 0.743044 -0.200299 -0.638566 N1 0.665182 -0.385806 -0.639286 N2 0.283331 -0.164332 -0.944838 + txt003 +STRI + V0 1.37754 -0.383385 0.0777778 V1 1.42778 2.22045e-16 0.0777778 V2 1.48785 0 0.112847 + N0 0.316788 -0.085395 -0.944644 N1 0.328521 -6.08223e-17 -0.944497 N2 0.770022 -1.36806e-16 -0.638018 + txt003 +STRI + V0 1.48785 0 0.112847 V1 1.4355 -0.399515 0.112847 V2 1.37754 -0.383385 0.0777778 + N0 0.770022 -1.36806e-16 -0.638018 N1 0.743044 -0.200299 -0.638566 N2 0.316788 -0.085395 -0.944644 + txt003 +STRI + V0 0 -1.48785 0.112847 V1 0.399515 -1.4355 0.112847 V2 0.402778 -1.44722 0.15 + N0 0 -0.770022 -0.638018 N1 0.200299 -0.743044 -0.638566 N2 0.260275 -0.965535 -2.07142e-16 + txt003 +STRI + V0 0.402778 -1.44722 0.15 V1 0 -1.5 0.15 V2 0 -1.48785 0.112847 + N0 0.260275 -0.965535 -2.07142e-16 N1 0 -1 0 N2 0 -0.770022 -0.638018 + txt003 +STRI + V0 0.399515 -1.4355 0.112847 V1 0.756047 -1.28726 0.112847 V2 0.762222 -1.29778 0.15 + N0 0.200299 -0.743044 -0.638566 N1 0.385806 -0.665182 -0.639286 N2 0.501718 -0.865031 -5.46348e-16 + txt003 +STRI + V0 0.762222 -1.29778 0.15 V1 0.402778 -1.44722 0.15 V2 0.399515 -1.4355 0.112847 + N0 0.501718 -0.865031 -5.46348e-16 N1 0.260275 -0.965535 -2.07142e-16 N2 0.200299 -0.743044 -0.638566 + txt003 +STRI + V0 0.756047 -1.28726 0.112847 V1 1.05637 -1.05637 0.112847 V2 1.065 -1.065 0.15 + N0 0.385806 -0.665182 -0.639286 N1 0.543581 -0.543581 -0.639562 N2 0.707107 -0.707107 -6.97819e-16 + txt003 +STRI + V0 1.065 -1.065 0.15 V1 0.762222 -1.29778 0.15 V2 0.756047 -1.28726 0.112847 + N0 0.707107 -0.707107 -6.97819e-16 N1 0.501718 -0.865031 -5.46348e-16 N2 0.385806 -0.665182 -0.639286 + txt003 +STRI + V0 1.05637 -1.05637 0.112847 V1 1.28726 -0.756047 0.112847 V2 1.29778 -0.762222 0.15 + N0 0.543581 -0.543581 -0.639562 N1 0.665182 -0.385806 -0.639286 N2 0.865031 -0.501718 -5.46348e-16 + txt003 +STRI + V0 1.29778 -0.762222 0.15 V1 1.065 -1.065 0.15 V2 1.05637 -1.05637 0.112847 + N0 0.865031 -0.501718 -5.46348e-16 N1 0.707107 -0.707107 -6.97819e-16 N2 0.543581 -0.543581 -0.639562 + txt003 +STRI + V0 1.28726 -0.756047 0.112847 V1 1.4355 -0.399515 0.112847 V2 1.44722 -0.402778 0.15 + N0 0.665182 -0.385806 -0.639286 N1 0.743044 -0.200299 -0.638566 N2 0.965535 -0.260275 -2.07142e-16 + txt003 +STRI + V0 1.44722 -0.402778 0.15 V1 1.29778 -0.762222 0.15 V2 1.28726 -0.756047 0.112847 + N0 0.965535 -0.260275 -2.07142e-16 N1 0.865031 -0.501718 -5.46348e-16 N2 0.665182 -0.385806 -0.639286 + txt003 +STRI + V0 1.4355 -0.399515 0.112847 V1 1.48785 0 0.112847 V2 1.5 0 0.15 + N0 0.743044 -0.200299 -0.638566 N1 0.770022 -1.36806e-16 -0.638018 N2 1 0 0 + txt003 +STRI + V0 1.5 0 0.15 V1 1.44722 -0.402778 0.15 V2 1.4355 -0.399515 0.112847 + N0 1 0 0 N1 0.965535 -0.260275 -2.07142e-16 N2 0.743044 -0.200299 -0.638566 + txt003 + +END_SCENE diff --git a/examples/parallel_for/tachyon/dat/trypsin4pti.dat b/examples/parallel_for/tachyon/dat/trypsin4pti.dat new file mode 100644 index 0000000..7d547f2 --- /dev/null +++ b/examples/parallel_for/tachyon/dat/trypsin4pti.dat @@ -0,0 +1,538 @@ +BEGIN_SCENE + OUTFILE /dev/null + RESOLUTION 768 768 + VERBOSE 0 + +CAMERA + ZOOM 1.0 + ASPECTRATIO 1.0 + ANTIALIASING 0 + RAYDEPTH 4 + CENTER 15.0 20.0 -50.0 + VIEWDIR 0.0 0.0 1.0 + UPDIR 0.0 1.0 0.0 +END_CAMERA + + +LIGHT + CENTER 40.0 50.0 -40.0 + RAD 0.2 + COLOR 0.5 0.5 0.5 + +LIGHT + CENTER -40.0 20.0 -40.0 + RAD 0.2 + COLOR 0.5 0.5 0.5 + + +TEXDEF O AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + PHONG PLASTIC 0.5 PHONG_SIZE 24.8 + COLOR 1.0 0.0 0.0 TEXFUNC 0 +TEXALIAS OH O +TEXALIAS OD1 O +TEXALIAS OD2 O +TEXALIAS OE1 O +TEXALIAS OE2 O +TEXALIAS OG O +TEXALIAS OG1 O +TEXALIAS OG2 O +TEXALIAS OXT O + +TEXDEF C AMBIENT 0.1 DIFFUSE 0.5 SPECULAR 0.0 OPACITY 1.0 + PHONG PLASTIC 0.5 PHONG_SIZE 24.8 + COLOR 0.5 0.5 0.5 TEXFUNC 0 +TEXALIAS CA C +TEXALIAS CB C +TEXALIAS CD C +TEXALIAS CD1 C +TEXALIAS CD2 C +TEXALIAS CE C +TEXALIAS CE1 C +TEXALIAS CE2 C +TEXALIAS CG C +TEXALIAS CG1 C +TEXALIAS CG2 C +TEXALIAS CZ C + +TEXDEF N AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + PHONG PLASTIC 0.5 PHONG_SIZE 24.8 + COLOR 0.5 0.5 1.0 TEXFUNC 0 +TEXALIAS ND2 N +TEXALIAS NH1 N +TEXALIAS NH2 N +TEXALIAS NE N +TEXALIAS NE2 N +TEXALIAS NZ N + +TEXDEF SD AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + PHONG METAL 0.5 PHONG_SIZE 24.8 + COLOR 1.0 1.0 1.0 TEXFUNC 0 + +TEXDEF SG AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + PHONG PLASTIC 0.5 PHONG_SIZE 24.8 + COLOR 1.0 1.0 1.0 TEXFUNC 0 + +SPHERE CENTER 26.465000 27.452000 -2.490000 RAD 1.0 N +SPHERE CENTER 25.497000 26.862000 -1.573000 RAD 1.0 CA +SPHERE CENTER 26.193001 26.179001 -0.437000 RAD 1.0 C +SPHERE CENTER 27.270000 25.549000 -0.624000 RAD 1.0 O +SPHERE CENTER 24.583000 25.804001 -2.239000 RAD 1.0 CB +SPHERE CENTER 25.091000 24.375000 -2.409000 RAD 1.0 CG +SPHERE CENTER 24.018999 23.427999 -2.996000 RAD 1.0 CD +SPHERE CENTER 23.591000 24.028000 -4.287000 RAD 1.0 NE +SPHERE CENTER 24.299000 23.972000 -5.389000 RAD 1.0 CZ +SPHERE CENTER 25.431999 23.261000 -5.440000 RAD 1.0 NH1 +SPHERE CENTER 23.721001 24.372999 -6.467000 RAD 1.0 NH2 +SPHERE CENTER 25.667000 26.396000 0.708000 RAD 1.0 N +SPHERE CENTER 26.222000 25.760000 1.891000 RAD 1.0 CA +SPHERE CENTER 26.207001 24.242001 1.830000 RAD 1.0 C +SPHERE CENTER 25.400000 23.576000 1.139000 RAD 1.0 O +SPHERE CENTER 25.260000 26.207001 3.033000 RAD 1.0 CB +SPHERE CENTER 24.511999 27.427999 2.493000 RAD 1.0 CG +SPHERE CENTER 24.606001 27.382000 0.978000 RAD 1.0 CD +SPHERE CENTER 27.170000 23.634001 2.462000 RAD 1.0 N +SPHERE CENTER 27.284000 22.163000 2.498000 RAD 1.0 CA +SPHERE CENTER 26.042999 21.506001 3.085000 RAD 1.0 C +SPHERE CENTER 25.752001 20.350000 2.705000 RAD 1.0 O +SPHERE CENTER 28.424999 21.747000 3.461000 RAD 1.0 CB +SPHERE CENTER 29.791000 21.886000 2.787000 RAD 1.0 CG +SPHERE CENTER 29.875000 22.104000 1.543000 RAD 1.0 OD1 +SPHERE CENTER 30.806000 21.500999 3.431000 RAD 1.0 OD2 +SPHERE CENTER 25.393999 22.184000 4.041000 RAD 1.0 N +SPHERE CENTER 24.172001 21.584999 4.618000 RAD 1.0 CA +SPHERE CENTER 23.009001 21.375000 3.624000 RAD 1.0 C +SPHERE CENTER 22.082001 20.603001 3.921000 RAD 1.0 O +SPHERE CENTER 23.691999 22.330999 5.862000 RAD 1.0 CB +SPHERE CENTER 23.191999 23.778999 5.639000 RAD 1.0 CG +SPHERE CENTER 21.961000 24.002001 5.060000 RAD 1.0 CD1 +SPHERE CENTER 23.951000 24.841000 6.050000 RAD 1.0 CD2 +SPHERE CENTER 21.497000 25.281000 4.869000 RAD 1.0 CE1 +SPHERE CENTER 23.510000 26.124001 5.854000 RAD 1.0 CE2 +SPHERE CENTER 22.277000 26.363001 5.249000 RAD 1.0 CZ +SPHERE CENTER 23.094999 22.004000 2.522000 RAD 1.0 N +SPHERE CENTER 22.106001 21.863001 1.467000 RAD 1.0 CA +SPHERE CENTER 22.191999 20.518000 0.830000 RAD 1.0 C +SPHERE CENTER 21.230000 20.068001 0.167000 RAD 1.0 O +SPHERE CENTER 22.358000 22.903999 0.371000 RAD 1.0 CB +SPHERE CENTER 22.145000 24.591999 0.888000 RAD 1.0 SG +SPHERE CENTER 23.326000 19.826000 1.008000 RAD 1.0 N +SPHERE CENTER 23.436001 18.459999 0.459000 RAD 1.0 CA +SPHERE CENTER 22.958000 17.365000 1.407000 RAD 1.0 C +SPHERE CENTER 22.938000 16.180000 0.999000 RAD 1.0 O +SPHERE CENTER 24.898001 18.084000 0.131000 RAD 1.0 CB +SPHERE CENTER 25.572001 19.129000 -0.776000 RAD 1.0 CG +SPHERE CENTER 27.037001 18.695000 -1.116000 RAD 1.0 CD1 +SPHERE CENTER 24.791000 19.488001 -2.049000 RAD 1.0 CD2 +SPHERE CENTER 22.545000 17.716000 2.628000 RAD 1.0 N +SPHERE CENTER 22.039000 16.646000 3.528000 RAD 1.0 CA +SPHERE CENTER 20.615999 16.285000 3.113000 RAD 1.0 C +SPHERE CENTER 19.860001 17.136000 2.576000 RAD 1.0 O +SPHERE CENTER 21.764000 17.216999 4.920000 RAD 1.0 CB +SPHERE CENTER 22.813999 18.035000 5.647000 RAD 1.0 CG +SPHERE CENTER 22.152000 18.707001 6.870000 RAD 1.0 CD +SPHERE CENTER 22.980000 19.100000 7.718000 RAD 1.0 OE1 +SPHERE CENTER 21.086000 19.403999 6.779000 RAD 1.0 OE2 +SPHERE CENTER 20.254000 15.031000 3.334000 RAD 1.0 N +SPHERE CENTER 18.892000 14.554000 3.034000 RAD 1.0 CA +SPHERE CENTER 17.954000 15.160000 4.079000 RAD 1.0 C +SPHERE CENTER 18.443001 15.606000 5.146000 RAD 1.0 O +SPHERE CENTER 18.910000 13.045000 3.274000 RAD 1.0 CB +SPHERE CENTER 20.226000 12.742000 4.021000 RAD 1.0 CG +SPHERE CENTER 21.107000 14.009000 3.934000 RAD 1.0 CD +SPHERE CENTER 16.681999 15.232000 3.767000 RAD 1.0 N +SPHERE CENTER 15.690000 15.852000 4.661000 RAD 1.0 CA +SPHERE CENTER 15.550000 15.006000 5.916000 RAD 1.0 C +SPHERE CENTER 15.693000 13.769000 5.836000 RAD 1.0 O +SPHERE CENTER 14.367000 15.707000 3.867000 RAD 1.0 CB +SPHERE CENTER 14.571000 14.716000 2.710000 RAD 1.0 CG +SPHERE CENTER 16.090000 14.597000 2.574000 RAD 1.0 CD +SPHERE CENTER 15.365000 15.630000 7.042000 RAD 1.0 N +SPHERE CENTER 15.310000 14.908000 8.298000 RAD 1.0 CA +SPHERE CENTER 13.953000 15.177000 8.952000 RAD 1.0 C +SPHERE CENTER 13.699000 16.320000 9.382000 RAD 1.0 O +SPHERE CENTER 16.532000 15.383000 9.122000 RAD 1.0 CB +SPHERE CENTER 16.608000 14.781000 10.525000 RAD 1.0 CG +SPHERE CENTER 17.132000 13.535000 10.707000 RAD 1.0 CD1 +SPHERE CENTER 16.155001 15.523000 11.588000 RAD 1.0 CD2 +SPHERE CENTER 17.216000 12.999000 11.982000 RAD 1.0 CE1 +SPHERE CENTER 16.266001 14.985000 12.862000 RAD 1.0 CE2 +SPHERE CENTER 16.808001 13.746000 13.047000 RAD 1.0 CZ +SPHERE CENTER 16.878000 13.192000 14.372000 RAD 1.0 OH +SPHERE CENTER 13.161000 14.146000 9.088000 RAD 1.0 N +SPHERE CENTER 11.802000 14.321000 9.642000 RAD 1.0 CA +SPHERE CENTER 11.855000 14.484000 11.146000 RAD 1.0 C +SPHERE CENTER 11.105000 15.314000 11.759000 RAD 1.0 O +SPHERE CENTER 10.963000 13.105000 9.273000 RAD 1.0 CB +SPHERE CENTER 10.706000 13.192000 7.854000 RAD 1.0 OG1 +SPHERE CENTER 9.611000 13.152000 10.045000 RAD 1.0 CG2 +SPHERE CENTER 12.789000 13.760000 11.726000 RAD 1.0 N +SPHERE CENTER 13.002000 13.922000 13.198000 RAD 1.0 CA +SPHERE CENTER 12.107000 12.944000 13.909000 RAD 1.0 C +SPHERE CENTER 11.333000 12.212000 13.239000 RAD 1.0 O +SPHERE CENTER 12.235000 12.905000 15.210000 RAD 1.0 N +SPHERE CENTER 11.516000 11.958000 16.066999 RAD 1.0 CA +SPHERE CENTER 10.094000 12.319000 16.468000 RAD 1.0 C +SPHERE CENTER 9.440000 11.442000 17.052000 RAD 1.0 O +SPHERE CENTER 12.272000 11.936000 17.370001 RAD 1.0 CB +SPHERE CENTER 13.164000 13.172000 17.399000 RAD 1.0 CG +SPHERE CENTER 13.281000 13.627000 15.925000 RAD 1.0 CD +SPHERE CENTER 9.629000 13.519000 16.214001 RAD 1.0 N +SPHERE CENTER 8.290000 13.980000 16.615999 RAD 1.0 CA +SPHERE CENTER 7.268000 13.720000 15.515000 RAD 1.0 C +SPHERE CENTER 7.672000 13.397000 14.387000 RAD 1.0 O +SPHERE CENTER 8.279000 15.441000 16.966999 RAD 1.0 CB +SPHERE CENTER 9.221000 15.735000 18.490000 RAD 1.0 SG +SPHERE CENTER 6.027000 13.680000 15.869000 RAD 1.0 N +SPHERE CENTER 5.005000 13.220000 14.945000 RAD 1.0 CA +SPHERE CENTER 3.964000 14.283000 14.630000 RAD 1.0 C +SPHERE CENTER 2.777000 13.949000 14.377000 RAD 1.0 O +SPHERE CENTER 4.310000 11.998000 15.592000 RAD 1.0 CB +SPHERE CENTER 5.273000 10.848000 15.913000 RAD 1.0 CG +SPHERE CENTER 5.781000 10.034000 14.702000 RAD 1.0 CD +SPHERE CENTER 6.855000 9.016000 15.126000 RAD 1.0 CE +SPHERE CENTER 7.357000 8.291000 13.953000 RAD 1.0 NZ +SPHERE CENTER 4.325000 15.549000 14.618000 RAD 1.0 N +SPHERE CENTER 3.513000 16.639999 14.122000 RAD 1.0 CA +SPHERE CENTER 3.561000 16.615000 12.586000 RAD 1.0 C +SPHERE CENTER 4.270000 15.752000 12.023000 RAD 1.0 O +SPHERE CENTER 3.984000 17.995001 14.670000 RAD 1.0 CB +SPHERE CENTER 2.781000 17.424999 11.943000 RAD 1.0 N +SPHERE CENTER 2.700000 17.355000 10.457000 RAD 1.0 CA +SPHERE CENTER 2.875000 18.731001 9.887000 RAD 1.0 C +SPHERE CENTER 1.878000 19.469999 9.653000 RAD 1.0 O +SPHERE CENTER 1.320000 16.787001 9.970000 RAD 1.0 CB +SPHERE CENTER 1.186000 15.339000 10.395000 RAD 1.0 CG +SPHERE CENTER -0.170000 14.751000 9.963000 RAD 1.0 CD +SPHERE CENTER -1.132000 15.455000 10.801000 RAD 1.0 NE +SPHERE CENTER -1.531000 14.913000 11.939000 RAD 1.0 CZ +SPHERE CENTER -1.172000 13.658000 12.165000 RAD 1.0 NH1 +SPHERE CENTER -2.202000 15.647000 12.795000 RAD 1.0 NH2 +SPHERE CENTER 4.154000 19.110001 9.817000 RAD 1.0 N +SPHERE CENTER 4.595000 20.444000 9.391000 RAD 1.0 CA +SPHERE CENTER 5.249000 20.388000 8.012000 RAD 1.0 C +SPHERE CENTER 6.193000 19.612000 7.834000 RAD 1.0 O +SPHERE CENTER 5.590000 20.988001 10.452000 RAD 1.0 CB +SPHERE CENTER 4.792000 21.062000 11.815000 RAD 1.0 CG1 +SPHERE CENTER 5.985000 22.451000 10.085000 RAD 1.0 CG2 +SPHERE CENTER 5.689000 21.535999 12.955000 RAD 1.0 CD1 +SPHERE CENTER 4.586000 20.955999 7.035000 RAD 1.0 N +SPHERE CENTER 5.154000 20.879000 5.697000 RAD 1.0 CA +SPHERE CENTER 6.286000 21.912001 5.572000 RAD 1.0 C +SPHERE CENTER 6.156000 23.146000 5.785000 RAD 1.0 O +SPHERE CENTER 4.095000 21.205000 4.648000 RAD 1.0 CB +SPHERE CENTER 2.836000 20.316999 4.886000 RAD 1.0 CG1 +SPHERE CENTER 4.655000 20.930000 3.250000 RAD 1.0 CG2 +SPHERE CENTER 3.122000 18.813999 4.850000 RAD 1.0 CD1 +SPHERE CENTER 7.451000 21.372000 5.297000 RAD 1.0 N +SPHERE CENTER 8.602000 22.257000 5.060000 RAD 1.0 CA +SPHERE CENTER 9.150000 21.950001 3.673000 RAD 1.0 C +SPHERE CENTER 8.840000 20.896000 3.088000 RAD 1.0 O +SPHERE CENTER 9.698000 21.896999 6.092000 RAD 1.0 CB +SPHERE CENTER 9.226000 22.299999 7.493000 RAD 1.0 CG +SPHERE CENTER 9.248000 23.850000 7.622000 RAD 1.0 CD +SPHERE CENTER 8.810000 24.311001 8.962000 RAD 1.0 NE +SPHERE CENTER 9.575000 24.336000 10.075000 RAD 1.0 CZ +SPHERE CENTER 10.888000 24.077000 10.044000 RAD 1.0 NH1 +SPHERE CENTER 9.050000 24.893000 11.170000 RAD 1.0 NH2 +SPHERE CENTER 10.178000 22.695000 3.318000 RAD 1.0 N +SPHERE CENTER 10.959000 22.444000 2.085000 RAD 1.0 CA +SPHERE CENTER 12.407000 22.010000 2.386000 RAD 1.0 C +SPHERE CENTER 12.987000 22.511999 3.378000 RAD 1.0 O +SPHERE CENTER 10.997000 23.770000 1.282000 RAD 1.0 CB +SPHERE CENTER 9.641000 24.038000 0.627000 RAD 1.0 CG +SPHERE CENTER 8.639000 24.591999 1.399000 RAD 1.0 CD1 +SPHERE CENTER 9.451000 23.725000 -0.691000 RAD 1.0 CD2 +SPHERE CENTER 7.403000 24.861000 0.831000 RAD 1.0 CE1 +SPHERE CENTER 8.213000 23.993000 -1.249000 RAD 1.0 CE2 +SPHERE CENTER 7.215000 24.576000 -0.494000 RAD 1.0 CZ +SPHERE CENTER 5.879000 24.768999 -1.060000 RAD 1.0 OH +SPHERE CENTER 12.977000 21.141001 1.535000 RAD 1.0 N +SPHERE CENTER 14.449000 20.892000 1.626000 RAD 1.0 CA +SPHERE CENTER 15.018000 21.045000 0.237000 RAD 1.0 C +SPHERE CENTER 14.250000 20.837000 -0.740000 RAD 1.0 O +SPHERE CENTER 14.664000 19.434999 2.142000 RAD 1.0 CB +SPHERE CENTER 14.283000 18.275999 1.191000 RAD 1.0 CG +SPHERE CENTER 15.290000 17.639000 0.506000 RAD 1.0 CD1 +SPHERE CENTER 12.962000 17.907000 0.976000 RAD 1.0 CD2 +SPHERE CENTER 14.981000 16.632000 -0.392000 RAD 1.0 CE1 +SPHERE CENTER 12.638000 16.909000 0.061000 RAD 1.0 CE2 +SPHERE CENTER 13.673000 16.261999 -0.626000 RAD 1.0 CZ +SPHERE CENTER 16.336000 21.281000 0.152000 RAD 1.0 N +SPHERE CENTER 16.948000 21.292000 -1.153000 RAD 1.0 CA +SPHERE CENTER 17.365000 19.888000 -1.542000 RAD 1.0 C +SPHERE CENTER 18.009001 19.184000 -0.744000 RAD 1.0 O +SPHERE CENTER 18.188000 22.194000 -1.071000 RAD 1.0 CB +SPHERE CENTER 18.906000 22.263000 -2.442000 RAD 1.0 CG +SPHERE CENTER 20.089001 21.621000 -2.663000 RAD 1.0 CD1 +SPHERE CENTER 18.361000 23.033001 -3.436000 RAD 1.0 CD2 +SPHERE CENTER 20.733000 21.778999 -3.896000 RAD 1.0 CE1 +SPHERE CENTER 18.990999 23.184999 -4.662000 RAD 1.0 CE2 +SPHERE CENTER 20.184999 22.562000 -4.864000 RAD 1.0 CZ +SPHERE CENTER 20.826000 22.768000 -6.115000 RAD 1.0 OH +SPHERE CENTER 16.913000 19.452999 -2.726000 RAD 1.0 N +SPHERE CENTER 17.295000 18.160000 -3.291000 RAD 1.0 CA +SPHERE CENTER 18.406000 18.332001 -4.341000 RAD 1.0 C +SPHERE CENTER 18.166000 18.843000 -5.464000 RAD 1.0 O +SPHERE CENTER 16.052000 17.558001 -3.946000 RAD 1.0 CB +SPHERE CENTER 16.354000 16.226999 -4.626000 RAD 1.0 CG +SPHERE CENTER 17.531000 15.754000 -4.725000 RAD 1.0 OD1 +SPHERE CENTER 15.234000 15.549000 -4.870000 RAD 1.0 ND2 +SPHERE CENTER 19.655001 18.124001 -3.871000 RAD 1.0 N +SPHERE CENTER 20.851000 18.420000 -4.681000 RAD 1.0 CA +SPHERE CENTER 20.920000 17.650000 -6.010000 RAD 1.0 C +SPHERE CENTER 21.385000 18.257000 -6.997000 RAD 1.0 O +SPHERE CENTER 22.112000 18.070999 -3.866000 RAD 1.0 CB +SPHERE CENTER 20.333000 16.480000 -6.081000 RAD 1.0 N +SPHERE CENTER 20.243999 15.784000 -7.383000 RAD 1.0 CA +SPHERE CENTER 19.287001 16.482000 -8.327000 RAD 1.0 C +SPHERE CENTER 19.478001 16.368999 -9.556000 RAD 1.0 O +SPHERE CENTER 19.732000 14.353000 -7.259000 RAD 1.0 CB +SPHERE CENTER 20.799999 13.485000 -6.626000 RAD 1.0 CG +SPHERE CENTER 20.299000 12.037000 -6.533000 RAD 1.0 CD +SPHERE CENTER 21.386999 11.067000 -6.033000 RAD 1.0 CE +SPHERE CENTER 21.820999 11.437000 -4.681000 RAD 1.0 NZ +SPHERE CENTER 18.212999 17.041000 -7.772000 RAD 1.0 N +SPHERE CENTER 17.181999 17.617001 -8.631000 RAD 1.0 CA +SPHERE CENTER 17.468000 19.070000 -8.921000 RAD 1.0 C +SPHERE CENTER 16.909000 19.707001 -9.863000 RAD 1.0 O +SPHERE CENTER 15.833000 17.423000 -7.901000 RAD 1.0 CB +SPHERE CENTER 18.299000 19.622000 -8.061000 RAD 1.0 N +SPHERE CENTER 18.625999 21.035999 -8.237000 RAD 1.0 CA +SPHERE CENTER 17.587999 22.051001 -7.738000 RAD 1.0 C +SPHERE CENTER 17.702000 23.257999 -8.056000 RAD 1.0 O +SPHERE CENTER 16.632000 21.566000 -6.970000 RAD 1.0 N +SPHERE CENTER 15.576000 22.431999 -6.478000 RAD 1.0 CA +SPHERE CENTER 14.947000 21.879999 -5.199000 RAD 1.0 C +SPHERE CENTER 15.304000 20.784000 -4.719000 RAD 1.0 O +SPHERE CENTER 14.553000 22.764999 -7.568000 RAD 1.0 CB +SPHERE CENTER 14.018000 21.514000 -8.283000 RAD 1.0 CG +SPHERE CENTER 13.211000 20.593000 -7.394000 RAD 1.0 CD1 +SPHERE CENTER 13.189000 21.898001 -9.518000 RAD 1.0 CD2 +SPHERE CENTER 14.114000 22.691999 -4.605000 RAD 1.0 N +SPHERE CENTER 13.591000 22.299999 -3.306000 RAD 1.0 CA +SPHERE CENTER 12.246000 21.612000 -3.398000 RAD 1.0 C +SPHERE CENTER 11.508000 21.862000 -4.381000 RAD 1.0 O +SPHERE CENTER 13.406000 23.628000 -2.540000 RAD 1.0 CB +SPHERE CENTER 14.977000 24.433001 -2.196000 RAD 1.0 SG +SPHERE CENTER 12.005000 20.672001 -2.530000 RAD 1.0 N +SPHERE CENTER 10.813000 19.820999 -2.569000 RAD 1.0 CA +SPHERE CENTER 10.208000 19.822001 -1.167000 RAD 1.0 C +SPHERE CENTER 10.918000 20.218000 -0.210000 RAD 1.0 O +SPHERE CENTER 11.110000 18.377001 -3.007000 RAD 1.0 CB +SPHERE CENTER 11.604000 18.464001 -4.496000 RAD 1.0 CG +SPHERE CENTER 12.041000 17.093000 -4.992000 RAD 1.0 CD +SPHERE CENTER 12.104000 16.884001 -6.223000 RAD 1.0 OE1 +SPHERE CENTER 12.461000 16.246000 -4.115000 RAD 1.0 NE2 +SPHERE CENTER 8.983000 19.459000 -1.072000 RAD 1.0 N +SPHERE CENTER 8.377000 19.427999 0.280000 RAD 1.0 CA +SPHERE CENTER 8.573000 18.100000 0.950000 RAD 1.0 C +SPHERE CENTER 8.785000 17.013000 0.347000 RAD 1.0 O +SPHERE CENTER 6.844000 19.700001 0.273000 RAD 1.0 CB +SPHERE CENTER 6.304000 18.825001 -0.706000 RAD 1.0 OG1 +SPHERE CENTER 6.585000 21.149000 -0.177000 RAD 1.0 CG2 +SPHERE CENTER 8.526000 18.187000 2.280000 RAD 1.0 N +SPHERE CENTER 8.582000 16.999001 3.087000 RAD 1.0 CA +SPHERE CENTER 7.801000 17.273001 4.382000 RAD 1.0 C +SPHERE CENTER 7.554000 18.469000 4.665000 RAD 1.0 O +SPHERE CENTER 10.066000 16.503000 3.399000 RAD 1.0 CB +SPHERE CENTER 10.840000 17.323999 4.462000 RAD 1.0 CG +SPHERE CENTER 11.188000 16.711000 5.670000 RAD 1.0 CD1 +SPHERE CENTER 11.224000 18.618999 4.188000 RAD 1.0 CD2 +SPHERE CENTER 11.912000 17.452999 6.617000 RAD 1.0 CE1 +SPHERE CENTER 11.948000 19.333000 5.129000 RAD 1.0 CE2 +SPHERE CENTER 12.277000 18.763000 6.344000 RAD 1.0 CZ +SPHERE CENTER 7.455000 16.219999 5.116000 RAD 1.0 N +SPHERE CENTER 6.756000 16.414000 6.390000 RAD 1.0 CA +SPHERE CENTER 7.798000 16.358999 7.491000 RAD 1.0 C +SPHERE CENTER 8.422000 15.296000 7.692000 RAD 1.0 O +SPHERE CENTER 5.716000 15.281000 6.557000 RAD 1.0 CB +SPHERE CENTER 4.973000 15.432000 7.882000 RAD 1.0 CG1 +SPHERE CENTER 4.667000 15.326000 5.371000 RAD 1.0 CG2 +SPHERE CENTER 7.953000 17.509001 8.095000 RAD 1.0 N +SPHERE CENTER 8.816000 17.659000 9.286000 RAD 1.0 CA +SPHERE CENTER 7.941000 17.294001 10.498000 RAD 1.0 C +SPHERE CENTER 6.818000 17.832001 10.661000 RAD 1.0 O +SPHERE CENTER 9.260000 19.136000 9.274000 RAD 1.0 CB +SPHERE CENTER 10.066000 19.506001 10.540000 RAD 1.0 CG +SPHERE CENTER 11.058000 18.667999 11.032000 RAD 1.0 CD1 +SPHERE CENTER 9.728000 20.677999 11.181000 RAD 1.0 CD2 +SPHERE CENTER 11.713000 19.021999 12.217000 RAD 1.0 CE1 +SPHERE CENTER 10.401000 21.042000 12.346000 RAD 1.0 CE2 +SPHERE CENTER 11.371000 20.211000 12.851000 RAD 1.0 CZ +SPHERE CENTER 12.040000 20.579000 14.049000 RAD 1.0 OH +SPHERE CENTER 8.505000 16.504999 11.400000 RAD 1.0 N +SPHERE CENTER 7.774000 16.076000 12.622000 RAD 1.0 CA +SPHERE CENTER 7.696000 17.099001 13.728000 RAD 1.0 C +SPHERE CENTER 6.978000 16.834999 14.718000 RAD 1.0 O +SPHERE CENTER 8.385000 18.202000 13.646000 RAD 1.0 N +SPHERE CENTER 8.275000 19.365999 14.533000 RAD 1.0 CA +SPHERE CENTER 9.338000 19.430000 15.620000 RAD 1.0 C +SPHERE CENTER 9.309000 20.379999 16.415001 RAD 1.0 O +SPHERE CENTER 10.317000 18.555000 15.610000 RAD 1.0 N +SPHERE CENTER 11.453000 18.707001 16.541000 RAD 1.0 CA +SPHERE CENTER 12.763000 18.232000 15.950000 RAD 1.0 C +SPHERE CENTER 12.753000 17.224001 15.201000 RAD 1.0 O +SPHERE CENTER 11.179000 18.055000 17.937000 RAD 1.0 CB +SPHERE CENTER 11.154000 16.283001 17.922001 RAD 1.0 SG +SPHERE CENTER 13.828000 18.788000 16.528999 RAD 1.0 N +SPHERE CENTER 15.222000 18.386999 16.261999 RAD 1.0 CA +SPHERE CENTER 15.644000 18.605000 14.798000 RAD 1.0 C +SPHERE CENTER 16.306000 17.708000 14.224000 RAD 1.0 O +SPHERE CENTER 15.486000 16.941000 16.719000 RAD 1.0 CB +SPHERE CENTER 14.949000 16.624001 18.146999 RAD 1.0 CG +SPHERE CENTER 15.484000 17.593000 19.195000 RAD 1.0 CD +SPHERE CENTER 15.081000 17.068001 20.497000 RAD 1.0 NE +SPHERE CENTER 15.268000 17.830999 21.573999 RAD 1.0 CZ +SPHERE CENTER 15.870000 19.020000 21.452999 RAD 1.0 NH1 +SPHERE CENTER 14.930000 17.320999 22.753000 RAD 1.0 NH2 +SPHERE CENTER 15.154000 19.670000 14.180000 RAD 1.0 N +SPHERE CENTER 15.461000 19.893999 12.733000 RAD 1.0 CA +SPHERE CENTER 16.969000 19.924000 12.482000 RAD 1.0 C +SPHERE CENTER 17.752001 20.431000 13.327000 RAD 1.0 O +SPHERE CENTER 14.918000 21.275000 12.366000 RAD 1.0 CB +SPHERE CENTER 17.282000 19.622000 11.271000 RAD 1.0 N +SPHERE CENTER 18.584999 19.886999 10.687000 RAD 1.0 CA +SPHERE CENTER 18.461000 21.087000 9.753000 RAD 1.0 C +SPHERE CENTER 17.371000 21.708000 9.790000 RAD 1.0 O +SPHERE CENTER 18.961000 18.612000 9.934000 RAD 1.0 CB +SPHERE CENTER 19.486000 17.514999 10.843000 RAD 1.0 CG +SPHERE CENTER 20.042999 16.424999 9.926000 RAD 1.0 CD +SPHERE CENTER 20.782000 15.386000 10.779000 RAD 1.0 CE +SPHERE CENTER 20.985001 14.137000 10.021000 RAD 1.0 NZ +SPHERE CENTER 19.577000 21.643999 9.215000 RAD 1.0 N +SPHERE CENTER 19.570999 22.903000 8.543000 RAD 1.0 CA +SPHERE CENTER 18.898001 22.847000 7.144000 RAD 1.0 C +SPHERE CENTER 18.476000 23.930000 6.690000 RAD 1.0 O +SPHERE CENTER 20.981001 23.469999 8.429000 RAD 1.0 CB +SPHERE CENTER 21.461000 24.047001 9.786000 RAD 1.0 CG +SPHERE CENTER 22.614000 25.047001 9.608000 RAD 1.0 CD +SPHERE CENTER 22.118999 26.403999 9.384000 RAD 1.0 NE +SPHERE CENTER 22.948000 27.426001 9.370000 RAD 1.0 CZ +SPHERE CENTER 24.253000 27.187000 9.415000 RAD 1.0 NH1 +SPHERE CENTER 22.472000 28.634001 9.297000 RAD 1.0 NH2 +SPHERE CENTER 18.870001 21.715000 6.474000 RAD 1.0 N +SPHERE CENTER 18.209999 21.712999 5.169000 RAD 1.0 CA +SPHERE CENTER 16.671000 21.559000 5.372000 RAD 1.0 C +SPHERE CENTER 16.068001 20.466000 5.197000 RAD 1.0 O +SPHERE CENTER 18.745001 20.506001 4.379000 RAD 1.0 CB +SPHERE CENTER 18.295000 20.591999 2.909000 RAD 1.0 CG +SPHERE CENTER 17.721001 21.629000 2.499000 RAD 1.0 OD1 +SPHERE CENTER 18.664000 19.563999 2.134000 RAD 1.0 ND2 +SPHERE CENTER 16.097000 22.643000 5.820000 RAD 1.0 N +SPHERE CENTER 14.676000 22.662001 6.349000 RAD 1.0 CA +SPHERE CENTER 14.157000 24.101999 6.384000 RAD 1.0 C +SPHERE CENTER 14.715000 24.959000 7.120000 RAD 1.0 O +SPHERE CENTER 14.577000 21.951000 7.736000 RAD 1.0 CB +SPHERE CENTER 13.128000 21.861000 8.301000 RAD 1.0 CG +SPHERE CENTER 12.432000 22.889000 8.208000 RAD 1.0 OD1 +SPHERE CENTER 12.975000 21.035000 9.288000 RAD 1.0 ND2 +SPHERE CENTER 13.324000 24.438000 5.381000 RAD 1.0 N +SPHERE CENTER 12.918000 25.816999 5.120000 RAD 1.0 CA +SPHERE CENTER 11.388000 25.961000 5.164000 RAD 1.0 C +SPHERE CENTER 10.669000 24.966000 4.915000 RAD 1.0 O +SPHERE CENTER 13.372000 26.372999 3.741000 RAD 1.0 CB +SPHERE CENTER 14.913000 26.191999 3.701000 RAD 1.0 CG +SPHERE CENTER 15.492000 25.002001 3.268000 RAD 1.0 CD1 +SPHERE CENTER 15.705000 27.252001 4.053000 RAD 1.0 CD2 +SPHERE CENTER 16.877001 24.881001 3.132000 RAD 1.0 CE1 +SPHERE CENTER 17.108999 27.125999 3.941000 RAD 1.0 CE2 +SPHERE CENTER 17.659000 25.957001 3.487000 RAD 1.0 CZ +SPHERE CENTER 10.949000 27.146999 5.460000 RAD 1.0 N +SPHERE CENTER 9.480000 27.343000 5.498000 RAD 1.0 CA +SPHERE CENTER 8.875000 27.670000 4.157000 RAD 1.0 C +SPHERE CENTER 7.634000 27.622999 4.057000 RAD 1.0 O +SPHERE CENTER 9.045000 28.475000 6.433000 RAD 1.0 CB +SPHERE CENTER 9.258000 27.945999 7.875000 RAD 1.0 CG +SPHERE CENTER 9.119000 29.052000 8.948000 RAD 1.0 CD +SPHERE CENTER 10.025000 28.736000 10.167000 RAD 1.0 CE +SPHERE CENTER 9.826000 29.728001 11.231000 RAD 1.0 NZ +SPHERE CENTER 9.687000 27.909000 3.152000 RAD 1.0 N +SPHERE CENTER 9.124000 28.167999 1.840000 RAD 1.0 CA +SPHERE CENTER 10.108000 27.719000 0.765000 RAD 1.0 C +SPHERE CENTER 11.332000 27.660000 1.047000 RAD 1.0 O +SPHERE CENTER 8.778000 29.648001 1.642000 RAD 1.0 CB +SPHERE CENTER 10.000000 30.391001 1.484000 RAD 1.0 OG +SPHERE CENTER 9.604000 27.471001 -0.422000 RAD 1.0 N +SPHERE CENTER 10.526000 27.160999 -1.512000 RAD 1.0 CA +SPHERE CENTER 11.423000 28.346001 -1.863000 RAD 1.0 C +SPHERE CENTER 12.634000 28.115000 -2.136000 RAD 1.0 O +SPHERE CENTER 9.782000 26.679001 -2.783000 RAD 1.0 CB +SPHERE CENTER 10.966000 29.570000 -1.682000 RAD 1.0 N +SPHERE CENTER 11.751000 30.764000 -1.998000 RAD 1.0 CA +SPHERE CENTER 12.900000 30.964001 -1.040000 RAD 1.0 C +SPHERE CENTER 14.032000 31.282000 -1.463000 RAD 1.0 O +SPHERE CENTER 10.871000 32.021999 -2.024000 RAD 1.0 CB +SPHERE CENTER 9.868000 32.069000 -3.200000 RAD 1.0 CG +SPHERE CENTER 8.525000 31.417000 -2.847000 RAD 1.0 CD +SPHERE CENTER 7.573000 31.562000 -3.638000 RAD 1.0 OE1 +SPHERE CENTER 8.368000 30.636999 -1.865000 RAD 1.0 OE2 +SPHERE CENTER 12.658000 30.686001 0.225000 RAD 1.0 N +SPHERE CENTER 13.804000 30.775000 1.163000 RAD 1.0 CA +SPHERE CENTER 14.824000 29.667000 0.941000 RAD 1.0 C +SPHERE CENTER 16.058001 29.903999 1.049000 RAD 1.0 O +SPHERE CENTER 13.347000 30.500000 2.601000 RAD 1.0 CB +SPHERE CENTER 12.813000 31.775999 3.236000 RAD 1.0 CG +SPHERE CENTER 12.716000 32.875000 2.613000 RAD 1.0 OD1 +SPHERE CENTER 12.096000 31.598000 4.247000 RAD 1.0 OD2 +SPHERE CENTER 14.305000 28.478001 0.644000 RAD 1.0 N +SPHERE CENTER 15.128000 27.301001 0.379000 RAD 1.0 CA +SPHERE CENTER 16.006001 27.523001 -0.852000 RAD 1.0 C +SPHERE CENTER 17.247999 27.267000 -0.809000 RAD 1.0 O +SPHERE CENTER 14.238000 26.045000 0.259000 RAD 1.0 CB +SPHERE CENTER 15.047000 24.530001 -0.176000 RAD 1.0 SG +SPHERE CENTER 15.384000 28.062000 -1.870000 RAD 1.0 N +SPHERE CENTER 16.191999 28.302000 -3.048000 RAD 1.0 CA +SPHERE CENTER 17.171000 29.452999 -2.841000 RAD 1.0 C +SPHERE CENTER 18.246000 29.474001 -3.490000 RAD 1.0 O +SPHERE CENTER 15.267000 28.570999 -4.266000 RAD 1.0 CB +SPHERE CENTER 14.634000 27.261000 -4.708000 RAD 1.0 CG +SPHERE CENTER 15.759000 25.962000 -5.253000 RAD 1.0 SD +SPHERE CENTER 16.306999 26.625000 -6.805000 RAD 1.0 CE +SPHERE CENTER 16.775999 30.469999 -2.099000 RAD 1.0 N +SPHERE CENTER 17.652000 31.617001 -1.869000 RAD 1.0 CA +SPHERE CENTER 18.910000 31.125999 -1.141000 RAD 1.0 C +SPHERE CENTER 20.049999 31.469999 -1.556000 RAD 1.0 O +SPHERE CENTER 16.934000 32.595001 -0.930000 RAD 1.0 CB +SPHERE CENTER 17.721001 33.839001 -0.540000 RAD 1.0 CG +SPHERE CENTER 16.740999 35.039001 -0.291000 RAD 1.0 CD +SPHERE CENTER 15.472000 34.667999 0.404000 RAD 1.0 NE +SPHERE CENTER 14.256000 34.889999 -0.074000 RAD 1.0 CZ +SPHERE CENTER 13.983000 35.465000 -1.233000 RAD 1.0 NH1 +SPHERE CENTER 13.260000 34.542999 0.660000 RAD 1.0 NH2 +SPHERE CENTER 18.726999 30.198999 -0.237000 RAD 1.0 N +SPHERE CENTER 19.889999 29.693001 0.496000 RAD 1.0 CA +SPHERE CENTER 20.636999 28.649000 -0.297000 RAD 1.0 C +SPHERE CENTER 21.871000 28.686001 -0.287000 RAD 1.0 O +SPHERE CENTER 19.416000 29.106001 1.823000 RAD 1.0 CB +SPHERE CENTER 18.643999 30.132000 2.537000 RAD 1.0 OG1 +SPHERE CENTER 20.615999 28.506001 2.662000 RAD 1.0 CG2 +SPHERE CENTER 19.988001 27.747000 -0.961000 RAD 1.0 N +SPHERE CENTER 20.669001 26.563999 -1.471000 RAD 1.0 CA +SPHERE CENTER 20.773001 26.534000 -2.963000 RAD 1.0 C +SPHERE CENTER 21.341000 25.552999 -3.498000 RAD 1.0 O +SPHERE CENTER 19.955999 25.260000 -1.056000 RAD 1.0 CB +SPHERE CENTER 20.128000 24.914000 0.713000 RAD 1.0 SG +SPHERE CENTER 20.132000 27.441999 -3.608000 RAD 1.0 N +SPHERE CENTER 19.987000 27.268000 -5.071000 RAD 1.0 CA +SPHERE CENTER 21.257000 27.575001 -5.849000 RAD 1.0 C +SPHERE CENTER 21.386000 27.129000 -7.018000 RAD 1.0 O +SPHERE CENTER 22.225000 28.049999 -5.113000 RAD 1.0 N +SPHERE CENTER 23.639000 28.131001 -5.505000 RAD 1.0 CA +SPHERE CENTER 23.886999 29.393000 -6.316000 RAD 1.0 C +SPHERE CENTER 22.948999 30.065001 -6.822000 RAD 1.0 O +SPHERE CENTER 25.146000 29.681000 -6.493000 RAD 1.0 N +SPHERE CENTER 25.617001 30.840000 -7.256000 RAD 1.0 CA +SPHERE CENTER 25.247999 30.735001 -8.729000 RAD 1.0 C +SPHERE CENTER 24.962000 31.791000 -9.369000 RAD 1.0 O +SPHERE CENTER 27.160000 30.980000 -7.146000 RAD 1.0 CB +SPHERE CENTER 24.919001 29.594000 -9.172000 RAD 1.0 OXT + +PLANE + CENTER 0.0 -25.0 0.0 + NORMAL 0.0 1.0 0.0 + TEXTURE + AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 + COLOR 1.0 1.0 1.0 + TEXFUNC 0 + +END_SCENE diff --git a/examples/parallel_for/tachyon/msvs/gui.ico b/examples/parallel_for/tachyon/msvs/gui.ico new file mode 100644 index 0000000000000000000000000000000000000000..d551aa3aaf80adf9b7760e2eb8de95a5c3e53df6 GIT binary patch literal 23558 zcmeI430zgx+QuJHKtxbe5gbu*030B5$VyGcDGSFOalkY&2LuvC5pp(7&2XNl96=@z zNXGH2`|DO#nx)3nwUq43A>_N=+wHsYe$U#6ePmShD&p^B>2uySylbs@uYIPy&-w#c zpc-6UYC)x+ErDgUwQ8BlZ7hIURRB*7exZ#T}AXG2* z=^weGTI5~Inq#r?3QZRh5>Vvy7AqDy*^i;1p6BY7;LQSXZ{;g>M z?fm5AM!1uJ~14CP5-;mbWJGeF0 z_iurN!(6GBI54yo4h(CB{j~e(6Em$hj*V=Fqpvo{5$e#07L+U2`wvFkn8s8S#Efo= z^|!}o{tozLT1|Z7UlaSMxZ(5FgK^Rilm(Khv|vko7i5X}36?lI))Ggklas69 zVxSe$=33+10BfA^v%)uXY;b;dHGCaV4e6oPadwt1PEE7L#SjO4G`kKy33kG#^P1yK zcx(J^Ra<Ti+?95-JJvGIWK0JnTs;vs^DcXy)=jK$w z=lme~e0CM~SM61i7E+Zy6!Vv8(?YCpX|5H%3$bS21{dbq;8I96Tne>C8jm-9o*mM| z?2r~#1K&~U^BwT@ygK+I#1UDG8sIO%&iE*}A+E1$jbGNa!S(fRas9ovxba>)TBY{5 zxxo`Rq9|oIDtY0?rjE#1t!!u9+}s5>w|2#i&D55z%y+}h?JrQ>af9~O4zA^n9=Nr$ z7jEt9gPXg&@$23JxV49(y|Q~4emOiI-)H_6dH=qKoBYhlq5e+&PW_AegZf|U-_)N} z9@RJC3MS7vp?yXL1qC4>AOQaU{+Kjr5++WZhzS!Wz}MFoW5Wxo&I+1!G$zZHn#$;`!98-<yjHIyy#~ zd!^|5sm6LSF)_!K%8;V#rWzZU(N_%@(#Q5Ewg{KRHI95 zY?=LIo2D9@#Ky*zb^O>SmHu~IE44l?Dgh-;K81z)WLJ`;4wqn z_ZrZ%LmzL?wy3kD_lL%jZ@l`n*YIJJ=8o?=KVm^dc=tK8XTNSrUK1xwofb5!|4WPJ z4;&O=5uecStt8`&$o&U)@7lX>*XEsj-g|fBj_upFZrx%^n^vq{{r0M5OP8-%`Odni z4ek1_pUw~WS3(xf3w~KkBmDdVRSL~dfr0)bOf7sI@n%@?lm1=c0pd4Z&T02Hm@RH2 z)we;5{I7(S*0d0%twR;wLsA|##n-X4buN70s`TsBg@MbpxknH6!QPjfV-K~P+VA6v z_lLE?{$Xwi?eB?&gE}IlpC>|?5A<%2&;edpIl33d4IhkA?7Qcs#@NdnYWsbf({dao zjuAS*69M!eGt37G)4CyX#*2ub-V>ij1>vuo!mzs+z)KgL@b7{zHqOE48v-$!zJ3#Y zv6uJbc6$T6dQ*KU=65px!K_Y5n$a2Cr*_9zn`Ys&O+gqt+y{pT0q+l>1_JwOKM87w zj|1D|zXCjwI@=4Ewok|DRTFSw+Z#B)bq3CDnTav%mol33yacQq;D9qB?)YqOTV(8< zhO{02IO`82u>Hs|UYpK$#ksIn_%f8&v3sW=YtK}ip9y^Z1~r3H`B~I#;2iDQ=@jeE zsP;Kl_%^%|E=9QF`(^IPTIr6TH*`S`ui5^ww+}9?dJfr}dg8{OA;>xEhiiu?LYUzwb+T)8Ci=PAZtkjWKvm68X{|HBivlm3|Y&X;^sP6+GhB5eJk92w>5I2 z+$j(Ix}hC1827D>9dK(?2jp()h@8zG@!QT$$l2N%x3+e|?QJ|JOre?J8PhnJ%Ni~CLrzWB&44|iS%zyB8@if zn`DaR3m@|O^QyPhwX#dzrgIKY+OQIBHLeiIw|EP z&VT0+jvL~&)rdRJe}-vnAIJ6*Q-ZDH1N-*w-gRv2&ZLw99b3D3xO=#{xw*T!wQ+Oz@bGBcd0?|n&$#sN_2S8-lrFX#RqEa{~iIg60Iwp0)kazxeJo zgX#N&>G3k(9Zpk`k46?8yGp_NR9<~gx%0b2>EBc6h6N*s;*a0{2Wy6O#7ZA8q(u55 zXmAg#9`ZC+QBk9x#nSQpa4CKpR!sCp#>stnXRBl-)qQFW^fsryy=(Z?FI2AS<5;lV$HB*W zpm$$$hhFu3THa~z+qYL;AE$u>2QZl)2G;Ru)3f^vUAny3rOUHDp6~jct50i}CXE|6 zZPK7&qvp+?vT*b1+^M5y`wmZgdAPT0`%H^xiXL6DvWOu*60xx;u6V#Q2{0r8adCy( zEn;IuV&g28p4jI>W#CW53OF&!CsAr~RottogHM>&s@S>DKq|7h|3SD9 zqF9XiYwfgmNUJRFhY%(1o6xLY)@?;QKJMM%9Zv1};>0~2!r#}0zp0zW`xNH9UeDj( zg}=XRQtjm}{_d~Eq+;bB6m$ICmr^L!lH$^jp`^CQQOEr>=J>f^rrg)^KRssd^D)QI zeLuo|80KTp^Sb>{=X%)v)pLRSmCW&T|B@EJinpT1Tyzb%m&zPJ_g4w`z?hFg`Rd1_ z>Wj7&9jm;{DmLy1Gsn+8Vp@!PtSTNouWWh8cdz+W{M_4Sj-PwjDs;R>k4LR3_uiS~ z=YBll{weJklr8FC(aI`*?jJPA&pn00ytW2@1pNNmFr)z)}MRaMZIsT^P*Jr zd{v~ficiI=V%Fb3xlf-prc}}2|5bcSDrP-?@&@_Qn~c8Rs-)*Df-M*%`H0H+%lZ72 zvi{EGQOr#h;dxS84CWx2AwMJBn{b$~fyU%&3N}@!=X}9qDHtRuG5tUm68j-~fkG1sqOUyGmYlwPgb z2OYaS`ssnHnDzL{f$7y1HvU2ZvOsRl96y=1qRkb)O#V)fzZuy)A>;K#iJYK%{YIx)`7mahDM1B1t%cm9kaZNYkD4X_DC9qd+$8->B5TQhB} zPLpFP(T5^y$$V8IA1dTRh5V#84>?gGBg(O=3b|S#mnh^Cg)FI%vsB;THmdl^aSGW> zA@3;U9fcgEkcSj)tKX)y|CMyJ9 zWMGAisgNZVGNwZIRLI7bES?uKuA0cIN->306SAtME58p}SdPK5N}H!(y?QQ$SPR)# zEw=cH;9p8myVEOE~ZJrY}3iIg?0rP&%LTBp=}8h@I%TXv<9-xUO`%}-uWt5a*E=2Z6^)Nip$4?6}mrb=W3r9pMm{N(?%I<=0f{ZX!iK0oKQ1d^EdG#^%`N>O4Lp#&)lc_BC`N?cbBh&ou z$Ha>#mE4>Z3XbJ2L!+Nt++W%XmzCnEDKwe#1XEVN#&9kX7z*Ba>aDt~p(O7d58 ztNMbLMIj4qo}V1Gs?t)?V|bWl{j*<9L>}8bKN)V*HyMT)&Xn7jpKpqbGz6zmVk@{(S%;moMb= zg`B=PIy$QPUCF}>xq2agFXZoq+`W*w*DN`FAuBIr%G&-D!IW`F9}` zFJ#_@jJ%MQmz-@~sV+i3UdYL7B1xFE+kg*rC_sn}}eaYVo*?J*YFZ>$;!oOJ{ z{QCgB-)1FF4i?imzkPZz{4Rvr{h7I>sgUu{%LsSK%b0JUml0-1RnN;GSP!(-+jpO%JopO`B((dnpK-(&yRaUJ6F; zchnE_k$Wv1f4{oG;*T$8Vx5|ss!Wf01@yO_$nuNBLZ4Gvb)Vu6x9f7RD3t3{RPFna z@~=**zWfUs8kYPPZCSL4e)B1xT|TXnSM+U>y|{O?8%m4vtzIr_BVKg5vCP}`*3dR} z&a!{N#n>%>kU18z!$Q_q$meQ#RW3=oZ=knFmg=8&V&`qOUg~p1N&lWwnpHmPb9YW3 zw+z)kIP(xwOMAJX5{|A*v__uZdtvV;w2rOkgeCCc1i z#a5Q%Amc3IgIa3+fBIm(x&OWTs_~Un|HxNN{coH$#m{POUDev^Dy>e{FMhe1Y5iiu zZ_N=+wHsYe$U#6ePmShD&p^B>2uySylbs@uYIPy&-w#c zpc-6UYC)x+ErDgUwQ8BlZ7hIURRB*7exZ#T}AXG2* z=^weGTI5~Inq#r?3QZRh5>Vvy7AqDy*^i;1p6BY7;LQSXZ{;g>M z?fm5AM!1uJ~14CP5-;mbWJGeF0 z_iurN!(6GBI54yo4h(CB{j~e(6Em$hj*V=Fqpvo{5$e#07L+U2`wvFkn8s8S#Efo= z^|!}o{tozLT1|Z7UlaSMxZ(5FgK^Rilm(Khv|vko7i5X}36?lI))Ggklas69 zVxSe$=33+10BfA^v%)uXY;b;dHGCaV4e6oPadwt1PEE7L#SjO4G`kKy33kG#^P1yK zcx(J^Ra<Ti+?95-JJvGIWK0JnTs;vs^DcXy)=jK$w z=lme~e0CM~SM61i7E+Zy6!Vv8(?YCpX|5H%3$bS21{dbq;8I96Tne>C8jm-9o*mM| z?2r~#1K&~U^BwT@ygK+I#1UDG8sIO%&iE*}A+E1$jbGNa!S(fRas9ovxba>)TBY{5 zxxo`Rq9|oIDtY0?rjE#1t!!u9+}s5>w|2#i&D55z%y+}h?JrQ>af9~O4zA^n9=Nr$ z7jEt9gPXg&@$23JxV49(y|Q~4emOiI-)H_6dH=qKoBYhlq5e+&PW_AegZf|U-_)N} z9@RJC3MS7vp?yXL1qC4>AOQaU{+Kjr5++WZhzS!Wz}MFoW5Wxo&I+1!G$zZHn#$;`!98-<yjHIyy#~ zd!^|5sm6LSF)_!K%8;V#rWzZU(N_%@(#Q5Ewg{KRHI95 zY?=LIo2D9@#Ky*zb^O>SmHu~IE44l?Dgh-;K81z)WLJ`;4wqn z_ZrZ%LmzL?wy3kD_lL%jZ@l`n*YIJJ=8o?=KVm^dc=tK8XTNSrUK1xwofb5!|4WPJ z4;&O=5uecStt8`&$o&U)@7lX>*XEsj-g|fBj_upFZrx%^n^vq{{r0M5OP8-%`Odni z4ek1_pUw~WS3(xf3w~KkBmDdVRSL~dfr0)bOf7sI@n%@?lm1=c0pd4Z&T02Hm@RH2 z)we;5{I7(S*0d0%twR;wLsA|##n-X4buN70s`TsBg@MbpxknH6!QPjfV-K~P+VA6v z_lLE?{$Xwi?eB?&gE}IlpC>|?5A<%2&;edpIl33d4IhkA?7Qcs#@NdnYWsbf({dao zjuAS*69M!eGt37G)4CyX#*2ub-V>ij1>vuo!mzs+z)KgL@b7{zHqOE48v-$!zJ3#Y zv6uJbc6$T6dQ*KU=65px!K_Y5n$a2Cr*_9zn`Ys&O+gqt+y{pT0q+l>1_JwOKM87w zj|1D|zXCjwI@=4Ewok|DRTFSw+Z#B)bq3CDnTav%mol33yacQq;D9qB?)YqOTV(8< zhO{02IO`82u>Hs|UYpK$#ksIn_%f8&v3sW=YtK}ip9y^Z1~r3H`B~I#;2iDQ=@jeE zsP;Kl_%^%|E=9QF`(^IPTIr6TH*`S`ui5^ww+}9?dJfr}dg8{OA;>xEhiiu?LYUzwb+T)8Ci=PAZtkjWKvm68X{|HBivlm3|Y&X;^sP6+GhB5eJk92w>5I2 z+$j(Ix}hC1827D>9dK(?2jp()h@8zG@!QT$$l2N%x3+e|?QJ|JOre?J8PhnJ%Ni~CLrzWB&44|iS%zyB8@if zn`DaR3m@|O^QyPhwX#dzrgIKY+OQIBHLeiIw|EP z&VT0+jvL~&)rdRJe}-vnAIJ6*Q-ZDH1N-*w-gRv2&ZLw99b3D3xO=#{xw*T!wQ+Oz@bGBcd0?|n&$#sN_2S8-lrFX#RqEa{~iIg60Iwp0)kazxeJo zgX#N&>G3k(9Zpk`k46?8yGp_NR9<~gx%0b2>EBc6h6N*s;*a0{2Wy6O#7ZA8q(u55 zXmAg#9`ZC+QBk9x#nSQpa4CKpR!sCp#>stnXRBl-)qQFW^fsryy=(Z?FI2AS<5;lV$HB*W zpm$$$hhFu3THa~z+qYL;AE$u>2QZl)2G;Ru)3f^vUAny3rOUHDp6~jct50i}CXE|6 zZPK7&qvp+?vT*b1+^M5y`wmZgdAPT0`%H^xiXL6DvWOu*60xx;u6V#Q2{0r8adCy( zEn;IuV&g28p4jI>W#CW53OF&!CsAr~RottogHM>&s@S>DKq|7h|3SD9 zqF9XiYwfgmNUJRFhY%(1o6xLY)@?;QKJMM%9Zv1};>0~2!r#}0zp0zW`xNH9UeDj( zg}=XRQtjm}{_d~Eq+;bB6m$ICmr^L!lH$^jp`^CQQOEr>=J>f^rrg)^KRssd^D)QI zeLuo|80KTp^Sb>{=X%)v)pLRSmCW&T|B@EJinpT1Tyzb%m&zPJ_g4w`z?hFg`Rd1_ z>Wj7&9jm;{DmLy1Gsn+8Vp@!PtSTNouWWh8cdz+W{M_4Sj-PwjDs;R>k4LR3_uiS~ z=YBll{weJklr8FC(aI`*?jJPA&pn00ytW2@1pNNmFr)z)}MRaMZIsT^P*Jr zd{v~ficiI=V%Fb3xlf-prc}}2|5bcSDrP-?@&@_Qn~c8Rs-)*Df-M*%`H0H+%lZ72 zvi{EGQOr#h;dxS84CWx2AwMJBn{b$~fyU%&3N}@!=X}9qDHtRuG5tUm68j-~fkG1sqOUyGmYlwPgb z2OYaS`ssnHnDzL{f$7y1HvU2ZvOsRl96y=1qRkb)O#V)fzZuy)A>;K#iJYK%{YIx)`7mahDM1B1t%cm9kaZNYkD4X_DC9qd+$8->B5TQhB} zPLpFP(T5^y$$V8IA1dTRh5V#84>?gGBg(O=3b|S#mnh^Cg)FI%vsB;THmdl^aSGW> zA@3;U9fcgEkcSj)tKX)y|CMyJ9 zWMGAisgNZVGNwZIRLI7bES?uKuA0cIN->306SAtME58p}SdPK5N}H!(y?QQ$SPR)# zEw=cH;9p8myVEOE~ZJrY}3iIg?0rP&%LTBp=}8h@I%TXv<9-xUO`%}-uWt5a*E=2Z6^)Nip$4?6}mrb=W3r9pMm{N(?%I<=0f{ZX!iK0oKQ1d^EdG#^%`N>O4Lp#&)lc_BC`N?cbBh&ou z$Ha>#mE4>Z3XbJ2L!+Nt++W%XmzCnEDKwe#1XEVN#&9kX7z*Ba>aDt~p(O7d58 ztNMbLMIj4qo}V1Gs?t)?V|bWl{j*<9L>}8bKN)V*HyMT)&Xn7jpKpqbGz6zmVk@{(S%;moMb= zg`B=PIy$QPUCF}>xq2agFXZoq+`W*w*DN`FAuBIr%G&-D!IW`F9}` zFJ#_@jJ%MQmz-@~sV+i3UdYL7B1xFE+kg*rC_sn}}eaYVo*?J*YFZ>$;!oOJ{ z{QCgB-)1FF4i?imzkPZz{4Rvr{h7I>sgUu{%LsSK%b0JUml0-1RnN;GSP!(-+jpO%JopO`B((dnpK-(&yRaUJ6F; zchnE_k$Wv1f4{oG;*T$8Vx5|ss!Wf01@yO_$nuNBLZ4Gvb)Vu6x9f7RD3t3{RPFna z@~=**zWfUs8kYPPZCSL4e)B1xT|TXnSM+U>y|{O?8%m4vtzIr_BVKg5vCP}`*3dR} z&a!{N#n>%>kU18z!$Q_q$meQ#RW3=oZ=knFmg=8&V&`qOUg~p1N&lWwnpHmPb9YW3 zw+z)kIP(xwOMAJX5{|A*v__uZdtvV;w2rOkgeCCc1i z#a5Q%Amc3IgIa3+fBIm(x&OWTs_~Un|HxNN{coH$#m{POUDev^Dy>e{FMhe1Y5iiu zZ + + + + DDDebug + Win32 + + + DDDebug + x64 + + + DDRelease + Win32 + + + DDRelease + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9} + tachyon.serial + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\serial\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\serial\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + true + Speed + true + false + WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + true + Windows + UseLinkTimeCodeGeneration + MachineX86 + false + + + + + X64 + + + Disabled + true + Speed + true + false + WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + true + Windows + UseLinkTimeCodeGeneration + MachineX64 + false + + + + + true + Speed + true + true + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + true + Windows + true + true + MachineX86 + false + + + + + X64 + + + true + Speed + true + true + WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + true + Windows + true + true + MachineX64 + false + + + + + true + Speed + true + true + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + $(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + + + X64 + + + true + Speed + true + true + WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + $(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + + + Disabled + true + Speed + true + false + WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + $(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX86 + false + + + + + X64 + + + Disabled + true + Speed + true + false + WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + $(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX64 + false + + + + + {924517df-2b6a-47d5-8a11-cc247cc4d810} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_for/tachyon/msvs/tachyon.sln b/examples/parallel_for/tachyon/msvs/tachyon.sln new file mode 100644 index 0000000..8612273 --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/tachyon.sln @@ -0,0 +1,94 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb", "tachyon.tbb.vcxproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.common", "tachyon.vcxproj", "{924517DF-2B6A-47D5-8A11-CC247CC4D810}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.serial", "tachyon.serial.vcxproj", "{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tachyon.tbb1d", "tachyon.tbb1d.vcxproj", "{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + _GDI Release|Win32 = _GDI Release|Win32 + _GDI Release|x64 = _GDI Release|x64 + DD Debug|Win32 = DD Debug|Win32 + DD Debug|x64 = DD Debug|x64 + DD Release|Win32 = DD Release|Win32 + DD Release|x64 = DD Release|x64 + GDI Debug|Win32 = GDI Debug|Win32 + GDI Debug|x64 = GDI Debug|x64 + Description = Tachyon ray-tracer example + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.ActiveCfg = Release|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|Win32.Build.0 = Release|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.ActiveCfg = Release|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}._GDI Release|x64.Build.0 = Release|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DDDebug|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DDDebug|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DDDebug|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DDDebug|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DDRelease|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DDRelease|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DDRelease|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DDRelease|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64 + {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.ActiveCfg = Release|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|Win32.Build.0 = Release|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.ActiveCfg = Release|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}._GDI Release|x64.Build.0 = Release|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DDDebug|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DDDebug|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DDDebug|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DDDebug|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DDRelease|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DDRelease|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DDRelease|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DDRelease|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64 + {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}._GDI Release|x64.Build.0 = Release|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64 + {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.ActiveCfg = Release|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|Win32.Build.0 = Release|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.ActiveCfg = Release|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}._GDI Release|x64.Build.0 = Release|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DDDebug|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DDDebug|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DDDebug|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DDDebug|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DDRelease|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DDRelease|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DDRelease|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DDRelease|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64 + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj new file mode 100644 index 0000000..2e7881e --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb.vcxproj @@ -0,0 +1,445 @@ + + + + + DDDebug + Win32 + + + DDDebug + x64 + + + DDRelease + Win32 + + + DDRelease + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {6E9B1702-78E0-4D64-B771-8B274D963B58} + tachyon.tbb + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + {924517df-2b6a-47d5-8a11-cc247cc4d810} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj new file mode 100644 index 0000000..36106de --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/tachyon.tbb1d.vcxproj @@ -0,0 +1,445 @@ + + + + + DDDebug + Win32 + + + DDDebug + x64 + + + DDRelease + Win32 + + + DDRelease + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {924517DF-2B6A-47D5-8A11-CC347CC4D8E9} + tachyon.tbb1d + Win32Proj + + + + + Application + MultiByte + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + true + true + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\tbb1d\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\tbb1d\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 release "$(OutDir)" + + + + + X64 + + + true + Speed + true + true + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 release "$(OutDir)" + + + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + StreamingSIMDExtensions2 + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\ia32\vc_mt;$(TBBROOT)\lib\ia32\vc12;$(SolutionDir)\..\..\..\..\lib\ia32\vc_mt;$(SolutionDir)\..\..\..\..\lib\ia32\vc12;$(DXSDK_DIR)\lib\x86;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX86 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" ia32 debug "$(OutDir)" + + + + + X64 + + + Disabled + true + Speed + true + false + $(TBBROOT)\include;$(SolutionDir)\..\..\..\..\include;%(AdditionalIncludeDirectories) + TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + + + $(IntDir)%(Filename).pdb + Level2 + ProgramDatabase + + + tbb_debug.lib;%(AdditionalDependencies) + $(TBBROOT)\lib\intel64\vc_mt;$(TBBROOT)\lib\intel64\vc12;$(SolutionDir)\..\..\..\..\lib\intel64\vc_mt;$(SolutionDir)\..\..\..\..\lib\intel64\vc12;$(DXSDK_DIR)\lib\x64;%(AdditionalLibraryDirectories) + true + Windows + UseLinkTimeCodeGeneration + MachineX64 + false + + + Copying DLLs and PDBs + call "$(SolutionDir)\..\..\..\common\copy_libraries.bat" intel64 debug "$(OutDir)" + + + + + {924517df-2b6a-47d5-8a11-cc247cc4d810} + false + false + true + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_for/tachyon/msvs/tachyon.vcxproj b/examples/parallel_for/tachyon/msvs/tachyon.vcxproj new file mode 100644 index 0000000..21502b2 --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/tachyon.vcxproj @@ -0,0 +1,455 @@ + + + + + DDDebug + Win32 + + + DDDebug + x64 + + + DDRelease + Win32 + + + DDRelease + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + tachyon.common + {924517DF-2B6A-47D5-8A11-CC247CC4D810} + tachyon.common + Win32Proj + + + + + StaticLibrary + MultiByte + false + v120 + + + StaticLibrary + MultiByte + true + true + v120 + + + StaticLibrary + MultiByte + true + true + v120 + + + StaticLibrary + MultiByte + false + v120 + + + StaticLibrary + MultiByte + false + v120 + + + StaticLibrary + MultiByte + true + true + v120 + + + StaticLibrary + MultiByte + true + true + v120 + + + StaticLibrary + MultiByte + false + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Configuration)\ + $(TEMP)\tbb_examples\$(Platform)\$(Configuration)\ + $(TEMP)\tbb_examples\$(SolutionName)\$(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + Speed + true + false + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + true + StreamingSIMDExtensions2 + + + Level2 + ProgramDatabase + + + /MACHINE:X86 %(AdditionalOptions) + + + + + X64 + + + Disabled + Speed + true + false + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level2 + ProgramDatabase + + + /MACHINE:X64 %(AdditionalOptions) + + + + + Speed + true + true + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + StreamingSIMDExtensions2 + + + Level2 + ProgramDatabase + + + /MACHINE:X86 %(AdditionalOptions) + + + + + X64 + + + Speed + true + true + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level2 + ProgramDatabase + + + /MACHINE:X64 %(AdditionalOptions) + + + + + ..\..\..\common\gui\dxcheck.bat + + + Speed + true + true + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + StreamingSIMDExtensions2 + + + Level2 + ProgramDatabase + + + /MACHINE:X86 %(AdditionalOptions) + + + + + ..\..\..\common\gui\dxcheck.bat + + + X64 + + + Speed + true + true + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level2 + ProgramDatabase + + + /MACHINE:X64 %(AdditionalOptions) + + + + + ..\..\..\common\gui\dxcheck.bat + + + Disabled + Speed + true + false + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + true + StreamingSIMDExtensions2 + + + Level2 + ProgramDatabase + + + /MACHINE:X86 %(AdditionalOptions) + + + + + ..\..\..\common\gui\dxcheck.bat + + + X64 + + + Disabled + Speed + true + false + DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + true + + + Level2 + ProgramDatabase + + + /MACHINE:X64 %(AdditionalOptions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + _WINDOWS;_DEBUG + $(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + _WINDOWS;_DEBUG + $(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + _WINDOWS;NDEBUG + $(DXSDK_DIR)\include;%(AdditionalIncludeDirectories) + _WINDOWS;NDEBUG + true + true + true + true + + + true + true + true + true + _WINDOWS;_DEBUG + _WINDOWS;_DEBUG + _WINDOWS;NDEBUG + _WINDOWS;NDEBUG + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/parallel_for/tachyon/msvs/win8ui/App.xaml b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml new file mode 100644 index 0000000..df49ca8 --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp new file mode 100644 index 0000000..0abae72 --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.cpp @@ -0,0 +1,54 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "DirectXPage.xaml.h" + +using namespace tbbTachyon; + +using namespace Platform; +using namespace Windows::ApplicationModel; +using namespace Windows::ApplicationModel::Activation; +using namespace Windows::Foundation; +using namespace Windows::Foundation::Collections; +using namespace Windows::Storage; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Controls::Primitives; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::UI::Xaml::Interop; +using namespace Windows::UI::Xaml::Media; +using namespace Windows::UI::Xaml::Navigation; + +#include "src/tachyon_video.h" + +App::App() +{ + InitializeComponent(); +} + +void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ pArgs) +{ + m_directXPage = ref new DirectXPage(); + + // Place the frame in the current Window and ensure that it is active + Window::Current->Content = m_directXPage; + Window::Current->Activate(); +} diff --git a/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h new file mode 100644 index 0000000..ffb3437 --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/win8ui/App.xaml.h @@ -0,0 +1,41 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + + +#pragma once + +#include "App.g.h" +#include "DirectXPage.xaml.h" + +namespace tbbTachyon +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + ref class App sealed + { + public: + App(); + virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ pArgs) override; + + private: + DirectXPage^ m_directXPage; + }; +} diff --git a/examples/parallel_for/tachyon/msvs/win8ui/Assets/Logo.png b/examples/parallel_for/tachyon/msvs/win8ui/Assets/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bc91a8ef6baf57c85fb41f017e0a16476a4137aa GIT binary patch literal 35141 zcmV)6K*+y|P)>ZJC*=ZMU1;%-o&sbcd74JIO$jNoFR=fd0R$YnNqNl4W<# z`+aMjRjX7gm2TbVY<~7WOMY}XNWZ>19Q4)U;5+L`@K@98>v`6Xj|MNWesVN;dW8t< z*u3kf$3pJA-Wc(H;5F*|#;EVlj)#bg=W{Oo8|Hi>{>iLQnE9DM<&zhEZF7Fj1@4US zE8*^mw{hNEy<`E9=7Z-BHunHCFBr!|__pF&_^!?Q+c!sjAA0@#gj8JjeuDm2b3Wny zi}|a?U)UnQxc)}ndNR)z*JHnAPMmH@&)o>k0negQ`T2>E8SB+LbWnM?nF^=}qmd7!HjzZ8G9@Yb2}+gmqnVeFU86y(_;Edrt2 zz|4)xT}aGxv&5V7%LSKkH+OxT>z!SG`t_?*(phWfZ)ZIh-^q*LcZ!b-toy#<_TTca?{kIoee3Dh@9e6X_ifJGyJSwB<^yStkGKuY zjQ=_>B>J1Rm?x^d!SLeI+}w;`{m)c*$=H37nC}hmP595b{{D=N*Ll=0@onPk-^#l0 zH818q%zV$Bs4o%Fx?7lL<1`zjIS{(^+#zVM^J z?t11cd6@2{A5S$*TB>k7Y_sPtA zB0QgY$8J5p1OJklvN<143xG5Op1Fa!_xdyi!@StK|K_Y;>F*s+imDot>h|A!=72oN zy(u@?H=*6lW>eSTXq?RAgWUlSy!HfqF#q~3Xf61L`F^X2OyO6jyOa<7=hI(d=J%cN z`2sNOf3-w}?G{M)h|z6?=74A6Pha5r!t#d_B7!GIJH+>J2gQ}&dHmpuzl^Kelb&B% zl^K%Sa`wclzbwy-OsLtL-Fi5s=|rA-#|v+~SJ%?^;hup1AFiI`Z;JoDa`*~Hy0OZ4Vv8m-$<-BxZ3;I!~2(gPzrnQ^UEjm;tHJx5;tO+w9N zKysI#B04y8D6hQscjpzXq`CuFFYLeg;h&RJQzMgelI!-RC4|LR?gqv3(k$N3&Dwwc zbNwy*Xm7wnuYbItSj^wv`?irile)z0;=c2Kp)tCoJYQdrjH1fReTvW!&&7P8{yo3D zpqOJ#--r9InYVO_sCMUrY5|;_^+WV-Y%Eom? zBjp33Tn1gRvVpIs<%G*CEJ<@yow$1L*%>xq$x<~eAC9BIvZaBGl z)Mm>p?VLii38%Z&NWgvX)WUE0WKy!o_0N|=XTDRGvrAhv!nY_Jyi{MPb8)m}7gi3Q ze{7?@R;OO2b=jkwbU<)x`J3M&Rqy|c*sCA@9l1Fui_NyPOpmqPW=c@kSW5f>$| z8oznymESe&zOE@8)|DU3Ev+o*I-cKka^^c{KIcPbevbI#ti`u}fOUHlaL1O2u+2tm z5m3zpX}%pKqM`_uTUnWxB)A`X;m7Gs2i;=Y_~tk-yDoofX>OPpB`X`gey&?-VPUqf zHA4Ji#um2D0h-bj2^O)csZFEsmiRikI$6cXM-AjViIB(w-JToM@nq)BN^Lwe-+lZh zuj7Jk+HO|YF&I%gR?u@X(9b2W^JGfHfz*cmI$cgI-g)I43!9yu;$rB{Ij^K-K{m5$NSS_ zBV<|0+U)GqoQ{*JjRy<5&s4V!8X0bliqZy#1c~24|E)}&Lwvkkf+Swv?sjzY&3m8K@BP;1iuZmqm6BhjOURrPttuDYouEm0evSyZ#@M%mCaf$D_rve4}I6MjCfb-Q1XX7>N&FH_Os za)P3n|3dtnd)MzTD<5#(xkci=S~3&48EDN`(+fj2r)Cf#d1)e&Kro~EaBG1yBBj8@ z)Fi#-#HA1aoZoZlQLDs+oC^QIU|&!B6rDTYg!mm7RHN{TPR$wXE{%i(%@Uy7l5}f-o$Zo#*Ti}I`R%Hb z1f+B&)Ezpqe{|2`<11ILP(&sh?bwXw4-9k?e1STg$ zNK(2onh%91<$Qi1Frj)6k4ygU`#g&4U!PI3coJSR%H#ezU$jD4Xh2zAQ(foK(@!rw za`TtV*KIHBI}Ltu@zF`yMLDH)MTJ=xdP2odz-sXL$7hs3``Z+c54mpd0R2|bZ-^!L z>cBamx~-}2R^oGLfH}9)@s_~M;_5V=i#9As9^&)ds5UAkC$V-Px->aXMRc{sEz40? zF9{CHk8vG4|L)GiFQJ99+K$Cn@9AmDFRZAcUeVRtBhT)ei3dKRyR&sp`;qP=H>-!v zjf{^rR;D%WxuL)Ni+OVJ#HpU45t0c%JP;_ZcRqLzo!NHqmFQqoe*D*~Di%-TW5dNa z^pr^}i_<(qB779le34K8WeS0_b9Q%kbLeR)*y3AYXl@hiZOwL+XZ2MzH1X%3fAwX{ zBel+)LO%3oJIolEncw8?F0F{mjkc7O0C;dsgOX>*Gz;x^Q2A|I&2% z`QEVD@L(KtLIpQZuaH2mzx?UfAN<4A)eryaNK>Ffr3ALfvR%>T+x936ElrdSG=_mSSVQwr9PikzeiHwf^>Uv#t`9wy`F(QhprjD*7Z`}O) zzsAS93G*kees$o5pWz2ty36-Bt8~R*Q(X2HK?E**FmU<;#lmt4=I zB~G>l;a(QRIJ?KR__~-_nC%#>R@qn?`zoS+U5xE*O#M6^l5#8f@sGdxke%D!y)&+A zFN!NXOrlWA8z!D<+jnDIK#_r8A$y#dY<$li)Gq+Xr599}B%8@9GFuM$C3Uz(H^)`) zYuSIZVf+~Zyt{AxtRK_j6~O_nrG2MT>i3Ud`5gOatFA?{uU)&^+1(3V(+Vp7d`(qS zUH8SoAh)O{9%ruq^PTSlJj=t?CM`A2+;m4?S@oW4Uyhvr$R)BFKCF*%*smDhWgeP$7Z(^W1VQ3d^WA9PE$CV zP}7n}pM7_D_4+4wWi5zr-l0BvxwfWN+@ueV2L}8>|UR-MQW~M;?)! zkX;%Un`vNTODay8Ka$*dtnJWSE7z>A+jX@zE6Bt-WQ&zwR7@n&oEz!z#`_<>`S(-x zdtZ^H?nJ6KtY4cO=@?VBKRGVUFCbt}2s;iupIo=Ux4o>Uxh<=xqQ5nlXtgBXEi|XU zwz>8AtG||pr>=6z*b!Kakg+Yk_k%|f9dZ#wN2R@|%W@<8h6eVJw`XP~6j#-r8%|1! zmVM`YkFc@Wuc?iPht7ZE;o}<_rTgI1k2h^xhdV?0S|#o)e{4iF$*G+NUpcYd7aly`CCjF)@x=;*IjN_~`4Z@!Y3o2`YL z%)`yGIKdM&o0Fn`c36#HqtU6`55IwR36g~pM`QC!`%arU1v_XPNJ|E(({M$ z@~NkSg8bc`t+cA3_$cMuhZ3I|P!S&B_XAs6Q6nm`C_DPgLqT&c5_PCbduKNbTgTjl zAoMm4WNJwpLTurwb$0hI(ivKLDD2d=!D-z{4{<_k->#&(eO-rdw(NbjcI=Xv-9=$4 zvitEuGZK`|T|JukjFP%Gf{pV%N`@ zkox-HrvCkU*f(5DX8O2yi`Rnzc3*7}uW~L(3b8Zar1sfn5>jTZs&>%U1-P4Iz>rAp zNKX5)qD)ixCKW$>KfF6woZXj+YL5v-n1V1Ffrct^y;nU zNuIXWCg1cXt(V=aMUGB3Zxj)Kfc^h98Q$8x9ivXU%M zyDi)8Bo%{aAGc0YsuYd;UW={VQ$BR%nGgTz)N8+}9e*~f?Rb3kUUnD~W+AVDAd=a7 zG$6V2#+U!y+|~Q@>m?tY$hg!WhKF^$MS|M!jBWK-#;jkzmXQCqQ&T$!hcSovu?2|% z7kgFz@od<_>))RZTVO4j0oz@eEo?&X3m9+E>w2EVR_!4=^iS#xR43w?@U`vLwa(!U zQPJU^u`OQicFzpyY^*Inr8zGMmDOA5osp4*!$N3b>==xWGVm|dl60ir7OH7DXJ+j^| zqvZ%x0SG$*L4g&6=aOSWci2n18!~_U`#;8K6|#z3u< zoaqd{FMjuZ!xFt>TmZBC0yYz^X_Y; zS+T>7y{Ro6<~`Y+XL!WI;S2m=>4qnsd@3r)^r>a53~U1)ePY?Vm5=k=$5(7xvE41F zys2jV`K%OO&DeDdOEYzB`Yg1BA7_x(_0Mr`J%S@BgSfibZ`iQz$yHl*#iJ(Hu5bK$ zs;j*=HZqiQ7%_WEYOtf7`SV{-ee_RLO$Xm4WX$V2B|?~!liI(tHZ&?VEH=F&$vrf0 zI3>4OqKXX(aCLIDt*C1>bO^*`Oy2nUP&*&6D;zC6;{+QAu*aff~2zx~gY zwX+Xzm=mq}UgZ7TOzpRB*{DE|L1#8q{$7cVoX-9TKU~IHeQOPweH!=R<7asx-G`{0yf<) zGII&7BisCoG8EgMTD_GBL=))Qg;x|Mmu)()KN~k@7&dtjt7PC-;%AVq(*XOihyRUvR zJhAuCsdG3oxt%A7E3nNZA4thYg!$oZCT5p5=lWMBdzhPUkB?G-5Jl{xP5ylGXt{l9 zf?G|R*YjiA0DrHFk!x7QLk<3I84lM5!~XW1`r(!ybpgT!V4EAW84|Xzv8A4XwrTF_ z#tZ6`bAyBf6b zp05QnOdXHQS1hL%SQ%p$lU_*ORad;LF5Z-k9f33N2R7cb($IZQwB~Hrq94f9*Vo>3 z?Z>Cm+l!cy@FVO}!J_4tOEiHPd$bMNVovPxiGS=l?Y z8wl^r-DKB)_@8}eKGv1&!e;Z^B#jF~=IZK{+;9-4R&3Q|c*!nh?w~ZISEUF@kM={9 zF%Woa7<(*eVSXAODUC;)*RROV$#k$aBOIa*^`FnH(<9t@{8p9#;T*6nTFzzyHp8>J zWs`Rn`XhyG;nb!hlm_j*mBfM_N8c_j&X~CR<42xYwr1^`xb(c?!S;x<3G&6gWwPM( zp04BXXGHrFJ3^WYl6a5qJ0c75E$cs9Qk22X-EL;*XlFr=boH85HlCs717~jGcN-@_ zD(SmGFdmvSz*hL~_a6bO%ApGwq~wOfmp}e@Jfqis`d>RF#g5wgmw)^>5yHk`(o)ZC1=Q^Oa2SUPwO6EINfpP3em4yOuD^m(j5J-4DMyW@01?E!V+C{jpJ zC=XR&8px&!!BY7+YL-Ij(RQW2cZ^z?hmVg^5lD%@HreSvpVxdVYsoGA7LD0l9`I}@ zN_4RZAxK&AO}GWztc;>6ZmV}(n9G>m$clXi##R_nYO^G=pV}&j8Wl>tAjU?>$u{_VJK_+bGr(Z*?1#^b>naS$E~(bZ-2UqY&9}9dh++T2ChZ>B=Em%nbNrl|O5Wi% zrBvdEk)t~C;@49y5sj~&sv}#iDH=QQ;;*j_sq-ot0{uOR^PU^kfN_X6(cXL`Bovft z!`_!B4xQ43MaSl;iJ+-&x&0yKlSv}zD@>~mS%@ep2ix*CBzqW9YghrkhB*{ zxsTLilX6Pr(b?^(7B0^AD80j{FBk`xZr-$^pzDOM!x@ujR-zwV>25B4?sB=+QXoFLxH zY&qw4FSB^Eb3H3{)urBO_52mz2z1Bd(`dSUq-KNS*uof?q*p14@j_ zqNAgoiHWf$&YptyzES&3~SWVs)IwrcE2*)e$LH z#aWG3OHuerUsGIV2v->LbsINbI5qk5&jbk1zxS^_r#{N+IFpqcS)1WoIdY98dv50` za;H5dK_@y@V`U!P3XL3Ra(3PXt zH+tnIWEQ9khMxcOuT=Hmua-A ztZC@zJy7dYT+^&?rT*6O;{$>4F4*qM_so?wSSSv?9q7zVjU#}OugNmtu! zmlR`JpWf<>D-@Ygeemd!oRW%)yr^A!##*XU2vK5U!ZCH`=BC7RE&E@lbILuYjX!VL z{d`W_;mGm{BXirRn3&x1dT8^{j%c184udmLSeTViyKkl-`g=L}2TI(Wt$YIl$owIH z32Im3bc|?1lq@|-*VmBt`kBU;Pd4Co<#rt1*AbUi+P-w{wzArKa)DbmZy-g`+ubx$ z?6P_5R>BOfKO!j$6#wT%&Hu)_1>qg!=1KO8!LCrHSgwd{uNRnGU$KMi#c@ zVuC_~&9<+>yD1*HN;Q>&1NyCW=vrRandVfR@oGtFZBt8r@V@7N@#@c~vg0IaO-Jz5 zpIEuY!`;ckT^=71l$sigFX|eoE$%*9(sL5s2gX-q;hGLMq=lqBocV+i6jW*tp29y0p0J$%LG$5ZBF?p_TTUS~0&`J9fEh_yR5~If1hN z)07mb7?@c*pe?b5k!2Hk8PVuxlpbkVXmf0rsyJ(MK+ucvTKO?GPSMfXGRvbeca^#Z z>XPHNsRcE%h~!{t2oQ#={2B{FUmOpAb#L_BhZ5d9n#5YQc0I~DymU9p!^Xjxec68C zCA?PW$kw!`gL|)km7N-{2zGa~+W}zFvC%{4KR2_s$3f#qcwY>sn0iV3&DWAy$jz%K z=SOZDNCCFHM-T;NYHjz_g~Y3z+6E_AZrDLhb@L8$b}p%@6TR`oeBg&I36@G_Sp(^< zCpKF6oN5nl%=X8NyU?RBG%`%A+mD&qcjL#9z+4ZS*>UJkjrX`}Vwd+OzS{ANxWc{n(4 zL3m$1Iaey^uH=G<-;5NqPzoTg$fMlbR3Q%{Ym8X9xjN>ih9LpyD~b}J7*Vq8WP3&FPWXsapvQ+#`b_S-duh4U-#0wyeE$v8n28M)4gMDZ-=3DRya5Z?0%P6SLR}bzv z6y)cuRE736XM4NbQmigZaPtogl!wZa8jesPBb-QXIE0hD!Q2}|xN^-pADdM>40kx% znI$I0d%N4;JH+SV@Z+zR%mLnQfx9nk2%kPgy%)ckc}w1=PgKhMZ1tHGc-)a8Rv-W4 z6rB~%^oMdEDWH?qA$Lkb5^|}px62Mg!wiibhEu9gK% zWpbmOEo~hk)$@U*r#o}pa>KT--?+)&*A0sp78;1p4EDshgs1Ab^styTF1xxUm8|bT zX#iJCT0BN4i4F5yYT#1W+HPlU0&6)dD}|iCTH(`o{8fQ+7t_+(zuVX;c%n`aK_qex z6mM#$9(>J!@S%{?LpV$R^!SO9tR6r86EOzIdn6;XVZ&Nle~~#|$pnROSWHDp0lAS* zUed_3ogs!hwvbvw4=WXtz>r`%G+%k;c@J+N2TdJz1t|p_Xci zRjkw^S-SNHk3J4r)Yrp4J0~kxo1l>T!meYX32HO^_O|F;J-ry~!2cz-NsJ7R4fE(J z^2Ji%@m}arVsuHjl6%7{qf3Q<>g7POC9kv!@L&d23}0>D|GEg|Lm;RBlO_6k#{HX*s8ts4UJTyv!Y(v8%3n3${*zmee zTQ|v-N=SU)d19@tS16GmL>ovqgwNbQ7EkyQ#to(OU>|GjlP1)kqJ%s$B|6ABQDuL1 zNPBI6Sy`g{?n5WAWSWHRX9kp=!~2G6!o0nlae|;mk|ZL}=i}`f6&H_u*jk%D`uLL~ zgc~=kqrhZqYek)p_aLt>5)D~5h7AFB9x;L<%WBBj3ft6N~8KV2IjpNwY^e zd)aTf(yw%M_sQ$N05iR5^2Km<5HHqdhdk4-gea>Ynge+Y40G6TPdLGG5GoHYe= zF8o9lN<5GfBg>C=p-y|CF&L@BQb~jT+2B1zem0ISjY$@{Y9j(_!@v?#YIklPes=3N zY%|+zP_W+q0r(xrmPmDkcC~cbGJ~xfovpXJyF1%i zo65XRD01N>(<_pY5Jkk2q%dE*@<|)BO`7;jg;IebC{1wn3ypr~a6(FcwW-N=SO@WP zOHx$W<2{ug2%ojdMnME;42YbG|uXGlGd z9|=xGmxP6XNEuJ+W4*In)0pL(AMNPw<%6S9Q<`4fbDDdX7`z2V2T6cptc|KhuxeR- zG}$CX$qQ>cQj+7KEn!eW5i5&tMRf@Q#mKE$vx=1Zcfa?DqrV0ssGs9zrT31gAY-_^ za25TXHWLL!X+wNGor+?elaph2U;Bx3L<5-z;3s5K2ien{45)-RE)Eul8~ko5&$+-8 zQJi{N%hEp)e_UYQfp9U}@~$lVi<**>Jbltngi!pEG}66gSWyZqMsHvU^V2jHgBN0I zj#9_i9#BNFxBK{8^vC!(8f;qoG<5y=oJvbYCAT}gbmHv64kCAOf<6OmM1)l42qAdo zOqX1Q(9L{>L=_jSa*asJ4)k@354A(<(ui|lqAONzBk^;8@mLL^AxRd|?W6~he4C}E zInPnTU*DvzIYz?+Ef#@Zmb8gm*g9F78~J*>260n(`sS=H!Og5{>km-Hg|)}cg@6Y*mM#>5I? z->fA%q6AFl@`}2#OSaxhp)@MYW_B4z5RfLBtOk(gZs zW0A64{oa>@(t0ku_j~jwN$|kbodGF3xw$+cC5-?Hb=QbS;!%WHTRe`_8(B79THCO% zEg~XHhwz0d{4tZ2bPaqr!F0!iYJHXBU$8yiE^p-w;^{Lh0@0YGSYw zSNKGdS~;0de{W~BtdWUXklS_$1`vpGdZ8$gf7xPaVQg%KzIoy6DVygbU+$FL-*fBdxXU$sb@6L`Q~pPTY6;t#K?n zb3G)f-OC(OXW{qU!BX&p%6*|*&d?H?QRs|a>74P%6HDo0p=nPg_XA5JFpFssgoHAA za6ja>ipDl~Z-FDKU$i$MH>#L4BDMs%xhj7c8XUY~1QfbhVwf{N4*n`(J3JTY^b~=q z!AgQ4FS#M#7V^sUlIECjDaNlcJK)PdPhIX;M{7e=vDr!WhZItO`gl>`q^*7Y{b_#; z^)t6KS+m?Ry(rvx)vA?T1~jecgw!y(Z|~UN6JuqE4va$)ZmvqpNsrq5%!id@&(R0M zP70ApQOME$n_R3mFz_QY+zIo(0E%;B_An4GfSd?n=dpKTo=0ec5f>3c9Q||e{V~|X z*jgp9lAyyOKv=R z{gdBU4V}lnmZV6+RrKFjhX+~kjbMsY$C?^!+h!^)qdFl8k>zK_9)0;2Z~S74=1|hy z`DIl{PacIj>}#`1Xh2BaNfQOR__DM>te{4#p4)|aSx}yOMLJ7=&V-QXvt)6}EGfJf zJha@bDwkL>!DDPa@Jh5!8dQ7#nfQ=HKm`zkbB2=wW8W>p?MhJCUz06VEh|eyay!u(= z#8qBr>=$+j>Njy1eeSS~(pyhOl%kDVmWC_*ZEuXI z$p&~)Ik>adR}s@)9o>KWgM#dMk_kAmyRZL5=sxtZQs)nm7QjG;O6&@v zouCtLw-1UB-c}oD=5Diz)>Qhflm)wA`^jHE`~4I-qwAmkDJ?$q&0kM#H841F<|KSO zf>C)y3XTs7dF1lf3;Qy9Y!;s6JTHWIz`MJ$oYr)R@*bQ|fW(UfJOi5m9;r>!$b*Zjg`@AMNDpEo(%7cYC8bfnQbKT-+$&qB%?jsjZA;C#>K^I^Wg@6D@zj? zG;f}&`1oX6a&jE}%;Yfp@IbSSNRJqW1L?}h(y@-7?&7*mp@q7>O@sUYHg z)Q&w9>|+B9+st4Y|E2fz$9PFejmJn%V)KZg0YD&=Oj7p*Y+ zkDUats&Kp{#|9(w-Ezx{P;iYSJErwR3?j}^ZoBG|GyH=sV#r=>dG&en>={fZSU zR=H&6YmE~%@J`p8I7``!2@R*-`o(|0@{|Ae4e)QJz6P&L`sPjZ;d-^Z@G;? zP^*^4XeGtHr!igdW$SibNlA(IPwneE`g+~?b+5Q~pM;K`4H;Bc&z?C(^ah0RsbI+S z1T!Yf>W71i*9t2aU5bFhr^5Rn*Ibq#Z(_9V>7`4}Z5-$gQ^#fyCc?4nDU;IzUp9D| zLNQko5nveNX#za}Ulg;4OIe%lL(2!bo4hnFBoDEz@Y=8r?OLAX5t7mGpVD`9U-!uQ z4{g1aG)>};DpX;$Z9T9wFQR;LE(CV=a7+fcPH$S~4@X z(<@A}By4;!Jm{;C7Z+wwNx_7`gv48+s!8z^Pm;o%oj+1T#o;q2~U+*uOZUoLm>RiXVt{jDck zBdFsbZCE(s4UNRAwxxsOEuFEbIHKv-CZonKd~o9YC9TAq{Mq62&(*hgKW(2XDqevP z2!wI17(ez_oZ3BFBRRdhIz2t!#@1@t@@0gKu91yYi=tCJs{7zDBp3qQ)aPcTkLwL95Ty5-us3AfUx+&`aZwV zSO>o_2z@A%`nJxk+qTWjac6a$ed(+JLR^p}D9>;d;C^vCFst-;?XC^Z>o|6EGU4iw z4njt5ykuvI6d@aEOa$7@_A{vQoum6E>SV;@4rc4fmH{5cAWDxw2>VZ5yJ}=-y4A8^ zA4(hvp|-BJ+n#*tX116X=8ZHB5MCP! zD<65bCDS!Qn?Hbqp@e= zsVz=|^_EwV`YX(it!-%|a9;0`!^nfp>z1NI$qfcOt)ZQI^V+A@ty?Rk+@?j4j6S9% zB2ohvK_-``gxSH6M~kAbSk4iRg>mkQR(?n4IT&V_bUVHX9m^yy0AB(sqr2bm8OK8N@vTB#Fxw&YMi(h zC1YHZr%LKIII*9rwXSHahzmIPn)LSI;3Ws6)H3Zi@wYfGct2zwGe5b3B+c>4!B zdiVh$7PKVNye-WN>hLnUR+lbC78^6%sWcsF^y|tI${_R)V^HFvl#FV-@6l8XXKnP( z&K!z#PG($ur1Vrr$eAw1Sd9WQ(*9j-P~Sb=owr!~6=cP@dU`V%cDtmAo^cE{E<36B z4VyL-9U2*|qp6dIO+*uSlmL#1Sf2#PDIi{si&BIueT8A3#Ulc#uvD1xgu_B4&R7J1 z#HP~w5-Ybhwy-B!Pq9_@2lA^Mv-yle)u(7dZ_81jZxW7znq1s1qw%RqbFv@Ob5hKvo z8A4cUq%VV=ry(2_A%y!IQ!!2$j^lvg!Qi1_sm~Q9`c6~@@ZnT;_|EvBK%(-u2#d>R zs0giVukVZIQGj+_hdjlq+@K9o5xlkfL-8Qe(o;05K=AfU>Z%wxS3Pp6e*Eg-xlb{5 zA>J00ff!4C{_X#J{gXcoocr`(V-OCl7+Gd!r3?9i+Yr|7x?a?K7K$RNdGO=1v50Ud z9nIIVkMaJ9CTagX*%o-P-dEzfV`ob#`wv8|4OhK+AV!ZCI-mI&Y;Imb{q~&xRQwel z(@cL=57?c=&E4U|En9dugaUYw8wbjR;t~>EYy=tFneW+G>=UQ3k$Rbs_tGY0lEfw-m;58?i!F6X5 zf#LoXRyASXpl=6wSYGK$6UPT{peL}Q>fx!f&V zHo1HIF`a@wMPcH5QimQw_n2lO*Ba4qOA5nk3c63HHy;*fC6F8k!mGpKFYk%8wzU(l z2c`%#Vl1DnlPh)5#^z?`clz3{%2)5u!z0Ze@$zuu6UgZ^rh!tZpCsTZ+hja^b__K3 zTWpNmfXx)gdj)aH3<&RHrlQJlzCj{RW{ItWDU}*4E7*CO(2X!iS+HyJ`j<97I!8yF z_1i3%Szu{q$oI_B*|EQD)bRKzq^4bp% zz3?>j`mmYK>n05kDqt-M5=sar;PF5xo`loDsaosHW|kSH;#HM;kB} z&&$auPGL=3W`FpCzYfgL|Wgs^t^&76`-ZE98i&eMEa zur8Ih3cTOCEdSw3sg=DGaSPGKK#4D!oJofh>RTOWxSo=HJnQz^)i4hIdkIDzmQIW?NjS4iPaMp9| z^|k}Aj9&PVD*T?SpR;yf`E2asM`Fc;{z!B~Vb59SSO^_-ReR9<=no(~+pE2~J8EZ^ zEt&w2MlNxwOz{xwz5aHqJ1U|$USsC*bWHx=w*GNv)8*V8k~{DJb_%Ij=bnv0CELKT zDVSilr0`YUUF4d(k<$YSgm($wd~C+f5(WEC5*$nd0$b%A+00db^3PLw(XJ#-NQJOx zxfC`LcE#Dr7XF}0=0_qC8%FLJ$AN+>1DY7|ffi+SnaH^&S%s*b=?p1M3MAQ$nZe^| zJ@_ijvy@l`SvPXx5H-OdUSVZtXO)m!L%TCo5p);PUUW=2rjeKr8bD}(txD$YCkfQ* zG&EI{t6RMm6=H$nMQX_$ZP~oh(%!|wXgw&Nyl{nTKGQ5JhAx&R`!d#{V)#nUuIoFG zzSeu<&AyXwvwBawweu*r-kdI42@v9*h*}hF&)pCv1Qv~)+Nl9T?motN>B_a+b{GNJ zvhD6b$OcmT8j|Hf)GQ31;`P*)Q*3v7LTnvf$(=$YrW(cG?Jf3Owb3xS`3!$@M+z4U z;S6TK9>1dA^RuudIRv%dOBT6-M5eOJN?DB_Cz|H$78pUsA?4Hugv?}|03@s=N^WJ1 zJ;n9ilCT6y3LDIQbW%rh;v{i!h-hpl%?O0V2Evr|Q4Kz1eOZ#JtHRaO2d4&EG_dja z2#JD{L@k#@3GKcTH{&F&J7z2{E>h-g#zr~ZENvUuLmHC_1>_S*AYhVl<)3(ZMX+3n zWhL@~jLRGZyyCTM*JQ>9WM?HaE0%VEy6VEh?o-9RXUYc7=XIV!!bd2RB!Xp^0!?%Ng^6ZE%Z|6A-e{yc=EXkXR z=qwc~{XF+JqKMeM=tdAF zw*nu6aav6K3i5ZU%ToqNWTu8$lWR5(DMM9KKtP!MoDJjT)_DAhN}JYf5AvA_p*8_- zMpovAn4Ca~4@4ErRenN1Qc?`vwxe}n-VR&adj~B&!P!AQw^vtYOA))2%$kyg{DAMrfy_`+^Ck|4;oV@xet&zK1V;IK~ z6|M-Adov@hswla*|6%}HK&HQ3%^_{cM2N&aF0%v(HE|j0xXkz%EzJog#yg;JiE~Rx z69eH`jf@;LX-1N+LPvb@C^QRX7bk)YXI|Iogy>KNQLul(9$^Wv5lbjK;)$RJ7+;@r68?4r}%n)HG)xWei23N$m@C^n-|9#>kK>eG>Cg<>Sq2f}A3lKU!^eqN5q zWpZpNymBNmvEj(rm9J{cGAK%m;}w!MuF&{s8zxhIdS{pj$e$wOfokhW6gE zh4&gin2_i?iKi96@^aWl0q@|8zb34P09Zl|C{#kGJGp*8F~G!7V@+v_oxSZE*DMBj zvc(E28w=xcAhU?O`Bp*d1gTs`$$|tUa!G6awP9^dQ#09QVk6NUB8Y?*#j%bkVJ4k3 z9F~-xP^2x|g=2}zTCsYqrG*Kt&$Jj4kTF<+8zGNO4b~>{h_rFos3JC>+&3f)I~!Ac zVCoFG>7Sp=xjLxM$<5k%>@DVMK&s$h4A*LDp9ew~cx1F3rk6Og^#}-|OAz1mro-9o z$Fkdw0cU2*5q{)#wlxI@-j5YTM9`w-swls3oj7QCq$GG5JA_B`oxl4(lCb#EG9T=p zhs}Ce4TOm^-5K1aP>(G%>C1wB3;Qm=_+y5tz6{R@9?(#cD?%*G9^l@R-{-GzAd31f zqv2tur#2kG4+!#iJD&(+=-RuV-hjlvhxO{y0NJKO5AimSq6(t(g<710>%Sm@IJ5=mNq z1*tU#xt0{??rTy2A;U#R^=E$~`2|n{P!MbVHVJ)6Rj5y-FuL^XQB+$_pUJ zye;yUK`vXl`@!kGOfo4<@PSz?gw<_b^}Ao-0;t&%dbZ^ULZ69`kEU37<@uLlW5Xfc z!s;a6r)d-F;RHY4G-;1|bK5pI`;c$J3G{N{TWm zoMjZ0qWNiHBjrTZ8Y(v%8XCai-ZVOIoXl3yS@`%9PZE+YU%nhjaB2Vv_ZWXZxu`Wa zRr~dog3e;8Mk&GAV*((jLzD1ycf#0t$ZXJ=%lV2N)*NZEmY zqSt;lg{?-A*>@;6RH8D#isL^pW5md`A{?mq$6Gh!s0ov zh>(l;As^&r2I`{muJdw|i!!y>MDIm3Pi*X0A?_dZ{J*4|{>CJJO89*x24a z(3*`bPF8z4S#F$qHJr5s$wTct^XXrhpq-W$$JAw929j#{@ku&wE-qSX$={G}M)*kB zGqm&Cx!s)7!=@|Ci^eR|M5qdMaCdWRZ?0nGa)df4PVKdPn=7Kjd?z*?{9U4v03U%0 zot}|~M4s$abrl7AIvOR`?x)N0M}MATY!7zD)Kr+cj$eS@xG}6gx07y7ExROE7eqRy zu)dd5)EEQYTcOgbWl7hhe$D zzEXsNC&Zemb%w5ezF5C!We#XLSPmmm9=ID-%i# z&1`lUo8Z&arsZwBF35SKz-fQ8}!<~7!P+B zn&0tGcU1*mA5!fs@JY<6AV_Z;*h}yy41TrW$Y6=c+XtfETPHN$F4YwGC~1W0BMfg-d-whrUH^s`uD)scEU?II^_1)ab>TNR5>lm6@`5 z0z@}k5?6A!O>36@AVs9 zZaZ_FF^2+2U7|&uQmKy!GFQjvpm@=QEqxR53TxpNrDU=@%W(5@W}%_0d8GSLr}R&X zma9U8Ot!BhUWDpFIl|J)oFe7rKIOF`%`5wpGfNxyHOecaP2v;d1`C{QjMo}$T3OP6 zDSzi#rc2VlpHxqHu#eWbTk3HJREXNF#ZDK5Pn5sXF(H;H9;GbIAz`Q@Y5=qwGG7zh zAFT~O*eDEoVncJ^i^GkBq%yo{@*AZ7HU36;&Mxkr+zkYaB#~cWh>e4bpNk=p213@j z_eER{k_JE}q6k3}jm=OOT(*+IYk2IWsq;FIbN@&89o_%JFDa}F5K{kR76rEqh5pPy z*vorka`Li>Sd4dA$%W$O{x{nw(rUw4RHJp8V_DCZcNbxycFZd6kJK>Dk$YUuU#=Ia&fG$&F^wy6*3=fs8w7*&8jhGg{_oy28n9CHS$v z|J}bMIT9%`a<|)RX0i>YVQ-%EneMR3MmcFu5k)-GuA^@>WcfoyggQntQwTPSM!ei@ zSkLhhFE-GyJ#$Y_ncAU};mW#HT4 zVU?yzXec)@wk(S@6(NiWG^OoS6`PY0_BbX33PeUpeMXXo z>?k)ABl^|9Pciwb_vE`7t;Yya*mjsRHUaZ`YA0UW^X$)<=@*(ih+lcAQ39x6oX=rz z-GY!FIC=Ji3*RJ@f)}*g8mHL!b;G3LCxb=y+z)GWqw_yq2$}pkWW7L zy)6d9fjRa@OKBIfGg?Ycz}9dn;yAs20I1xfKo>#j!yNQ<*v`y?zI^A4ed-gP%CQ>h z3={|L?X2-@AOI#RZ8O?V@7X;hMvXWoG|+Ia940{^i~{)Mxm{<{TgX-)M3;)G7Vs16e~6lX zp)-Y5GDG-8`70V>S}>{6%7Qp#g-D6Wih+Ll`B{cWMrBa~gb8vpe87>j%0OR={@_!(bxawm7h-Sz5b)lhFoSr!yf*@ zqmMZ|+j~g`r#CMvj+t7dJCGTglksIP_Q-B|q{tupj;gmZI!)|sBe@JisUprMPiyvk zua~$;O*N!C@j9Lr6G-AB<Hw!kzf=ph%e=X$1BlEiYp1PazEvM2FB{p()xG zUAYet%;`QI+zL(TC!?1z_ zhal#6b9(7Cnf20YYmV8;A{&I(cnTTx3cqlSyCHJsrc#Nu9QGGA|4lM)O;SOX-LIPZ{uM$lfc`*u;1WR{<3PG3N)JCQj@(4(v z73yu+nC2YfZ5|i6nIC6%Eb<0qkx64rqT?Kp*WP}!ecyGVw(|W)hRcLPJbJ9DcQ+8? zPt$6Po6dog#5b9R72r2i=sZ~9%+avjIgT)t;??eC$S5C*C`QPgwBZ`gS?L*_#NX>E z3?d1~XNnMtT2xmu9$S5Ysj`F(m7~wK9DHN&{AY}yKk@oM5?tc%Q9*oc`6h;Q(O7it zv%j2s?++oK#^cZY2vSVT{#UEUo-OD(kJpgWcsQYEKT=4uG4dzkCz!h1nB76HSWxNQ zaqJ%#v%fvEZ`b}8C!%0*(SV+NjBhR6yt#bl5W z$S$d&Cpn|_grNM(cFl%xR%dBdbKvm0SD~#vE9(oUi$J+ zxSi*_6>J%j&gkB#%6+Kv{Pb|jdkE8OznsGPT(iYQz^~AGpunjw4+tGNK!hd|(xJtv z(kOKRnGTXnX>p3=2p=koEOxFio_ji#%6up0CIKN-Hj;4ZEhkAMRFA)i6&$_%B_hah z%B!FKjgCWp$*4^HJ-;*Q<9uCz``)2=|c<5z0nF zic$y_SOorpzzIu0P6Q9433*y>aaBVz$VnxxXf^^Q5*;KC3$vrc!`1X*Qz8GsBahKK zgOX&zv)sp&%tKgg8b=f3_yk2{!%QUbRmWwh)PnsZ(ja94*Rs1f5O32px{XwOR;y5w z#8qZjbY|w{UaDE(vkrZACg)qrP5$>YrG9D7;rT(P#0G>_UAkHxbX zyhM-Ht}9>Rte$`WU!VQrzijPn@vfq=?_mb{Ff5uj4CIfXn^Ak*)9Lh$pygQHUlM!dX35ZkVusoxD>)43B~}-lm>7*z zQJBQb!y~1zLjbmU^9CV-uyGwi1EmP|8?&+>vVGD1?jxERG+L7_C9pGf zk?kBkAP@2&^)*@{$=8{6=hzcJK)tCeO(s{ssQJD1GBzUUbgC&QfLc5RZKk+A|D*r8{L#N1d-Wf7 zPfKCTf!C_WZZtGhp^J7OIU5@u5?wB|u7wv<`5P4je^5l)^y?Oi0Y!N_%QHQi>!T6X zm4%H(TI7#X177afXfIhqj=h1dPdZ8*vS4m*79^81JfosCo6aUhWGd1bER#O5$#K`d z19a}=91wzMwjDoq{tCefxgq`$u#rs_b3lk73gG!&k@TI55K=}JF=G>mPwqfCCuXx= ztWC1#tPt3e(=?MexXKUzaf%~d(Q+J53@3AVxCf;_T<+&&zK+7-+BK^=$BevRQgQ-u zCp8D^6>u_OKMa=#kb=RPgv6E;&M* zL!B0lP1`~g>4CJC69qk&7&y^(_^pwPUmSSxSNJld319eX>Xn~O(IfE6&!@=IT>t!U z=imF|p_{+nb>&ArC*N<{_ex7keQ}1Syu7fizLj|?427Adz>IRH9wb;jiko~yaV#J! z%gv=(t})fVC(k)1LN?x@Mo)kr(R^Q5O=Yf*@raz+KsSYc)CshAg<9+DVoFV_v3n#r zF`D#rtjua?e0O^Dp}L71B-Y7kkO&*!v#TU0Dm7LfnVgMDhS!NpOxrM;oNYu6gi5jq zA>BNbi;Mft&%{qqq>I6i_waq-P>1;$Q~%7++E)x+Ay>k*$BZewN zXq@CyNZr!+jNH)Hg>Ow)ZDd*r{*KV~k~^HMG2xhdMi^v?9=z8PX0%FB~KFXeVaFf}(m_5NW)Qt=gZ`bS!u0d6?Zz`(MZS?YaKbqp$u0 zg2<_5&wcqn&wn+=QUV2okzIFw@y}=9BEfw?ALbZI=wg%33vqwG&-C77Jm2u`f|SX>J@D(%u(( zl`sbA7T_GPp{68TYqQ?!a4%m!dKjd^erzB5j~JboxAOw^Tble}oe&XP8n4IChTlgv zgpwBObgU{6Dio$3kAOPu=)U9KBa@j)8b|_^-vqi_us5^}4ns@MtKbv?y0IDUEd&)6 zlR(Hg-r|90=&R~F{vLw3@3~(bd+oPOdcFAJpBaPCBhQb&{yVZzqnEzuK7k0nT9}*E z*;JIC5}gpGsB7XqY)QIS~$oq%g7+0rn%4 zM{GOlR*5;OM}TF{NLaL5Tj$Z;y` zS3gypo4}-2PDSSX-la%ixE=Q0R~(7uNv8?ke{`xan$Xd*>A)LQAgdaM;UP%grCud- z=J6^~ahRf=$KNLy7p4t5!CbQ0vSkBr3zY}LkjPRQu~4TKY5oOyX;k^s3#;lo2dmrq zDzih8V^ZPKp)UC1%(37Wq$X+^W|kJ=k&~0r(lZj9SsIU1+Io_CJP0CVu)0rvK*t50 z6-4&{335F0oLBHydrp49fZDRAp1jQX%A%Civ=psUk{B(I(FI8Z-KilEv@m;;M6;0* zN$G70MF>4?MG@w;iPogPa5ei2oQa6wTNZX6myu8K#23glodKF@Y1(!TmktblS-<>pORB*Zb|OW3pnb;IY}yeGDpk-7Znd) z6^4-bN*Gfv^QWjp2q^UW__^aHiNgdC&Djtx2F26{A)|<9piiEZIfpYOWESE?aPAcD zG9DBTm`vgp5fu@q_P9P8m6aL|SDFBWjF-x12MM--;EfARj6-|-c+M-G$KInvUN!bSlZH7HDz*7oVst1Wc4(Mt&1NG^ zER6%82p7{-4*&Q z$|X}r$ds9x$}K`tDPeL*dxF|+cZEBrRyjG?(7#Ynv$K1cI<7VT4*uF5cLw|xhEVUX z624II`;lnJL9wv0@9D9>j*sPF5~|09NyDfodVAz(BG9=hkKf|&ienCO)3|{E0bb$tm&4F$zrJrtRkJ zA!DZyI%!}g5OjNaI!7euH1`Y_S2wv?u0@5CF~CyRWJ+#ML@;ifNtyHv6It53dO;9{ zFmAkM`L+#DgO;D|D!MyF6h+bGk-YWg?OrA+{^eamX^fM7c1#X-#qA2Wj7fsPVJz>q?q!tHilI?xNh!GQ#608hYF>ZDBx(%E+uxj-x>W&+?nL+qu?f{qpKPWQs z9(HJyCXmBM3lb$HvI`5dam1h96?=VG{Iy+)SI1MI8Bf15k#%Jvr>nWRYiNQPIlrpC zC^xAvLzkDTKH8g<5Us3e+DT16DYq;!R!z|@J~}ieEswgeyyAY z2bS9k=M3fvF!!mwAP9^X;@Qw+y_GvBd#&AJVarYmt5aYQNB1EGi_ zR?up@kR=XuH%U?3_Z0e42EYu#Krc^pqaMfYI{4zRK(1`~S%a;cnW#(t9pQ6xFy;{} z%a&4VbWUzwj6CJwa0bZ1j3I*>Ube5h(2pAU=jXELfN%jpWCj?$XZRPG+`K3!Rct1} z;GlAhRzXEICvlJyA_e8-=1B%2PG*MIMP9>$Z77Td$(7V*`7JpPoMuj&rUdHjY!~EZ z>EP!5^wUdO%a$#pxr^N9Bg-~!*k+D%#6rs9*r!MPLxG74bp%mD$);@oY3gmv>-*!F zH}&q(R1VJl=ydicXY)QiR}dc^*58nvU)54wnwFOlbNJBiggD(BhclScOqD++zfzZ& z!|<1!IDeRfP}%U7eN?HK+n@lCCsuCW)u6$#s+)K|x?(rLU^ws?aZ|g7_W&O3CX7&R zT_r~lL-HVf^W7)bZCWERnnV$Vkv)Fkcy@7xh$7mRSdgkqs>Xq#LA_n|?;TA(w^NR- ziIG|M75iQ34~46UheG|FQ-3p}s9GzcrPfT^Kx7LOd}&Q_vNFhz6Vm;pW60f5_eVSk z&o~osn#49k3h!$a1%MeUW+!A#@ws`dO!KEN0uKsLhjABhg&D64*PDpS-_Ju3nrKJJ zOE5NkCBa-J90JleP~~AmaY8Q@QTPpTyvm0zLsQ^pQF)=f^4%xbK~pD5Ca|-;eaLqc zieY`98`BCrRgL$}-H~V#xEgOBjDP1y;s?i5J~@@nX(nG@$ocA0-q)A&Bcr3sGZg7b z8X;+rniwh-D1l0Km?|cNC?Z@Fk{02`Wze{TbMe?lhvdRWB3goI+(n^TH*bXcb5~Jt zTvi2NtuVo_Ki?rM%w(i8uq4R`!(Y&Ip`osXq%Oz944nA@r%@FuNr(sryooD6)Eh+@ zO5Tp!p(zU}s_m(4Kl=C+oKNa(vn@qwxn;u&(%h&4Z3sklVa5g%Y4P4$v)s|HP^YM4 z)11Y0PaLr;AO8pEAhD-0v_J?yD7~QcmK2J}&0P15F2pyGn2wJOnLbfq0%KX!dybZa z`h9P*uN|$nB14I}RoHF94_@)|ba8icWacg@2KFo@4-a=oO3LQ43Yf2G7#fL*{r~QJ zKfo8~c0;$JXN9;W(9%GnoSLS7qVKFkB{g>=OUKL<9rkb4@+T1^9}fpIa};63207+hlc1>>eGb%b zjE3utB5Zf)5Xd4!N*O^E8Ena>#LS1qW-!tOHiDb&7PKOH3EH4K^Sr>XA=MfDF1EUn zRt=Td*QR^tbe$tiD(ZiRIJ+&!`*^cNDY0$Ia_cP;oSG#M4dIzC8RO;o+OUR5E=bb) zw55}2ZRd_2*{jkDH42<*x?z|hM5&YW9GDFF^yA-Mx9UkVJ9h@nA%Da}?D6#Gqs%8G z6-T-pbf0=m@Xj}_epGbLF*((#o*arNKsenv4~mQ+!npuNK^7;Y-`F4f*1vF^mm$P$)xT&;)6d@WO2EY(P;K;vX9y zqqm6XTU@b`<#Bd8i5Wyd2tk-eIt$_RNrHmdxD1h|>8Ci(xhs#lkY`J#TV0A%d8{px z$9tlsRztfd@f-;RQ8s*8+*djmcb0_k^=Xde@~#ak=YVi#jKTIn;H*64vqTfSy1P1n zmLI-36~Uz1Nsrhz{}f@+G!cP(byC2RB`P;@ zd0Vdnp4Cf#z$1dbV#AK_KfV5ur5heyzKN-QPc2`S8STq_1dejX#vEx2g$dAe@P?mB9>LNK+W5g&M71y_%k>-1Mk~>@qwxz7BNqtDpRt8YJY0 zm%jQ>2q?hGE{yQqWWMz&5^r1AJ#}U{W8K;{_y=Y?gmyK7EM#cO;y8HX=tcqsB3cFJ`%fR6p_CJ6FUi7`x;Vk$3y)rsr!RH=yGZV{FKzFfMlHq zZQ0Z6REsR$0dgV&PaUBY9`{5FNvRF?=ue(-Nk|XK3FdIx(DM5C9(`(yfkAvya$=N} zR$KVsX!~sjn<3h;8`uQEjGlz5lPcdqO@_(|3LsgwJw>)7Mb0u*dI@e?K}`o`Q5YWQ zdsH0wcJBBtwgrw7L-|NEeek=frgT>e(;cKC_YT%F0_54rY)FfoX&e%sLfdS9Vo-|4 zkxSyHUAT>(fMT25woNM-o55T`Wq>U|vbd9MEG{)GP9VE zk#Leyja>tz`5|sI)sqwyY)ruBG*2X*v)YA(Udm3QQA(FV>Af_wBcS~Io>J-QF2(T0 zAD-`)Gja9ujpu*z*QtX3>y&x1>XE?~)g2Nw>3*9wTET z^f07Q7$N;ff36avh*M3Bt zfKvU*U#4)>@4{~yLKgiYmuiGiKuD@k6hz8eP*f2D*kc1F zejEkGNTCCi!Mem=*_>$L!KPt1n}g~C<0^fV1Z)E1b@=cGF9V9HXJj~TpwhS0ezJ6 z8TdsT*zURzdI3an1V3@%!q^zCMxgO;>CG%FFXkX8uGz*noSq{hmMv=@BMp>U-Y$#G zq;f(Ino9y6x;vMzT8F#He`ow6w-ph@;ba;D%wxc)DvU*qlM4jD#E@+v3Kh;879l@L zm@vnonv_u3sYJa>A0y6ZquPLb+1NEm_82v8X}oEuTypK=0V>!7m7(}DeA?9ml~4uZ zqSd$pdMzsACoYw*F>y9eE=?~6YVwHf6n~tdNN)=w^8v|oGOii?Py&=6Z~X8-;8HNC zGAgZ5V55c!t*Xr3ffK+;=k&I-@ma+bF4*HZPSKfFv{PrK#&93gT25wnp060W4%aB6 ze6OFkGx;qGGeh(Y}{!)x=>uC zyNb#b;T``aE-q@KCTOB2n8puAwFzq)NEQ%6%7P(r;*EdoYAG|=NV?!DoDo6@hNW@k zSXn+fC_IbA6%Ga9`G&?Kf2nE7Bq2LGT9^;OBpna?9SneA09j6UDx(%CSaL9QV`ool zTxfQ78pIh;G^OyFRGReSH4{iZgd%cxR{L~lFKE%}B^+xOD-3+Y z2LVEobvO4!tvB-u3vwhkMrr`_p4xnpgau_~g7MG(AoMMG#&tLcXak%!lQVnl@h8cU zg(nyAI>iAVht7Wr<0!M^tgd7?9ixI|I+`A677b}LC1${-U;s15*OYnH_EN z$C07&pP+(3{(OrY?Fk&1LZ(fnR-HRO4x+ih>X5=J;Uvf#oa+5kd9~ z9G1w`A`%cJP;^1os5SagID?SD0CZz2_co-vK`guS(H{}kE1&(B+~1yiL|nyL8;qL3 zPot-a2#goczyGI8AN_gXb3dmlmXnvG%pZvjbuuwFWP`gqTTy@>x%fFGrPlgl;S0D} zb8-NF8tg*26qOB4%eJ}F`ZQ4LH&_N&!ygn$7IT(GcBC^=c`hs3g<%b>@}e|O*`*HN zmM_VV^@vF?f}qBM%i4r2a_a%XQjXSP95m_#{0tp}7|H;6xOR-sCKXAh9&R;Lb;v@H zHuH3~Ln5Q3!ttPt(E-|De)bDyzKx`e*+Jet^faosK0q9GKrS)BT6%vfn(Gd%jN#Z-JIl!!0Wr8Lf-ZrR$v8 zNFs_eMNp5cUU}YQC98=(HjX2_?6um#^Mxu#Ex09P0vpLbhd%4Fsf9Z~ZeBJ0RqUI%J3{$J#BX z2wYZC1xbh9yWpkuQ+9!&Y_fG(fUD8D_y3J@L3e>yw9Gn5WeZ_|)D$SfOG6w{ssJgV zs0VTyO9xjEj(OTu9Ym8NmU92G6AG2GyEKH!Z4G-~U^pBjE7*lDw%hO?$)y=P29Z1> zZ^Eo!8opr*6766@f2!WX+zTTE=Ccs&Qy#(`5+J|ylPSy+#n|HXu*{f%y76a8 z)-XtzUCEh{OzQ!USARC;X1n#VN4|$KAcxDWC&~g8)gZDm5CIgKvj>Wtik7Z*AkCN= z?wB<#k=YT>B9>@8h|M{05&92NQ&ve$R*bJGg5Vb)Ax zAe^Dl>8d4u=Q$@Ixj0!+2Xe>`<*cuM)mjjNyjl`I#|G2)9Y z!EuL|CX}LVOe~o>q%*R}xNyuKa>;Jv$LZsrnu!P42k_N+ zGzu<#@~LI09C~Zo552bg>KEjG8}`2i`?h}KIYuW4Lq{VW94$7@h-A#MIH>Xd5(pOkEtU$fDUAE@NU>yv%I4LQ!odubk!PZ{fC`=Ig<=J#m-}o*iXid@ zc%Sq+@uqe`hc>AI25@x1W&{y&#O`|9tS3al*CQVWeh|YELH(lfFF3$W;_HMyfO^8|YW*et zq&VR3rPKI{>yAe%`lal2;)+dMwvzV~&g`h271eoBhK6?3WK@ynZm5@*Yr8Tj4Gv ze^kZ1+$Z$&vE-4%s0^4`|+vt#&lN#!MMOJf)oaBp?{+@&jZB{kkpw$T?A5) z$Z6F|GjO`j5%L*_Y=LO^iFcEtLZAuJ81>wbP~-nZ8x&l35@XWvRGd#B1V37W@p#2P zeSW*#DgDLqh}{jL*Uyhr^p(rbSyt7inF5#F`~FFg5Y;~ z7KFIz?AeUw!)E5D#1-5!z6OM7TD+;}dD^UlN(zx_^4TAwcB15tXu`2d2_!9nis5Qg zpI{2b4abB;^ZUn=KRTKE(TUXejwF#{;JVRcydRt>jO{G&ZqMPc%)2j6jmRg_3v_s( z#C!d!Cox^w9; zgV-)g_8Gv$>H#K-lp{HH@I%2Ouhhmk&lQJ=7Il!|@N;}lf5(k8@e`keq6lPjh6@d< zxLPxS6t-8dfTf*)C34w#5I!0AH@p2Ld9tchPcq2@d{ePJT%js4Lh#m+g&D#RLh0W4{bnNNkzMD!cucgqlh z-y9I?lQrTKPAy|PJp=ows})6BaHIK>LZGd)CtXQ?1IeJ|1d)qI+|n2ufm$hx#67{e z7ne}y8&M;FBNY8w4_om$p+8pa}pej8SmHxP;#>7e{*KE@0G$uis1br6pI)H+B{;YTeDmdJ69W8=C_M? zSqSfPJy4I-a!JwoyBa~nrr1jYjKMKT9=T0IHzGOwcoNxKsguC&4GiSGTmmmaTUwdK zsa%7-g#7`rh5m{?LygDIULfq931o|0kq{9RN^-eXTKCqD;m;Nu_t1o{?pDWD5QN9$nOyt+3sKb&0Y##w?{*m+U~j8=s!jhw<_7{p2A&jKtvN5wt6khqgrc zIOzk-EKN2O|1p-5ArNRYd|jQ?;n?8`)S6pxR90*N2?6vK`JFjctHgP;!gD(Ur}j4{ z_CUcBb&+Hd;0!j$_W@Lf1k<{hTxVVQ& ztf75SlVLDjZpX306e-0^wqPk3#5;EgNTE8uoGlLHx!L-m!vvrH`Q?m(y@^8k7iFpvxB85II3U)YqJB1Fs~9IZ&v=a^nOsU|2kRl(?QE z19=ms<-_g7WY7pm13OJ4T2{6Tig_ znW%@!H<2b}R@J9xvpH3Rlm#Byy+D2={BHT8-xxwdB8(t4-sF(2;_|WE;ODRrMz%

    %~TZmFZbEvCKXe9G>hM#dSigOkP7gblfCzcRJa8Zi%j)Q{;)*U#| z9*M)!yi@Sv2pd!~pQ49X ztU18naTC>Nh>A8=rX0KjIU}*|fJ*Wkq>10lcXyon{33LpK5^M0 z&Zz6ogm7LjW*!lIKnVN1n3G8J-<6O4426sGH+>Of<=)sfx1dOVRK-HybK+1IZX6sk zqDEk*U`?&Ac;G4l2@{-n9S+@A8~;#$Ave9VI0S+-nfuodXYo07bswZrE7Ve!)=8bujjE5m_B$HB zbGptW%~bG-Yrp>ZId}yS$<5`Jn8}n#|8R{A7oA}&8l8reddK0{(7m~_-mz7a)TEGL zKC`uNbUs5cXB4=ISn#e`;-RE)+B?OfkU)Y+>1wy*ct>bVMj7geOe6ONMi;pocp|G; z3#?0Vwh&44&LSxsNXGHSD;>EhS_w(TWl>Q&23MeF3t~O!4P&%jbhy;ce6z-P8zTlt zgFOU_G>-FEh%#o$$$Beo%}5oFK1FkO75L$iD#KKCgODMD+rpV_#H^&MadAo8UI)}& z5vhf>MSWLbQ5>Ujq<-Of)6Z(DAm~NgX7hK5ehfCpLIw7NN27)b1x`0gy|xLQ&)XeO#a%s z?#Zx%F(4EMu&vyT6jG!mJ&2Jbs0j2hA>D;>LM))xWB-46KKHGIu`PKLW!?}2)H(7O zk0x2V^*-yiF`flBL$8=V$5nCQ4gL{v8*~cxmc6YR?J{^(q*w`UNevSIM+KRP)dn0c zLZely*U+dy)dg^hcqM*4xRl_1oE4y&^vi;z5G46Exb+9U~9vjr63SdGU{fxt-nIf zh*2S5mC#N%g^{@pcMX{f@iODUVuC92!w(#B3!UUtm9_MC}RpEX~ z_>cL;QR_y}dn_uUJmx zLrQ_ZPWBT8WT8{Ma2IXXT7P4FR|n%|wD!xQva!m3&fBQ!L3$S{aY!w*7?3$@3#0l} z=Zbhcqpd43`OO-iDyghMu@ky|$`4^s$%xj@@-a>XtX1&a7l z0tC*kd~Z4;nlfCg6CDa8EcrTF*=gmG#?;*?g3@)p|M{Quy~vwaC%dvEIpPEoDdKyt zMRPRL@<8#o z_g$1$Xi3S zvyIhl1Ad+k8m|q^VkIX>;7=)oMACPD@Z@B*H`Q9Gf8YmazA#b%ohZh-Z}d?SWRpm-VbJbhwY7!5=GYgDKRB;bjUiwz|1CxU`46d_zZifmFUN(D7t zlvl`y!IR%^7swstFwJz0J%S~1+5|P5VsB!o4R;^vDH$(VEo}MC>jkJ}9@`*f@Px8E zk8qrrGO%Uq0ksH9_bmuP@xGYNdIN{YP~Pi0{(fdjy}SK(Vs?5>7>NNHp4t95Cc0p2 zPB1gswpRa#sVXa?)g+}&N3JJqPpZwp#)aXgk|;+#vd&I6l64}26dI1Q-6>>(pWJgB zn}F8IAZ>~yz?-6fZEKgoy2o)`sn28-Rj~z6w+Dff;iji(Ha^><(StXiBYM9;VqPnF zN0BZb!o04tjH5u;g?I@CMIvIRU_w(UOY~%FMO~^(ptCS`PiR9lS_YluWLuDU*Vxgs z?z>1VrnZjep?jO`bEwyLQ4k*#MS@fYL^FVZS`XuH`%5U0X@tSJU7Ut|{A_m^wvAK4 zKy>Ccpb4fmxhLdLO4h+%W@HE9?coGn*eOFmITQeW2rE_SSxI%SN^l5vz2#vg)E{AN z!AMg=PUo5O#+~%akjjS(N#fMaZU;RQz(#~a<26ZCn6x6t{$U}UosOC9&gi9Zk%Fj| znBvZHG__DrtUtn*XOJnb4XKbhn@nfkH4(O1uW%os5Ypr~J=*PIAjGQinc*pgc)a)> z2tD2=jy}3wh}OUV2(zi-R?XT&gygtdx&RXrU_criyvIE&j^lk5cWWXt%Fd%p!$ z7s~oftE3Z(*^Xj56q17?XNcF|IuQGfa%p!67WWasIUro5Eb38Y$i&8t>+!qz{y3TX zn#QbtMA0bf*Q_7)ug^sBK`o;A{uQe?5Kd4$667+_6nYhIFaZxFc}G)$$}PT4?qkj= zhT}&rk~{)48XU>=GJb=D@SNSfDdEDXL!@{oY{B`igxop|D`vtGStiQOVZ1RA=dA;A ztp{GkyZ)vS&LGIl>4@IR&dgM#59-Dv(AlEsHWk=|uj z>y2O*;A+gD2WyidieacAHxmZH!_$9eY^WpF3pqpmGTw1y@-RR?Zk;r;_h4(!K=0`8 z;TjeAF=H6pHs_U`-zmcvW9k764}DPrf2S(Z0sIOgEWeovypI=i9|#{*7Vqu$p4lp# zDl=d$vW0)9Ac}wZpzCtKijhzp%EB28;;mn`>@gSxREcLHffhB{zMeU-&HGXrns9jX&s-bAW+$B%O zduZ-KEkpfc9AQ?+*~RPjhs19Y>6nFrihJ$i17zLqhH#PEZ$9lh%R61$z$_Ojc+=ie7XQH2V+ z^dTyO502k`r0`)h>RifmzB{{sF6CF>P!Pp`dal`Z0bGgPNy_LXCe(p@i~XT%Fe93L zFFhpaRnieBTLUqWkTwqQOn`TZ$jG}HGK#a7cUAk zMQ~2L_)Sm*ynFFG*W$|3Um>m|N0CSPZiGx6pOio<;PPlvR{I%hUL1T>80&nZRl=KT ze~D8%E&h9n@0=6Gg#!7962V1D;X@e3MSfd7g!9?OSuw^UKUNgJnQMVRq~uHEIO#z0 zVJp_}fEp|I4$vv!>ta%wU@!hHbMO}b-)Fw_0n^zJ;KkfOsF)>`4`dY6WCmiG!IN)g z=~Ff{KW)x?sz+||cRWdD=jY=}gwBL&IEffPl1;GF2>CZ#`7&OIf%c34v{~<5EHCC^ zMR2iF_z>#!Tf}cBY+yOxp3s9g-y7zGp*h`|0n`k);1Cy%VW%SDBGK?>4iLs1GL_{a z@O!Xw(l@~G!61AfjhZGm_;%JJ1|AR!NFmqBZCNm4K65^ zCQRA`LHMvP%pDcFNH6Ar73l-z-o7317O@G=-fir>bZSiVJ-lNPN)#Rk$@LHz>+6%XOsaQpO3 z{s+S5zHb)6yDxtCfpDHJ1yp#U56~Jo4e+;>h?!4?-a9=(59gJR8N`bP;=*s9wYe`a zi+O_{yan*PrAQYi^z;IX|M$M_WDnXMcpqM`zWs9%6{R`xyBos(Tilrkf^hK~RWFO_ za)ZUMnTXCrZch1|dR51IK=5wO^;t|u=e+nWNT>L=$`SKH$m@vUv=jp2{}U7!kDvI? zdy!i}f8IiIVf%NFXfCp;dhYJ(Zxz1>QlYazy$#{FgyKw`W@ZB(6u-s4U-VyqP#^v; z{I~aN>_uwPyZXw$A%2VVViu6UyQV+glEQCE7H8c)J&KEmbZwXD#)$OOqX>8e z02Bb6PmU@+JqAENJD%h7( z^^6*DZ${1e`jq;c$K0O`d8bjp*H{ApzYSU_|~}O z>ah08UhJczn#L+S5omDuq7&V&FQ;`sol!nm(EMv&`xp)9pYx!|)ejbOe1BT|^(+?g zS};^)qP>x(eX;s(ilH1;J?T{V#;E-55u~mzP5P64)rR3F8|!s3(VgLJdrdm<<{|fw zXVLG^XumtH18}}w)PB2|y8?U$MTk>pV^#JjAN8(Ux1p3LYKtLvj>|xx zxLK#M1qgSfe($_1)#GF7Xn?|9AvTh{KW}_^Uia@M6u<#mKLF06py7{8=%b6;_m0wR zxKf2XbyNf;oMIhQDpL5Yf~7vi)luT~fWA2dSt%Oq#veE&A*)2tz0&&EE|4X zHgIz0F96XTE3aesPr`SOLvQX^x7T_+tV^SU_=0i;mC-n}Zc-cfnMsm>v^c+P$C_2o zN#!uA5)uZv$6>;(&i17F?zH;1%lefoM$mxs@PdA28C$uGg8KB3b+XGe)2=u>Xz(Yp zxXsQ-%u;ixOy?Jyqll3qyeTv7L2azjN|tjA^0&UolPFRRtzat^G`hT7b9Y(+j@&o1 z>W7!~oJUvCdke-R1HQIe56MQ#6hyI5kqQ%aL6t!VkqjNK?R7`0VIs^WyRDu$s*$;) zHMBpWg87(63VN`qc6X?%F6{+x_5D+dyC+rPb$zg?8fVLL$ z4%P~iVY|qZw39?SN>;_(aTXhHp*s@_2(_~g6YHyxV>WOuahpvcdd1JE`qSF?4rrHm zDL8+1~wnX=O)Mlha+aev#1VEd#!Ggc9d21uz$ zP@+=s5saXGiRJ{hzu9(T$io?HwlZu$AX9i~R0kF0Mzi`^ZvOh(1WEbgJ}0UtNZewk z?U+9t#t93`HrcZiw&buiIgBSqXqP+UkP*sln|APuN{VpCH{2OS)EaLr!+CJdGS{u{ zi3;~*RTdnR!pd@y%&M1kM5LrQZXs~g-$iD|x(+VKQq|pKr_y~V?CBB2+pq8s8Q5CZ z>qO){1Qx1HRI%J*jSsMO!wH((U5#^Yj7Z+z!@t-o3iudTIPLa_ENlu!;EQ3JQJ`B7Y7Wtr!0F@Vlaq}+X@9zxy=)&14+^hDG=D>^Lj}b=5L0j zWf^C=$57z)y0QtHv((8y*o?7GBU@otGwEUoM?Bp+GDHQdjT9>p7UQbI=BWB)yV7eF z7nYVkyLz)o2B{ITH(H`Nl27CC zo{T(9iQJ5FX&3gzH1g+BF_7h49T4oPQN>)a4OfR<>Pk0sanwE8Wv0xKU0Y<7toLGh z5u%X7N`Obo<>7LR^B`7&hcS27n%Gqp#A&o>p-nKelY1ajez}i-wxfKmnLF3Q1SZ_pKk?KU# zZmqR~Fv`J?t}&uLlzL^MxpZb{>1-4Cv2+>dVh_AQp1BZr|Z2%G$zWFsRx}x{}o@6i}?b*XD5f(2Ym3g$u1^Io)RN zJdnQhSo*a--oXZ0u)A(2>dU?SQ?25;R^fDgVSivNuyB1yywJjR ztJX5`8W*yP(d9E}A%hh{Qoh;FkTwGWtqU6S683`Km1RpExqP3b40QibI_JHgztmY4 zK-UwJRcT`5zIgsrLur3-I|;3(#|U)Eq3X1U>F^qEsJeW zqW~#`kpgmoJON09^>Uw}%e&2^Ugt#CP;gE$Vt8q%W6OA|u*0*}tz7Fye$N{6<1Vh-?@!f`3r0*|vzC1=`7&$N|;x#ehiYWY+X7l{7)n(5IM<9`6$g|n;1wuCGI O0000zVzX`A^%+nB;~z zF*7rY8Er{sTefVOZJC*w84|}1gTu@>mzkM*%k6YZ({?&j@V8|pz6QY&I7#R0TJQ3b zrK2N0zq23M&x%(DLKm%92g9_k*9ODXYiPlGeJE_f8V-AXcD*qizI44g60UWg$W zwLY4l+*x}mA1zrQ@1`CgzSvJQYJGWtX7c*#0Bzx-e|2DX9W-TqeUNUE^>TmcJz4{yFVC)T4$+q`&GniM z^eoLbTK7Qk%0)Y$yVueO)%ql{+1H2YSnBPU;jJV1nVR;UxpObgw@$qleIZT%ZfkxN zM*WoLHeU3TRR62>$E&_l{nOUxboFXj!G8iDSkqkBhy-SE|>`%`GX-j~zni!RCEo;1r)r;7L`qg;x zsvEBQWa|Rux)835!j@V!>k5Jq+T{z+8Y?s(1Z3)u$LiOY22bUP#9(y>VCTV-;Hj&z zztwq|BotXSf{xnIXc6Yk?c|4t={nYTd?JDwf(LqCF&>kz|MoCLvy9!t+#QKunEwz4 zA5pV`{+;W8&Uo96dQqC~4SiVJKW@u@sWf}jNngU;B}&|dxHb0oOYpFu*=zx2wFp@w z5Nq(bXL-013JVj93F{^63gkGKDXD3x@GMbknwQAbqcZj6FD=GPW3!b;!qTW;+5$`( zin0=7-`A0E}uu$tEm1j7a7FPT>)gV*sPw~A2X1tGo!BmtMHw^)W%Co zDNBN|G)hex#^gdqnsbO*f<~i`ci(Mn0E9;3L@RsrBSAlbh~B!eh;LC%p9%l|=m>+z z!k)32vHRD$XXAFF1K4`rF3m?Xe*>Z?3U@WVuCI!DBwmbObAA-sHLfAt5(Dj>Iw^w3 z4dM}Fi||$d5mmo(oh#DRTGOPZpverfu2>YOHL8I2o>J40(7cz(B+5&iZ7o5jL0%F$ z6D0VhzY9wPaaRMFw1kc{la4x}Xethgutd)`TB`?)1BRsmIsefY*UZn0HvRZ0!{E|$ zcOrY%Y;zyq4I&>dQPyhxg6RgZN$9l1f{zey1I$0Pt+RETH`>gBN3}5 zN=z(1tXsd%iwqmd*EOrRdVju0|k}xt2@{(YZ zQm3FagOu|yNr;gq1JYL#LY9NwYe+~J28t*E!Uc*rSaN?E0+>fvlGqrChTzTE@s|+$wS|H;l$r7&6fC#=I%o9^Ifu;cCoGx z!^YFs23|)`*C)LB4*cVi&_zcL^~8{i=to--U&BlXb;>ivz9US);0F zEkaGhfmtH<1%`|ZOjem%ka=%;X<1krt0os?l7NUb0+8C!r~`^75>a!+G^oZFZ9q+K zl@*Q@_fE4Jp+26Di;nD;<(xSrGkD*h9%C+Ab9ce@xUBj6e`yi?tW72E{O_R_`sze4 zVeS&e?Gn}!)3qj2mIz`ENm!zMwLDxcO4b!iErFJgnkEGJ(qtThcG6XzO)geH*` zrsa{T(|?BuF9}9+jM9|Gl9CW6mjF^59Zf+a!K0+HoAI;zc$q!8S47@GUgxQd3`Jta z#E<_mBg*NI$RE5fn9)_TpzHdd9%o`{Zq;1STr+>ozwg|}#y-%pZg1vWZS3c6!uF;D zcrkRf6PFln39)t|XpN#Q!Q;&0!ee74?7aA}!4RE(xEd{6O(p9JJw|$33uu>BYZ{T% zG(=5{Aro(utA*gY z9AsUwNOuwkr!GGrW6fr@YE2W8nr2XQp}!9SWP+ypsrel;we?vVe$Q5y~k9ZzTP__Nui>NqOO?LYqNFBNqMu7CDF6Niouo&P*iB4qK!@)*|5 zFK145imFB~BvtKgKlJKOa$etwcP@SW*Tc>Hd%y+*zF-e==4X%^Pp1SOSR?pq z9$X29h4n}v-37xsQmwO^b&fbIh*J}eM_RqwjiTl~(3*NWGWDc0^+yIQkIZ?+J_dP7 z1eS=*Ea0WyRHZ&yxsa4gBCdpf(&ijKwA0ZfF6upoYEfo$LT$V({NjiI>*W`Sy4=#D zjQF%{G0nBD7g5|1iE2n3Ar9q4@yX8dQpUbxrvx!6rF|!3q+CaT?W)cKuvs#jVd=Dn zrPs_y=F-c0_MnF7=qyT2dffYPuZ1T8Kbt)Xz`_OXOPem&Cf1jS!8*8W&acK8)_wpepGG*P@LHnp~6R3p@|7^xk}HB*^Il~F|_H$MA|AZJMHFrxbamC^8DoM6o@%@ff4 ztGR%`vsHwP*Zh0oves=Zb>%&HTlAks=(^S5w?%7geBqVa>1&Gi)ka*?etm>NtDCZV zg{(fr&O61|%U7asHK<(gC0SRft=kEJ(;{-y*lHkM5n4mk)DoUGS!kLPn7ykq4I01$?HG!C)$P7a5henh+g(Wr>TV9n+GroLW%Gtj zo7PhWu`FdLzh*AH`&&!xnaFKCjlbOmYQ5NL|rT-bbaAE-$nqiM3x)Sk<<95RXMOM<*y z7>3oSERFrKnTAOt7^#Df1P^M$?7qax3C+g!6SqqGPU*ShBH@L9OZraYZ*}`{Zb?;h zK0BdeqJHn~Tj%$-^^dWr{v2jlO$IF@e;_oju|Q7obJ-*lQCfNiP8^$vVLH69TT0}} zZtgaBeNHqbfdqt!;oCGt@l7fm?gXuZqQ!=k); z>Z9My1jjarVinct6oSXi!hx$91?3q9mHUpJy#4a+kl04Dygje?$~XTr^X*?}kob&C z&6Wwt5Sqh#4_xjS3UY_*+dA`dmEOMoQSwYuu;cZsr1Ckz4E&0ldu2k@C!fcIP_9sro@`2iYpsW zsMw>d-`9TZgQS|nCA}vy1v?pjTd%+TCL`FcqORfIL*l`C#DbnP?T22O|9qm0M~nN; z@tMKstlf9>+YS|V>9Z~FIk9{%;g=`b7FYx@Y}(gV|Gmuo1>x>mSgR$fY$Rn(MJz!f zyP(|3D7X>|4jV&OVlm-65Y;*qhEVf~nbknr%?;)yHO&am>S@h1Cop@Ln%ZsfOjMck zBqqT~EWy)5qm-p#ST6ion)4&K$U$d57i;(2aubvbbNWzHTcBWPwH$flXEUieg<#&I z!)SiT@wscH@~n#bMnSZqBHkGZPHDkN#psQomq zjEv`Zoysq*z;VBM>Sh>?lT>pcIZm*A3|P8nUE`0mUjM68Y%HVhqG#j(IK{@&vq6H4 z5zdWvU>CEMT`h;+c>3w55nYc|4US&=GQD{ko)w9SQCY3WM$UiSdF0j1mZKTXN1JjP z(WQGW^$Zv7=T|4$CNB%1SHo}J0Jg|az|6d_36wP;WalB4;4#WjF7}RiH3(OOvQ>9v z*etTHScFgW!D%VEX@awXap75}YM_)~YrJ2VF zokyRO?4sT?OOJ6S)wMxRtLQ21ob>Mf&;Kl`YBH{DceI#7N^Hq)Js!rEWw#xtrS^6n ze?POZeEzXjS}>eYvDc3xzHn-ysH*<-JAVv~Z%UNQcUtX|B&N$VRf!dQlB*|^MDRgMnEhQCT8iFXF*iqj+iTFU=fGYG)*|;9E&?R!&(14pou) zgI7NK^V}h0fjeE9q`u23 zHbvfwzs`Z|=QdeQR@2IA8_A(w=dWIe<9xazDkC)xbunlRjVT#Vtv{Hb5yN8yD&-L+ zgI5cC&j&`=F)4mAF_GBdU?WF!aPOLa|K>=fQ3v{E+E_n9XZzWVUF2V%W@D-A`E{(4 zzSB5UkylTmq`7qPQoK@?ke0*Zu!|~d0z*OzDr#^?4~H#?4TOdI^P`gE%JzKnhZ)#E zRSun7vQOilp5|?wJ877E`4+iA2*c(v*l6zRz^%zYNn?NeT4KeE1I4EBmB`UguX0@? zTeXo@yJo#hR$~S0iups-v=-COCOCdz zOY_38ru{OtV3HUkH3t+ufw-8G(UO5n%+!uUC(hQk56o>T;)MEnIrSEVC#C0oe4#?j z4c)Na);)wr3iE^9ln6-T+1Ve4ZrE*kpwwPF04+(9wwa)QR%oh=g>1S>2vW8jj$q z^vLboHnG#YaCzY5Teo({n+8a2c+<%(tvvhnY0lij2H#y?*vz)5w@uH#*aMM`)ACB# zw18FKir%h9ao&KPFC(gSpI5jboEPIyi_q+0s5pGEzd1REt?IoLRXnar3XfC`aWZ;| z>|g&j8pbbL7J;ZaJ23!Y=cqIZ?gR=FzfUw2Lsurv( zmKmHDl$%;y+D)qlBAV1Ro|*=QCXufK5o9hCFHQJ$nM_KflU1kKob;~L`U8H_TIA9Y zCoJqf@y2U6kO7^4jGMgit+gkO%An!c?HbITyQ#9ifkF1K-t*$NomT7Dt-&#!!4bGP z+dk=*WaY)Eh_&5m>+;0vEv*H>W{@yO!3eSm_IHyCNwNr5cE_3BSAU53a8yc;yNhjj zs9#zPg+mVr@O91WI*)qYGhKp%)2Ey23d;u06!xBNs8R8<`joPu?~JB(tG5LdG!=4l zbkWdmK14N_HCLJps{g!u-?BE8mM!S7 zMXofzw9+Yn>rE1V^yRnGqH#*7cZJ;BbC4OI>&@~db zL|MCpvL+k^Oy{faDkn?9)$(LrB3M_<%}dj&IPX`SR#$e@G-}?p0kV+Rw5ZUuATo)6 zm5u$Km_|zDFsUtfwe-*fe*AXela~wjV9N)=ND*jlbqU&v5kYnVCMc;{W{sf!yTkz4$DW zYxbd77t!y^9C4yJ5cA`36XF3A{I#FY#FXwHC}SH1Kcf(G-#6BUQbfp6wEX`b zTU(S9htr5dw|{)&^S@49`Ld=&k)B^dC;3Jfk7c(_i{nxUI;%#D14CR^d;160B-jag zG*RvV@zwMEl&De=XhjS* zx8p=n-#JtU#Yb_gD)MTY+YdeeLsiGIvv2)JS#iePQ4+egS?Q%Y{`ykHk@0EMEi4rG zHZ@k{XU4Yo_CJ5)v@%H?Ct=(gl~gu$q7{`v4Zb-Nv3&v1IsG`M{Z} z+rQd(rr9%adF{fS#ef|su;n6?3P2NwN2unDAVa;I zy5#08I4z?!A82ao@Gh7~&4pbh^QcMWt3w=_M)A@FSep5x)t!IR7ixvV$0s5SEP0k4a3=FRH9Ylc*vk zmO~5h_jaa)c`FNQ>XO|z?ywWGL(wIPic=p?ClE2axH>*9M}x-dk@E`}X&wcQMUDlx z|Ls|hX3gyradkm(o*Osn4qh?X~Y z28V^c^5dC;swTgn;CKIHCcb=+vSGhwZ{t^fbo;Bno_+h*CH?2-_OI$Zw)FY`<}7D! zX{YSm283x!5V~47vlxl>a@Tm`YGt>X&{|4Vle{HI@r-Bg$?)Hgxs_cVUI2{VtC%e!P_F z>*ZL`cd2~z)`>PQG^K-s-SGKO_tZzuKR)*4cw0NTf{3Vp2@Up9C6R$r^o)Y3B{dDP zsktbhK@t@GFsNPf^>Tt=U~H_kSf%XF@>--0(FSw-hcj0P#rpj<<<-%|y!7Ll-Brw`uVoJB zOS!)ECau@ZC$SNiElOpx=&OUc#<13slwFKiLlRaWUl)p3B5++svJw!iE9Q?zyVr`- zjQ$g|gS1+DPRyhxk?<^$51YuB2HPx9nR-LA29UXsm!_Sl>VPGo+6|pqC>_zWTO*NG zSsV{x1&Vb`hOV_8egmcoo^JM6`h}{@7^qJe(8C)6v0O#%6sma}CvTsB@Am<;2p3Nu zPhbD(R`#tiSxh87Ew@l25rLg~Wi<;F#;lGRDGYFM^-M^N>*#C=Ba`FeWGQjH0%Sx- z_ZQc;m#30S;1W40iU=Af3cMLW&ig5$4|Za>$-_sKqD;u@~hf0#{Bu4=i3G* zq%twm$wh@ZQPGhlIng*dKrFp5E2^}%IR*Ak*?osz{N>=pVP0krs*N07JvDwW8#Zlm z3+D1-v&%~|@gZh3A45Y?PF%27Gd0bXnkS=KORt%KD}l>*L^eSN&uw}Jx zT850`D?zvtIY<&Y*nX#37i3%Y3f8+=o#TZXqOK$qftpycLv zc};Cv(<0O)@@*iF%;n~#$*|N;N~4lYcSQh-dJwR!FH7z2?>W?!TsC|oI+B?XBTP#a zRW!6ImGY#jsr05Jv)XPFG6?PeTpqi$p@&5ewc52+%n6lBMG+AK3Z2T2N|`$dE*wI9#G-l2Buo(#bY1UUK~l1<&%2of8nuSu%cXx3^2EipN3Zc8q4 zxZX>$nh*+JaR;BX>@>EdmS}O1A;ozw!Kq(v>aPYeNKGQ=K18TVP-QMFGPUv2u(H$w zOJhi>KQ(pu`LF9*S`#ZKDn~BTQre(_uJj9JQIT9}l9#)EaVj%MAwtGf)pNdS|EpDF zH!@m|(G(pRTNV&i=Mz~ii{!Zb_>1Gy{baRg-u~^{wa@wadERBG_5&y!7`Ci=6jBlk z5lcJU9lk#9P7YR>*+TN%2-I<9a$UeXcIHB8pnF>Veq;pCy!C50S0{0Vpf-b4-Pi=5 z2i&V9FR`$^3b9T2@gf$ASA^-CcpwH%pZqe1i)906ad)IGkrFmxKXbSWj%jG^8-*uS zXFDO&obHpHr9xLsf-(oLil_x+N#w$uel*Fzj`3_KN7qv&h|lHN z%v8#1{hAp@uL0s3iCZH;Ya(LJ;;RMVIxkR15a9k^g)YeOgbrPLknIQs6Hcm8BqVD7P7uaz0XBFhg z`%ZljqYgyxJ=nxE0dGX^lG}D9qxFPH%*UBQbI+)ryL26XN$ah@KgY$w$pJGWK^nn< zD6c8aD9lO3J7Z(Loh3=$xnm1gD#v+7W`n#-E!Gq;ulmdmkE^8jpsxH@rb3}}f`b_rq$NZ18@HR?#U0Is@ot~zC_ zF=RCgt1A|%Pp#}EsyOdjx-W02mYCOp9>qymZY~!!2^P)jqvpIsrcqzSd&x^9U^$PJ z^N#{cL#%@ZfxU&K&U{h=*ExV5i6d-BUii^wmWW4TM&+{8dr}*Zjb8fd#UIU_eCrRX z@f^ewt1EJ#ocyFUJc_#?Em9`WOiPXHJM-C@P64W2keSP9JfO@g%56KGRZs#yor2C| z^{p)(^;skBxjh5DeIp|;zy8XNGs7pQTBZieN4rasBY;CqzEEGhbaJ>JrM&Hfdw9&C z?4nY%c0|cDKK{cDig;xTwYBeP87Y(#%@c5%YI1-4#VZhMr{DU|3q2Nq=u+O`nxcWr z!AuEHz%A}QQ8j%2@=z3tgV2bwbmN!bdN)TQUUdEM&vWNie|vFcLK>>B(&eJOvO2Jk z;%`Gl3EzWuE-H#63{slb!NBY~4v9`6fviD^|%CBC%s$SvY z=Itj@4c6C{@4obzJSC}g@FF^ZSsd0^SIUKP>4+bE^!pk3lIACb&UYup<@ryB(B*}= zT|{3Z|1Jkj3GUM*=;~vwcF+>0EFr`i%~uoQY8F{7gjF>}mld3M-GbmTxY#gAS8d-U+~^R(mL!(; zowVAywV<{;DV7fy6e+NI}35SqqiGC?P)J> zt4{4|%)iYR=A->wzfvlu|Q=sBd2xPa+5hyaq12F#0OQLCRjVm3??>LGJC~`(fc@ebm?;p-{=a%Ny_5vn~p+pQX&A$^Bp`0)W z$WtN3na?31g$&2};=H7a=HAaP*FE*r(@28uzxAVRk=3*7c6f#faI#`$Z3PXAZlRc1 zS?SP~1Z6JL&*`d)#PrZmM&ec{XicW934GNnUQG-O6CtZX!D{fRKF5U>iwH`zmDAK{tr1nVW;dc39j7H6 zq&4{d5-bJMsWnX!nntP2W#pwcS*aVAMpSd)5VIvT8`?$2@f|+*(dn^#X0ZKa6?uOx z?O;9QP$TPT3-@fV#5W+Qe$SQKmd+P{I8)!zhcexv-Wskf`N+$^f;8ktr&EQoX?6Qt z_+=iV3h&5jq(}p!>qBB25Phv4y-+oLu43?XS^ueoirp<;JYHe+WKyi9{GJ?H}VR;vXOW8*JnnRrl;=F!E{UH&$-hzgCh-8 zcneeMbd0-^MTwI#^3w8(JNt(?j8I%zSWzRD=Tyeo?V{x4u>?7T)$w-QUCC$@Vnrr? z^YdS!+Ie{Q7z8eclA@Ygp{iNz?7f$gt&GWNJ(byXQ1eW3)1yzev2g)g&d0pTmo39r zgTN*LU^9WL>+Z&YRy$?2AeMlNHOyBd%oU1j$ zttP1aygDF4eomT{j)@`&kRHDMEoyXceet)%7@nW62WDGxq)8|!#rSSdaiy=MhD@Vk z1b0@HFZvw^PrlK8@%r0u^bZeI zwe(gOCxb&ZV^`4HK^%%kZ8?1QqshZZ2M0P}y_A`qnUbXn_IF)`D5N%DfBQ}JaiZpy zNegb6yp0WHG+WJPf4IP#TXT1ejgFYV6FX=3_5uc*>R+6foRm=zNRJF=N<-K(sBnBD zP{1GjW(I}R$aIE;hr4vSr;k4W6neC7_m%$9am}+@^bF@eTP>H*^ZsD;`c82`J? zBNAODXq;eim=HZ1x7&q~$ZLGlKu`=#Q;0o~fxCEWuS}jrmbV^y{;S;=-tRm9>cE*# z3oC1Zw36z2c+^3b!P73Lcoh3Na9kboE$W#DNByJf(Aoj3*o?;g>bY!<9Pfy#(D)YM z4WnjY<%1>`G^+ml<7+o>+K`zV1!eZqH-B&4f2*|b6x3eT$ocN0FC)k-&niYW4Tf&+ zzVLy5G%i(U1h3hB@OY4)YZ!@~6wOS}FDCP1Aob?%>m6Ck&gd`BmK79al{Ivnc;okY zKA6Emrv%My^IsQub4%-kHY>fMDIM%~Dx^W8*wn)67Pu$Ei9#5w*n8#E>e0(6n=0;C z552)j4C=Npr4>=%p^HDPuPco$-CZ?yZF01wx~gPsxU*Cq6iy*?r1H+*ZhBg8V$~EX zio>{Zs7p#piYcmYEa^Xke0E0D;p4CV5>;l0U;OFZAProY|5OQHHUQmuClK1VB!pz6 zF>Ee(b+gv|Um^j-5)-m|RqTBst3j+T3I(ens+FCl7Y8kwAVxrRE-tBE4se>8+WbF2 zO~WdaC^8MlV9o!PYAyFbJ&qqm97d+Z2m+;r!^P>MRU39z#@c#$x(dV*;6!M6cxqa* zDus2ho_?}}|Dzj~(Gj%jbTW>@IND<33g&P71qMY+*dRo-g!PyI`pK7{z4i7lW?ua2 ze=ofAYjAXbjk*bh&ErBZf|Qs)iiNgFS>f<3O-D=nPl9}Ely*;}UI{5xq&b~9CA8$W zW3Als+B$#`$yaRf&^ot_rh~P){KD?(o!d7z9eii(!iN}_hU}wSNR3~~DXu`}YDsl% zaqlVY^U$gDttyrVQBcMN0cq4`FcNZcv_{r5QYM8`#4~|O0*nuH;{tsowdLhS74=OW z^?8`)hRWgjWSWE1qAM5u>tJs!q1rMc5=shEtE>%gj zg1fgLikV~Mq9M7e7sZkLC$ zrtx*Lcr_WW^E9jOgsX9aRX?)lV1R9;ODl%XRt}vFjc?pZ$=gBB+d<0R z9-g}`JO{lri0d9{=JwPis`AoCFMbil@tnH;H4=VOX~f6Bo2hPSEa*OoEG+7Qvsw<7 z4V;_0_Jt}ZIfO(x_wMiE=o=pF(SP#otd_&uT}jV)$c>`oosB0ci>P*_iCH^wyR)Ti z?s`58@aV6 z6M_Mr%S5q?0guBiP2^CZD-&6 zGdHsj&-qLzPbMU%7gS=F#vB)M0<=twT)y2BqOVTk62h&~tkp(YbAIxM__|oU-Y>Em zY zE+{`iX=rwoH$$9&u&S-~j!++)SjrZJ6MJ%edP;d{_k^|3g=;sEki(UsKGx8JD0>O? za|sLdNKH*j$SCR>*@s*IV`k>}KYQoBU(F!*1}nkFwpJA2AlS%Ibl@S%hAu_$$>l{E zY%Z%}@C;(GwPP0>_FQS0xVoLBX6LrBoULKm>U>^E790aGv1E8`jFi+0F^Y$SicPBC zhru!x!h{SEp-G2PQuP~O}#gz9BTLl{tiZQlMt zC@F$w&B#bi&MpEtXW2|h9ZcC(}InSb!I_nQSaHYi=Q5S`RDy7-z^B&4XU(mmqS0=LYNl*4_cl)3*3pK8PB%XT!wR zj#~q)HIA~DL#$r78p^rq)~x!X!A1&JJy>0_6raYjbGf3mL~@)kJiMFc)E}+Y&rTB+ zr&-|CUJ689YZ{>D!oaKvD%0fiO^d)%PwfU`t)d74!gr`oL0h4!_YyB_KvFm!9^$=q z%SKnbjk`Q3Inmx3Qf~xiVW+^%7~Hb{S={98XoV3g0e+tF!bPEMY-%2AJ4s>wfBV&| zJVp?O9}_7Nt@KKH&Nq$0WWbfz#+$JrC?m+rYP*dShaLcN1Gd$TUv8ef(RujAo@1}% zb)Cs6t-tu*ZzuZ8HU(#H49eILm;o{R&?Aq=#7NjQe`E*CY8x(p@;8_$LGz)!C|XR; zY&n+EbcCPPuO_ZEDV!Ip$X3Z~4!-cinW=#i0H8)0c6}%!UKCV6@jUXEnXS`^A zj|7~(NsSZD0tmf598h)(_QSXUR_`e70n4BN@^3$%nSmc+X-;&_?&qVTB0wx=S_hLs zLQ#*iyEo1xKt4DSf$nnz)$9}3=X6~z8o1_RyT;DWcK*XnR5M}1(57N!$AwEo^up}8 zf$pldrjm~4(*CZh-i`_>#X2#oyrI40hyP`_?U^LLTZ$wwC^QU#bi7x14qZoH z!r$kt1GpJIsMtbS!s6_-;0}#~rI{NWUtpz=vPK|w313Y(o){%tiECD!WHlA5-$B#> zI|*kx@3wN9BsvKe)-FFd4aR8=>V0gmP;L?{pw(SHYc@6Y1!hh7isLTk^U_eEULj7o;5kQf}7bZ%mJ!L<0>X0;PSiA!IZ9X@AcX}x4lUsE-MV;k}OJI7obE>D&o4q z;S|)Jq8nA!d3>TN>gGt~nGQC9UEa{KZ?K|%?+Y48VsS)P#BA?kiuP z?cxQp;!rT0pAhEd?l5%r!-@=+9>KTtCaAaUmctj`{ZHt149bR*V<_4~L;OMl+)-xS ze(2TPU;Q09;EAhW7WSNdV)Yg)stS^NOK29Vdrq|T{9QM*0=8udtva&&7VUgr9kcn+ zJL|UEtXsF{=qtaL6bxg7$y$~?PJ}ath6-hUd0J^vMtgT>OJ{pab^1ha;lZPaE?&Eg zlICO0Oq}$@RqX336OYu0;e+AkYVhv*K)YDZ>O?G2zAigl7sytEWHke;>Vy1>S$3LXgRrT zTfLvz?gK3g?P%}E-s}`QE7wML?b?P^s5nnuN%ZE&UyC>)jMPqcdN)5C5FJaX+Mm&S zGAzggCPZmT;+CnKbVWOtO_qts%BEv5;z6MkAPN@+&=*5vs+HkBWD%0D&K}-Rtlm0( z>Gt^#{(I`?Pa&XVMWKNqp@>Vfr~!DC3{?rjzewdmfNop=RNLV1ZC%|5Hb+C<2wxd44|b@ll+}NMTxpmxsgV ztDpWOO&%HO>yn(6k7K9-EPZu|+1f_x`(b{C0$D6n!<2p~zVV_&6iH2}6bqi6{6MRWi}qSe_Wer-XWikw{#60C9*m z?Y)MLVbhO9V@G4b^wCL#lp$x+a*M=~;;#CP;_3$264^3~^JD#ZtZ)QxbK8%V*VY&J zUp(}}PjGg^h>&~QuUqY-h>ed&@l;af9z=0BZ{3EciaMb0KlDgq#U5lI5sucBD`Tz> zG_I=SSV7nEf(*%-3un=qa(Y-fG296AKiCnMe-%H!;g0TN=Uq#VUJ8a&$>Xc8jn>qL``L<5dmA{*hwH-OB9?in^;mG zWIi~Flm%HpZqCbV8bwVLgr;f8G=i5V!BW?+SJ`wlgTDiK8z>0OiSiEf+#HjVY2`t+ zwz2jh3kNF%dFj!x#etB5*SV9EgF@&6kq7xGVYuZ+dsQ_wzW$RLw2-dyR{Z$yGj%O3 z>-?2SXF~co^GXq26z2|Pw;X{z0z#t*iY8X>Y3uI75g-1#uEBzw&T~ptIVy<&fM-3E zLFZbt0lEG{2j9%zw$V75V4_=gz?)~ti zkHH!~qHq!k<{MwmV2T;`Z|}=eN$nxrk$OZhVE?Ue55MpuRA9xG?TIg+DD6M3UVW!Z zX8V882#co;v5RmkHpY8f-P}>0N@j(*zM9kD)<)7(+K<#zq*NP(92!$SaXy3(fJ$9=5?{}IDf#*xr72ht@or|l4OpVrBoSKN@5(THWs#-1JG)8U`$!-#%rarBCPmpP8 zST0nS+DK`UAEag{^A8-ug#pKV5^xQwG(E!wDB9#QLMY@AE+e?1p%O|31XZ_p`e!h!4iXblWynVjM?t$(MLaxmbCl7FI4%m9 zYg^hK9Bg68kXurjU(wKU>|IQK!L-+t?Oddy*`fAuOx&{WX~42N#jj5lSe6%yf-k1u zMpTO7Jx9N9)%Yzq2qN{H-F^boc<_j|3HF~&QKM)!9FptVxBdhA_=`Wy=qKpCyw#$# zo`+#W0Jb=H&HQN_a*{F$v8M7>hiuiIVVx&f)etoVPR5Uq63uj4oSha1CkE);Wv9W) zAmhMkLTb}M0jx{T z%Fnh!?k;M+J+lY~2z-(w0N^32gqaST9)$8ycnM(^bWUo-m5={Bxn@5z#D3e>P0#tJ zCM74W3rIg$M`cm`esaAGF+)@Xp`JEAAvTm91zlA+bgpIJ&9(!#6?Oaaa+Qxh{zMQ{ zX2&Xi^(Qkcclup<=^eB%BHC%^?D6QzO%FZ%D8iMFPL6=k_tv;znm0`IVM$08#NoIf zPNBdC5BBt!xrPuWY<({G@l$1?0|mhqDm6I8Bx}?G5#goQZH~8cQtA$F-?k~LXw=Qc z7QA<}-y{)Ip?X8(n<&X`apilFwZ%;G-3N}Ak6e?5Z*mFZz+Va4j>L;juAYP=#7=jz zx9zhCP@~K$ou^LprqmsP21Otjt9hNLW+$Rg zL7t-X6(=9StwxXH%*K&Zf^21dZSnN0zdZ8dkF#42bsc~E{dZnSZ#qoo$ChXC&W>i^ zKHktZ{eIEF6~we5CB+e<{GJN~CG@?OB-lEx*=+UtM?XCK-hcZ!u7yTVshvto;GgQ? z<8*7=YxONmci0SUKjj9m{Dy`RB`gvzA^tyG$@P zkGl)?u5Q*6`P~uR#vHybhO43EtAVhvNmwPAVby5X72grmkmv+Tbr}f}VCUWGD8!8S z^srOE0LVZ$zjKiOP_2c*iIQj??9{0^O#-J`)FhC|Bt*?+P?-dOkh(T|X`dpN=N((N zCp&?T#349=>JLH4cDUO>hB~r~5u2SQsCrHd$={w#3PK^0s=NxhQgsrpU>IGS>5T_Z zzWyJ%sbX}tMDhGwT^&pElWD@Z2#J^?h=+a!PM|(Ly}MNZZ?LcWm1X&xg&M)_?z@yQ93Vw_|qZQ_pRci~R}{0%^inS7#f# zIN=8mJrWx11Dn}LAA6h@?t@TjV>U&?_ML;GA60BJL~%#2aKVNRYje_M%1F3Cu9IYD&F`FDQZdHmg@FMiv!@5S=r%efsVVP2nD zHHlJNSQJ6W1J4>U>cA@U^L9p<7u19yVnqHBDY03alzHXTzay_)+tTs=F~tur<$rTA z|Lwzy>%-DBUHnv$D}0@fH8Bp=k>SJ(sP8*?5M~+(q=$2(FgXr!Y1^$&%OY6MfBC<^ zoS8vUbZbxF`hava3k{zA1oC&!wI623lU|xiKHb3smH+!P-<)L@famjjd0=cRZV4$` zGk>tSyUB3XOI9tKl{i@m9$ocF)fGQ7#7;sEd<$Ds^jHY#sjYpGMW`@IjFsOwo@dZq!ikNk#@{NCvJ%= zzYGPXF>GfHu$0BbkohqbIvp9f;_CW{cx80S9vs}O8e57or6a>#0wEVh%bI#& zo`=9DmB9@3a}|>95#SvyhaPoJjuW)D)}xsDn^z}b2aI=b_w}DaQ?6O_+{n52K|8#n z!Jb;UD^!-{;#RyTP^hHvK#YH}wX=aLz4rM`U0V;Tb;NOL2VeN*o~z$hPrQ2Y)>k8E z-hsVhX7f?B03o{!DXbQwcao#Mr2`ieGK%9;v)Q!33*Fqw8$Ur(He2T9)&dy{#pA*&b)Oy80#o=*iKkQ+ zA&yH8jIOJ%QU&?D9c^Ns?-e6j>*DN?kgmeu7oUKj+DvuY5*4RG(e)iU!N?#g6bUFY z0tV1+qMqndn`iAwlO?5tBB<#_Ns+s#T9`kcrZZM6YV5F`^qXeNg zM{_G|eFA)4k2f=rXFc1+NAx>FK+VsLZ|oX~lkqlfT>tQTw->+uo1$+2_@&QiqIf!! z{^NhlY}mA!M5S<;VHmbrGx1Vl6vx4C7s9+q_qJ7~Mv3Xa{O#|NRE|x{gIymqI*gE- z_q_yCX0;wqsojs)h^ikbejvH5tN^Dk-5oVhLwUKKr*IksKSdZv zoNQ$vj9f8twWGNtJlMqJLFNQ(4W>CCSa2>*Z7ze>H0>+9sNTmkWa?|e z`>xe*LB(U7z^71Vcc7lxlo5a-XaR0p@v}eJz(PxgEu#>%nvkKIK(0?@wKBp3snhuM zLbMyge*pRwHJr5>WS&fpDWRECPk6e*Ft$u3$3Yo-6pTz(qzGeE6XQhDCF3!r^pS3YOu==J?4*FXIDGq@6IQKS_W z?Cn8Lt2S<2$II&f-VYvDH+AF>L)u~x8%l^Vg$D6n^o?jBilX27G}XgM!#C}tA~mR4 z?C9*OI6DNZ0eEy+R^`jM^q^NJW6vy%>XT7#OmX#X~zl^V!{^3>LS5& z2ci#x?lhX6gv)D5&Lv$a<|K$1HR)L`EBk5g&!aLr@#X*{!4<`f?g$yGFK(Qv9i~JeXk|?K7 zvlH}jDw~gME~AAJJ)Hb*DTmOW*9*4ET~{>uoNMv$!oXpsm|qhOdqqx$-|D-)44UFYYt78Ve8_I5aXKzE9b zvoBuM%RiYZt!-*)EQfZFmT*QV_P`zpLt6_vkKz0yUrsyK!9#SK8su>8i2e9%r>nIbPVty=cKhoYesl^tcZ(AI z;kn4k?1SeK%A~7GacUC{OFufvmqHGPZT;|2S5Zavp0Xe`+dTT@v#7XE%`4e`<%h7^ z=q;pzqoqUF(i)FSRKo}w!|4g8zG=rriMXS(RrR~&Tjz-cTs zjs2ckBrt11Uh1lQtcbC7cX!6Eih)|B}_^^9L-V20^xXuc$o=l zIbQxDB8De9%pZaeoI`;R3WyS;7Q|wXU@O(hr+>IaaBj-Di5lRkg** zxQ+W>#pi_r$kh$%s6H@bMda_pA0aFmqP5)#{xUQn$*i{g}^ zqZIK5VNO3BHZJx;g9`4|GE493p|u6^NpM&CC~G8Q&4H_FC+BMzDDL#(^AMJ*e3ws zp+Ho#G5iGT_gqiqY-jqcMIXg%ELWWkT_i&_1Vs)NlfO!m0_kc$zaC-EAoL}C`>N7H z(CY#@ILA)Sh4ps9s@{ueMns3Dw|`);^J@ET&tfhqWaXpJZrWz+juHUpd*pA-Uz0R3pTF`NKcGezFRbLXI;#Gr2jB*;FnczVvO+=`YT``@4g;f1KBI zCBFJFEwwMZ?YLKDtqZ>bVQ|@?m;NPnS_5$rT7V5_gNR*UGoSK!oH zMoau#GPk7(-$es~S!1HI1bMl5v%9SV7y??FmjM4;)NLlD=PS9}`GFfi3zo7Iv0P+B z7s$}KMs!JrB{YMD6nPt56ksh2M_icsL89d(koH#7CE;71bWK#patrpzipJf1Lswh* zKlRx65zj<6(Z$pE*_F@YR^Je+nt7a3Xh%p)rX&?(zcxFCAr`u2&7-&p5dF9B{Qwsv zVVkl9JBy^&KrA?lo=YT3aVv7AfU%Tfg|Z{4RcEW`(!_2aKK@3bQUAuD@1yn?1jB%k zMGr$O3!V&$p)jw_ConWd#;c#W86NDJtq>tVibypq5hT(`#8p+|iMQYW z<;>@QoFP#tFdM3DY(YCFh_$<#H9C0^X7N)K{V3n9-uoJSi%z`utFv$a8oo$Hm9^fI z`hABEK!zeAijy1US?8*AQC|y)%Hzce0-pqNaAsDzR3@Q@dBbGb-)%ceYSpG0^nj6z zUwZiXArGBee<-dTAB1|Yi>Iecq=?1l3!fj8pxp)a)o&e=!+>}E$~Vom`HyY%5XGe- ziVG77oV9?UK=KRU%rx$Q9TnFZs$yYGN@34w{U}|&TbC2krbE{pi0ZkoPQDr=UJb$3 zGGrxwz|Pjwaw-L0^_#{pXlWjYN;YmHZ&riW^YXE(J4Y4vrU5dRXGDKxdK z%sad^Y;tA_EVVVok6!o`KT*vO7{~p--3Oo`k<5dQUt(fZEQWrN)U?Vxm7DQU*h;}J?J1Bm;wz`mQW2xRK>GRF95mYE zv3lCdKl%Dcur3-n{Q=rtP?Us{-8c3pu(;f&eJ}jaRY6^{8~#2JORp@xC!*On^ja3T z+9^vIu_o} zXk_Xzky-lF9XRtzb5(}g+O2aGML-yu9bYktg3Px1{F3TAv^gd*wyL5%wuWXSk*0~| zqOApd%_^==my0vwX|po46*82a(SzcY=+eEKm@SNLNxr*|H8V=1ZR+>lF6le7#ySAA zTr{#WxAiboCJJ29;1MQBj*W}ivTd7#gFS9~&MIKjmMz#UU+NfNbqMT)iK~nC8r-yD z)gy4Ag$%_$kxYfs0v(@v{09)VUJe`4GYTHVLOreiAkBLNjPI7RlOQQIywtkD?_ANY zAh(S^6fykpY7^|hX>7@+2B6NUXZkHnHUIH{{ATRZ*YG|>Z;6xDx`vMKoVMv}XZQ9@ zzYXt0yjL-?vh1uB_zzbqDdgmy=~sXL;csWY{^`$Kd)4hLVIcu>d2C#q6pVz=EhWGn zwBAKk?I7nNmW$5_sE$s_1nOY;Ko0Rl7&*P5s=Rrk?v6p$E?yO zafA>y5s3G~#R)iv21V2trABz>m}D2h@Ica3CeP?C$ z__SQu5W?yqyRbBxZi6H%d?$`K(H;nPnu%~D(QBUkB}!Qf@>L65iIMgGVs(WH#t6&7 zPPp+A4%liL%=w+}v`n=2ev8ig0ZuJibD4xDVPtB4pNP%EOb!=v+m5Cu@?d~|poWBk z5x9zjlovkupL0{yNijT{I0;!d1Z=BQd}`A}F`tCZVa-BR-PQs|<|NV!D;rRL0^d70 z*KjlYz*lDv-?D89eXRo zRwQGc|}l>+%YSSiqrOr4C>gHPOqXy?-&a`eyCB-mlV>SIr?MCcfF|G~qL zN)ppCb`8G1usJMBc>P- zBl%&u2_*O-^o;I{SE^caX|);Q6^h{E!~liJ4G-<&;utGs<0J+;5_LwPY;!L4KuvgM zY6w1YKez1|!h><^syIKSw9Ar%21=-Cw1tNhDLhCf6BqSg#P}BoP;O@TR8@HIV1I+c zqcGm@Vh{g+uL|z{x}W4GMqHCXdr$dl8d(ivbxCb7akaWg$pE63F-9=1$d*{l)=b@L zk$^41G^ZJ&Q+rv^Jy4vwsfm1pfe5V;TGL2mYCW+{;JGz7l)zpb)30ip+hSv-S3mt* zVRkGMb+6-S+;HIX?bj+(Ly_LA&7`$v26PvYRhiM{1t~C{*FZEu%D`AL9-o7fBD8#< zD3_nz-&HE42ih>Wf^AzjGW@n+;IognJA8Z~5K&etubPlYGZ7GmXMGSuvdxw3;LqV? z_T#<~ZE(tUb+$XwfPtk}JKU&1?{n4x04L37^E`Z-$V*)`g)83Y`)T6vUBEoVbS%dOf7KCP{}5ci#W@Ul z%F*u9x?CR45&&J4`2d#4B_ketXO)geN6=K&Z5(EJUVJFtnWX9|*eM|Ed|<2z^HLC< zO>a7c(JKRIKNaTg#PS9lVs&eu7M+ZQuCpfwq{&Ja$$_5(c@ryVz0utzlA_ zAM1KMAf#m?Y{IGylfC1jY`hI$VsV~2|5adyjG=0eTrK;Z^u{#4dpP2 zvHYy8R8*8;xXT^)`Y zsuGp-oqpqFc~P9FMsA|Z6M7dHV4Hv0f!?FL34k4f>%xSS7zz=;g`UNGSTldodMXf6^H1x5@pK!Nbi*W9H zM^ms(V=e=KyYm809h-m)1l$iW>DtT7E!<}p8cCTHKW{HrRJx)N7xP{)&?c|*Okv-J zba@06IpV9h9$iD;k=4+Y2(c!~6EkB;(PB#b(RY{>e-y_;HCAK^aqglX=acpz9rRkaQ{yL&g)7C>vFxEe74LNo;n?a_de@^`#JGr@j&)GorP` z&yO@)nk+Yog3}U0Q~&P=opbOcs%!@K`d|OWOlxg!O=Z4P;@#I;gkjp-cWj4#Vz3wt zMSDbiDmoDn8ZC}?Kq(ChL9M)5n^r%9>?02G>G?&lJ4eJ-93cQiB}tipC64kqQll{u zhjLnwBQLX8CL|+=mr%JkUKD`bo2u*N=YO7wDjtKo5aPN|xF)*0Il&YOy&?!#CRb0X zI*#I?f3%SXc?WMlv1<1^+aUDJ3>WyJ6c#W>Cbcro7B#w|B$B)1_BkS|b!v=*en4io z9M-bIQds_Jre^%=B7)xf;&0bJ{u8dONputhZ9qLRKX}_0`)P|7+J4|s5Jo2B`QR)f zz}E#b6vh-N!UF%2s`r(TTpv33>DZ;ON{6o{R_%jpJl-GZ`^=*1xF`W9)Se#dUY|)q z<0iOuv4>~1YpcDTRcz^Qm_6ZrgZUBmBg!4Xy9bCuug^lX4KZ`@67Ip6SA)IbLBoPP z@#yfGf>8!KeZ`TH2;{=V80SyP@|cN+NJN#9idIIrMKc{R6&1dWa05o)DvEoH>$}54 z{or4iR=+QfvFoqb1jLtxDQhgY?>Ut%##-HoC9GeUk*v##)%nL^Ef6J?@-%X0=knz{ zwa09A>P`zKJ9Tt(KJehQklb7btvSchrOoD@`6P^)bhh1;mS6tX!Nf;4xHpu^VVj5U zOo%x&UxxYFB}Fk4V|elyPFeytC5~5^DSPF;&*7>Aus!{>+CK%VsipF-jkEplRRd*hL zFSX$)To2J`3(5j}xUYlV&IF+k&SQ|#WQIEV`g$QrjJlr0%E^R^y>aCecnNSq0D1-4 z{g|YthNz+g!2lkcl#rB=A`1%-4M27ldqXufg1U$j!zcsiC7Ow(hz93mC3m*h!8=zf zB!78;hP8S9O3WNprl;m6bKoH8<>`h-*bVE~7WH2lD5h%gnG)$woTK-0ON%jk+30I7 zWtSPQCTrHkST$6&q&otRgb*$*r?@PF>8%r@OC)A}QS@r7fV}o28bBr_ zM7QOU=U|BtD=veGUN+C*Z^h7AL{R6b$zg=zva0i_R*oWTD;1DFJee6K;bzB$A)t-1 zrjD+jpZsBlFA_!a!V4;@A;c5Y^Wc5}h~D~Y2GQE2nuCZ3z~%z>PngUKEr@|`I4@Dj zY0A7J%DdBMs%&j%h+&v zM2jsb%OLypj7}B}-iQ>l_ulx)bPMxd(s8*T%S8HGnzg1Q)?B#il&z*=)mW*ji>Yde z8fGU!Zv;!Uspzk>HCQWTFlI}HodnxDmm||@6gy3;rzI4pT^?!@MCQ_1P-{-Os1IgY%LFHHwt0|``l3Kl(dV9>YK z&aD`W_S~A)k3F^0C6H4$ez~yw`1GNH1q9WR#mw(K1>FV_20sT7t9bA#l(AA(fkdo^ zh!`SP+sdlcS;pp!Dhx<-_JaqmGRnJAV)uJLA zjho%7@bPkTYI5{sWf;z5iWH2HARj&}7=0{>(cFVwDa|D@8AUZ&Z6}pY$K4SS&- zed*`<5xX#+3>M_T34|#}n&d-?&^XJ-mrtm5jHCu4rZ_o#%jOLyU;lMdW}%CtHA+v% zuKonYpX%``k3J@4xnU-WOrAM?>KFpKICkF}iEQZ`Ev&3ZZz96K4z8Xd;o&w`+xv@1 zSNnzgYpJhJSE^E&G*R5hh0kH8lN>KVj1e_T=!s0L-!IJH^XY%h(9?Qpiq2UNqY{)d zp{%z^mBwL_qoSqztHaaV&cipSV(5aZ^Z1)TpUG)EiuOlcML?SC5%5H$TEq=UM3l+l zmKNurDR$u0J6AsX6J#7%7*jd{?*h;wu51s=lx!G<@Fena+JO3Gbl|WvhbW4ktzkKi zjtq&1IKCPKv6;tTbd%zDpn>- zRJkb!`tu8m3NB0(RgB&!8N8zEIiJ~jBDwBRRLLGu-Y_?_7yU(Wj0#U|LE05+9_ksv z;X7hfQiFOWM0Ak~)ijtwhT^s3-9FsRLt=YAJ~fwt$)YHGv=2=jKKas*)xP$pS{Xe# z-VYu=%_q8r0c-?l&7-U-a5a&vmc%N-@b3bM-eKpxirJcIDs(sBX%L(U;TqJPrdA2v zQ*bU;oED+xGH6W#$TZALoPN$Zw!nr49T)f)2|qY0;HcU={T7r^Wn(MUl`XRf1_f%1 zzWhNPXAxjTbD=Oc&C|^eg`M#gQ#e4QmZ!L^9I-)!SmB;Ca_%E2%Z%n@w6pZ0Lws?T6nu?kJE@|aGm-?cQG)Ih zA0#Bi_);b4E+vHpNNKj1$I_PW0S;{l%n+*fpsEOUE|~=-Jb{4A2uyE2#z^a8bJ^8R zZDnPJXcSq*(K*5;XQ}Xt5;9BFHOV>s00~-Jky8Y`Gg^*u`JBOg-=`n{zNBamnpL)0 zJK-HbXR3og7a`@CR25ou@C2UR>iw8=0&W6dkz!mL(M9k!I+9gT)8Wi3#guGV0H#L= zBb9r+m4|#Y28%)qCf7{%Outi~FQ`ql$GSBVadkj+sh5vI*_cy?njnlC4GAYfaC=%m z6O&e0K76%!@Y=z>J>ApqLD2V{c)$I~TlJGKqarD%<4j`p0cp`VgfFVPAo}4Oh1@E{ zsG6fO4S1?J6VixLO(C>egU%8ZCPetuPPFqe4W=f+ei26zqE8jMw&ai?f|dEDczR-{ zA4L%Rx9h@xqP6_UHy6N$iEAoojYh0Cz8aFP7K7_jvZ^6!n(icAE5!cw>BaU4ro?QG zsTF!K*=dyGyf@%9EtjCD2xtjMjicrw!!z_LVm#JR8M2szDUksvAOanw@@!ONO5{0i zZcd8&gX;p)Q38q*82J221SE7jMl13#9~2cmC=`;)b9U_5TG80KX{Y_w0Ws=jP=_+B zZ~7tHl53{uOa>I&Yx@%4J(~K-=`0+GaT9F(P+_}y%T`2XfeLgYLdGG6Szn#sRxF}P zGCK!`)ANf_OoYrr^41Nlc@`njivGkoN6eNJ&D`b`<3&iT2iN>$m5KblF5 zm$5i3cnDyKSWaoJu9BbF`1m&uB*LSoD$x~@Pvju?-~L70k++eWg$hqkSHz^|q4Q+# ztzTicRgJBwbyG!^)p%Vn5q#{4C)TfDhurYW9cmMaC*6`FNjor+TkB&*%Ja{3atF_S zhUQjp4~MQS?*q?&3#4JpD&EqRG<38o)&e4Vn~wjF{$Z>*S7e z6nG2&+YcUp^66)ib1O@SZ#3?It^34>d#`^xcKMspOJ9#&`m*Q52MzmPMMPTBa17&D zAx1eFy|Dg=7zHNh#OR#m#oUFv1Xat>kqYLSEHsH15p4{a{-?tF5?s@RT_vc z;iCp?KfI`(I9hk+m1k(GL=15<2QGYbd5|Mg$xx&NY&$=<7J?ihGA&Z zK&{Qr?VA&nxi9RNp{Ay#vmF6Rc+0)9KVCiAd-T?Y5C6K_M=`Ybzz$m%RKdWFHZ8Xh zb2Q_XdH&u`7rMFVb45l|E7*_$ML@EmG#g?R*gkmT>}VzH!rqefqI&d%%T*nr*}YzE?{e}uai4Rh}hP< zwxQAGbO#5sJX?w)&>-~MRNO=j3&C(Y$q&sWurKJy3kwYJ3a3yZ&>>zc(wWaa{SbU{ zF?HPD(YayYYZ#Zk_xg`dzWKW|@BG)X*M588go$g{NoZ1|PET!ZZlaj9T-DNpQJ3`-&tuFd z@PMdeXhM5>N@VX~-+M<=*fh1r4N{mx^+~7Cp4xlk$IS=doIHN1I5~_j;7M4X{@%{0 zv&C!{TRR&J36Uy_U}=j8q+ek0-YRliZa9wD7_bG^g#hO2P1dk6DjU9DT;0&L@1<*> z{_p$0ojLvX?_w3%$oV0w8mq|4NJmr6ZcGY8{xzfNV0~R#pxYKkgj_7?GP5^_?-fEF{gQ&Kpp0a$Tm^%sAd zsT{tb`FD8o2qM^FK^~{u*|$a`nQRuul^~8P6!B3vgsA3LYbS4N)Kl*AjX@b3cRGTU zaBo1lG9|zkgH%yeW$obl#Of`NZuEdg+_7^f)G$sUHU?!jvo0L&1s^b1b4F;Rbn(xF0mSa6Ux%5h;957i6vLR3q^r2!J~^xJ>rN|PRW z;+dw_);%MgAoqn2|L4Y+GnYU4`^6g?%zit1b2!b1G! zBDy|4o?x~Hq6o8R7FLc{Fc8I6zp)wJm>Yvw?!`V~YXJwg6-(2i8uH=PYF~Bu|5Xa! zgV$vSXpQ5mKDZhwTg}0$-UzUEsjBq|c?Y6;*s0&u_C88agE3odKqTd%Adk0R#a?>bkYW*dsUCWEdrA52JQ8GVf`_@fJq`{gFbnGeRIofQ(P?XA+{*!P1 z;pLyq9DeCP+AHPhF(jnu^5fJ108VVIx5u&U-#jP}fP6VI-`mYEbKj7H1zzV2&F#tl!L2xsMj_)C^4qRK29<-r$kxW8f(2imj;mcts=S%%d&5b3MXK zeL|dF!M5V71GJ^<@7IM7{<;SsT)u}e39&}N)ly_7iq$1j)nulwSPto_zhcOIdjx~{ zv=lor=7u0XiN|a$pX^-7&Sg`a2Eb`PHRrzl>c)mx1vR-ftNnCpZXv{$GAbBFIw#-w zwY}|5W{@p2%vDo>dXyktSNZ-=?!p(gD52X z+aSu9DDs8A!OY9{gD-OVJoPNh)L9c^{TKNU1^z zWi%c@IuIHZyo48>J+tW4o4+mWIWsW6N7Z=@auDf56fR+WX8(ydksL*ywXl1-di+LV z?>SV=din-b#5n}|xfUh*!;&77P9hZnY{yQYz5V51)g@6JQnVsBP85VI@xrrG#8CdO`vFxNM8( zdou#9akc>mzC@nO#hWjx9iWn0QB{kYWFK!gA5X`Dp}_;Eu3!G-Z@}lPKbv{wCo|Ba zr{DP_8gkUm^#fPa8jt5@CX{FLqQvxaMJOHx9ldz|*@b13*S>=76nq4az5LV4(W~eX zg_*{1ITJ;>J$e3PCBf*W*6X*-~4RtoW9RorVLp780F?Lbdk@oQteMakz}H*vl94 zt__M0-2NFw81L`v!3nlH+0KvPg&nM?AE;-1G@X_y@tA6kI=?&r_R*To+VlviG%;3y z9BM*>ESM>UnSi~6ox8Umx?*5h@9J#BBRP(j26w4QP_BL5jhAlR%x;@biw=uU$!KbGTv>5>Xhe(Oc`b+VnMLpbiM-QSew-HXgzL z5lIdT4b4|Z0-|WG$u6#fbuDUYV$1ey3C%|PiYGLzosEr+HAbumDNcYEa=LhQQKW<^ zN!hT?HYGV0&JV6mHgswTJP0u?8;DI5`@7hz2Q}B*1+QMSUQBmC`pSPI%czT^Fd$5= zJFscfhKXt>gywJ=6*EVj+`UR-oDdryC}rT?P&*@1g1Mo#=t6-xL;smiYbIU<)DdsT ziO#x>o8G?Ib?WHuiy!{)^WV(8{A0Bez4qA*LIr!SecOH%O7wDC)A6{9sWiDHR>}fI zt6Teu`!5!yaX7R9blqe$A5Ey-haxhZwY29`QSA(ZqMm55AOIg6z7>ep!v6R1N4_@; zQTp7nFf}d9V59bCQDB>iM)U7(BwPuR^&Vl>2%XBGg{awC&j(+65;PUMzq<3mV5dpo zG=5N`9#8E<^|Z;GKba^Gsp}ZTplpsL$<51m{L<%W{=@P8XcPTp8~bb*?^3_$_IT7g zN0L7|mHz(G6mpnPPYEX~lBtX#NfMR5UM}c1q4-(3x!CifQvUt%wTxhUB=g#Hf^(w0 zAncH#L>E75Utw&7d?#{p%Dh6TuG*Fk^mwSdEtOr^1`tiG+=C4?eW+*`@eJdu%US&c zGK=f-ODn6!Z|8KL#Y`^DCqWWX#0lj^r$&pZuo#4H+q89iu=8rT?7E98>lzwBO?0Xt zM2ui{q-q$Iz-o^@S~%jynuKL|um>y#RXt}%E`0jc8;2$)Mh^Dn6vX?XY&gheotuko zP)s9S^wibJ>0R4xoYx1WznE%*1{l;Hb2EBdj=bk1 zsb#U5eVtW+=<5elmZG#X+dn~>gMg~q##UAv65ANyNC$i(|sJZMSU0h zM6f=-_`#p{R)iuHk7BEs((&&IdXWCrLHhq4h#E!QxsA<0ulb}jVGqW@)i7Dj#3~`F zs+XxNGz8V7K9?`+X|U1ro`r26Xm;KU(PG9FdH?u@zFd~{Py>@;V$q9^ruB` zTKlAoW`mG2qR^-TR`uV+&=My%FO;?d6?rA)%I4#Unj)Ks_Er$Iq^c$I!1`)ZOTLn)9Da=3twd^)$#%A{9eK%7rYR@-!;nX{_!v zE!n9zV5^Uv+H;)7P!nHAqriD*<7;Ym&Mky45x|U0%*OfVfm$+^L1VC4P?NHxbd0eq zscTJ8=8a4p$&9CDrbMDX1=TLxs8pYTK%jKZGY@TZ319BPD#lwNKN49lvE~GPGN=#{L^6#2>A$`A^568 z#U|&Jqu+zN>@qj48r!_?hwR>)zc>UL}{CMW2AI==O^^GPw z3!xCmTBVIqHq6Deb5e#sqRJ zPils$c)E?Zua05wV0-G?t4wO3ua~2nn{%+gYfhSU^wL)-(rRd`yFK01f98|1%U>ge zJGOg#u%~fwsK2wT{h_Bes840WgiZmRKxQ{2A8fi+-$xId}<>!>tL`O$P#HBXo zad2*Qu9MTE^ytd+>dW)J(l4Zo6Qa3Z==&V6VwDYD0X|{dgiJ`Cah!WME_k*1#r98D*3oWni)LUe00GyT(o%fNNrXh1t zG-f_Q=U;}8XhT+bN@8SW!6?Xq0cR9aP*|Wlx>kA%!ZVWiXxT(}X%y3m9)uj?4k$d9 zRDogI-tG?QhuLD~2>UwtFu==3#HUYGQK6a8z6o!?tNnsNdZdFNGb52JWQU;l5pGAh zUFXo+Shx43qW()TQim!tS^RVe}&CufHpGwAX;WRn(AZ#4dj%qy(a{m;&xx1PqoN`}DRg;m+_28x z-d2%Q02hV4&Qq}0Z$0=*{lqOwN{@e30}zNuM|Vxt=rx$pr#I|7_QoG2g(Hx>R`#w> zKJ~OTDhd_98HJVOSH6LjL1RYn<$hs7WdpnsY81YqKGwi(PEMLSOkKW5S6UR6z&OKz z9Wes72il_iyq(Y^3p)kWYN4iy&k8~wl+Pi>34CDGO%3CfPPnx1U${yZNCyIq^NZbir%lU`uXfcKvsXd9W3HeM_K z=Ow7cseiALOpLWg@zSV`3Bc6=S+xg&36OOuR=isOkZF~z$5=-Ua2v8rUcI&bIYw9DSb(a|1;HE6+%jil9O zQe1<%bWt2CVBu*u-L6I>O%#t&E%3%;hdIOdfX)?v|Di`NzW3Xf{)r@>Gd94MWeuIh zi2;a+V#G?Q%W5>Crnj7EKl09@7k_o+m0$Or{-~h$LVwpCFFMF#c4Q)q+Cjms&f(RC zagA2Hp=$!R+>dG+(* z@zICZyP;8M&1NgG2d@Gr3fBfjqPX*hwpI$7-FmNSr2aC&v6NNmQiBN&RpBG#s z&|O;H)LPZpQZjI%X7`PZ6iKm?7a@yAjTI`w%IcaDDklrGEdjn7#Y=)4FAG+Q zF;xvw3*(cpKcB&{t?}%3yDnF(E%9B#zTMvCCn!}MuJv<^ z7L&`5jihE3mdWMOHF+ZV<)UB}RGX#d5opJJtd66ag#ubcBVod>{ndP6VuVIin%T_nHWk@9w&mxhN%TiooX{k;lW;fF15XY{o!=l=V!9M zxtRB(D+NEkTKMhdf|2ndm?`o}jxY;kDLa)-M;zU}UOkkJSu5Q`BSU9DeBtYv>!1B^ z|H*e{A{wkMBqByy!{OIY*NB3{U%=YcXjK zuD_ayuCLR^!W1ehq1fr&|F|i_x)bT0y?pWaGrwPe=w z9#jnJthP12Q-xrgiY4=%W_Nb#X6FMVIt?k#xiL?=@HugL5Hb@L)> zLE*rFbR9_PX1^&iDHow#SDST6Pj1_~aqIeL!ZFy6kaBXaY91u|!1k2xdk0gJ1JoV!f%1=(FSEu++T>BQ|aRNiapy1V0NMjpH<$(-Z zFcQhgvjEsYC%>ZJYUVHRBK6yM;+>NI^VMTlmC2D=ZPQ~HKR@)!?+(87o7dm}xUjMg zCqNjjgVPk82cWeS{XZH;CZrb%Vp7oI^YqH+)>sE3r;CqouHZ-yJHI|i$GZP;H39I3 zdAz*nwJ>7!!j+%~CAgU(tm+H@YGLX;kqU@f(jDHCy`DP!`G`~uEu-|bT*}j;y3I2WesolLO zKH6VHMk&p{TG~Vv4b73ADl$vi1&deco*?H{|L=Pbx%&jX@&1P>`GN423CS%L$wy9} zi7DL;&-b|W613mYeK*@N3mrMdC}c$=DF})}Ukt2P&pnN)FCRQx)_=OB?^JQm2`~~Z zE@(|D=sKoecbUqO$~SDcwR85st$-yUfd$2hdEoIClbH%xV1N(Gi!ekCRj*LV2x+3( z1^|OH24Glzn@VDw9e1ws3kq(|rBca3iUbjegU zAv|A-n8yl*IbU`eihIitB4$P=q6G-^%rQd-N>p7N#S6oGTb<3hJ}AC19PvCjIxc&8 zZ#3+7F(OvGPgsaLOEf4naRRm8AdfUt%EFJvX^lU+Q#`O(QZ6PmjAW#itP zaA-m)lNGJNTTA@><*<1SEYwk6t1;4V^GAwb|>bpphh<-RtWh5 zB>35{eDv8(z$ZA0ofP$5fWLvfdY?o!jLj-jLk`rCk2KO@ws*XRJ>AAV)gibt9F1N{ zbp0pF<*K~YeK)_67Vj134zwJ2<+bx&AQOB5&~_QhiQ%zHuwsB^j|;C%-9ie2Mpom# zAZXix+bvVK;NDO>b_tchH!H}&Tr)LCQE-bmErd1B3DAU!5u{m#rO8?Oc!of! zx<55T-!#j!R zC`-zyRz(N+dHPeuKn`M|5QT`}qNsT5mJL8@uPS7yC{!y-;a~vE1?YZ=QRJc7^w7BU zVhlJFsv(+$?j0-;K3aK1Acn`4*0uI_lv4!p?%uxmXfPKRZ&Yx6TUN^vOcCFG@uLGr4wm$u zfRBG-dTwQo7*@u~wfjp`!nbbOr~#*w{Vq%hPtMHO{EN@RH!ui;2O@c4IBy6G4Ltw; zpV2^^os*%FoAXII$IiK%?h8jPLS;+BSUYGfL)qmfD?u5me=|c&H2~B*5Y>avCc_eFUp47yBke>ht6CXekQfY)R>UVywXk?pdhGPgOb7nF%c6*L-83!@b?)!^;Y-MS6cVo zs^4=34n!K01b$W@>~qm4iUc9f2@nAWzfbkWmz5PEY>Sp2c^n@+5a$i0HXLm_@On*4 zhpnA0)Z2KS7)xQXiRqc{tq76xWmrF z!v(JnZ$e;noqrTYbz*LLbxDFxTUKCuc2J)xWUxrx=(5N{&)$y-ydmAorUyqyGQ|m5 zyy!FNxal>_Q> ztKw{1G6Ue&i`p4}RB}>g5z1U4t)3r^tWWg;?RHnvFn*+WY!ZRxnwBo41~)r}t>0$D z7fax63ks?QB{>LBlFj8P)6@R*gZ*&)v7r~V9C)>I?7FJ^EDB}OavD>zTT-BQDdJ`I zBC(38CTaQQiBT*?Vg!c0^p8)iTDx(oR|OXWjCsLixAc~i=(&Uf=17xp63|)9Md?sY zt|+&>8G;p1%#wOmCHo8(1`ewHP&bRCoai_{fMtrG5O%gTcrxz%29yL|XGtAEH_b3Vdo7e91Kz z;H1h5w#7IXHj9e#Q4|d|WdFCzbKoo8U zXz0XW1aC2%vL@cn$ur0&AjsAFxjKap%x~qfeBeqJ!9<}iCXZel6pG@M9l2pJHVO@J z$1pD_NU2N=Gy0EyH-r8~Ya1&xszM>5oR!Rr<}-tNWVd%;Irqj-XQp5KH4114PJh_E z|CO@gD>)sf6m^H<$|qz+qeyn5Jp;SK^9Lbb{?W|A=f44R3VP1AeEN4(dqJUM zatkuniB(gg9Caf3QlDspeXxT+7iC;Hm07iB9o63|#AUSut9a+Goq#LK%E0ybgxKRv zv|xXC6gF$sor|s{0+@eoV>DtH!_`FPx*S+FQ>SV@lr4tnvUYqLAGy`ivT|RFhL(?= zC@(T0YirZH6JGOkb_c&3#O)^XVKN!R;9{@>kzsv z!3>Dn3q8C`y?hkrz?KMM-b;OgS0`g%+7l%b@u!>V$6L7w`67CW`PfiJ$h?Xo#1wuk zSC%Y@PWkiS|8eW}53YRtmlwYJDxyS4zV-+3#A{Fmb&!Ckh?0D|h-Ke2t{(*wg_?RhUJ9ppfPm z?c(I*;3_C{<*QdwoM(G>fP%ffH$PBgON%~EybtQ$5gSBQSt*E);%@ z8l|%|Rj=90s2GA9Lr*cAFW|~!I3YfE*cjQ$z9P!i0l}+Nv5{fVmbn>9NW%5i+s=*tzr-qF(u@}FY!H7CHZ{Oi6 z!QA+6xF#V005Bs#u8Q;LkX+zsh*WW5GDT|!^j{FQ>^XsPe6<8zO(d%}scI>p-ht?{ zvU7n;-vcN;br;+|Q0z3>htG(Btv1m~44j0hIsaR`s04R@2zNd&wO*dv&s?0=)yZ0O z8B@|U7m%&QUl&gw^@y>&0VFbUK|*&b?wNk?KW45C2(5N)MHKgZ7e^W$15H*^*Ny<@ z$|oN}1UQ!OgR;`n;Ts7;A6L80bV|^p5B+;+un$I(?cBA?!`($8baQdEMh7Y;oG{qz zCFI;eeTj1wtGwV>B zELrH0(|ImDv02J=M;O`5H=ryz2=;-u#$<0EO#1Xx#uw+ZKb%&+G8uPmC^FFBD=J0? z_h59;9&Mz8_ZYSc!983pY%5@4>ZiNAbKT_2C|q)}QcsUrzxr|f1)JejgytWF#IZew ztwOoNJKodN6;BTlX-s)j2%VeL{Zd%lP{zD*&6DdlZnCnmK?oN>1wKUrI-f&<+Jm_+ z>?WXn;SY>mq4EnMTw#m?-6p8EMLfJEkB)bnL-r`mm#3#l;dcnMcdJO;k?Ttz1nZtBwe;31nTdtoSrudj8+fdfqeL`Czhh{&!S=2v-k2F@9Nn z>ntp>4mHp@(v;bL_RzL7h=@Kc4K);NTfU$#<_qE8d0pbtwxv>v0N7?YY#U&%xHr#9;#_z zrIb}tFOTJ-$mp%-kKMX;<;n}M+q-x$BIO`-Uf1c=hQk^q8qM)KF_hJiO{Ii-_ZFg~ zrhDqvPtmkPO>Qqu@+(UTW`{XONW=(rrYmGGj7wkH8~y5J%*zu|)8{TDS$naUkNV`( z?W_|m3{)5aRsnQL04)+FwVjoT2^CK5_$9NXon-28)R} zCp;11afk&wc=WWef~`d)+X#vsC&b!SP%a4EkjCAf%GqwaZ6z#!J=~n2N5B8bQ!pl^ zll;(%in<}dIGhuulm(%~2LW&>zdK7R$G`arp^e$py^WH5WkjaT2L#ouZQHgwJ6ILf zbs@S7!igDPa6OEZFi?3^HFk6G+-H#W7;pFRqmMo2oY0a(YAO(>7gQobi_%Qx9xXf8v}F4my4>{P4O z`wmevpTIvMg9(w<46Is;sRV(#1fqAlR`hp#E~DAdJhucQky|tRRgBMinqiV)LdtX5 zW46ntI|+XI3`TJmaTM&-toa1h%Fg*ATn$IzN!vdKy#9hNJ?s+D0VC&tS`3yL&s6NZ3p+wc@# zub9)1DjpqpO9euYO@79^StQv!80`qW2dCM7(eZm@LZV zSvcFkCxzZw&=fVg9*&#wO3^Y49>Z84%ZXExsVccLphhDsjnLjAGLycZrujg5D_M>Y}vXM13OXwiGiT-!*g=5#=I17=WTATPC;QL)Xc!EJtxLL zG&~$xOrSB86b|=S1TCe>c`)|@r_uMKS?cQC(%rDY?HJsR6eE`&h*Dm-=R?RQ3cR3t zky8XdJ?+>1;NeHzU2R#^0DnKvs7Mxv$40Uil{-K+rqf`vSs6+Ph7n8_QJrChNF@g% zBa4C>Fzo2dzesO7g7br#<~Bv`RJy7>IhJ#}jme^i_LNKDj)Xh1I2<0yiR5n=Np(o% zxxoJ&ac@`;+B&(z0|Cx_@GkIm-r{NV3`(@-*2?GBLPUxqBPB8^5}zb0g-dor){{x` z$BRX!E`q(7qKc-VCKYd_MqF8zgSw&H<5Ef3rky*tc{%Ucwqr+-=PtS^0p}${&6(Ln z6*y7ADMDsJISh}Gb-pzc*__YeggZlRpY32{c)-r>n<0o>_T4I~ZoKfp|A_O4p+1o! z#mA8z9fGqNyrSKuL70S!_*>1C*~5H+~{14CKE zST$9u8pl)uK%IpsF?<>{OfVR{{TDv(0#&=gkZIDBXxR3FVdr-l&F^f93={M_rrwR> zF4dqg@T(lV6~>8~m7cqEipnDL23gWnco!foioV9^lJV>;g|uJ@#(Vw6G&CUM5d7ZJ zWE|)r(J+q;$7^2J0I&g-qgG2&x`v=TDS0ICZRqq5@k0BEm8Y*ig~0^skc~?cc>_x@ z%tMe9F!K^uM$ld2Q?n%rN_3daUx?+R97!GdWCQ}DP?i-VS5evI<>lF4zyO2Oqk`#* zPK0yQlyY*QQ(s|te-Y_o4-Y)Ruar&>wF?!eatEcXov z0!s0^+}xZXA0ch$<5P1P-h{Tc)~HB|=6Is)7A3Vf7lGLVDx@F>HRVOH;D*Ioskk*Di1=U z7m;d6*dz6nz2(7yelD+{D97j+1h;Xr0u_!-EnKDW@qPS<8RU|;hGmQM`f&;cpL+N& zIy+k9&5tdg!VVE3z(=ngqKE$ZW4Q*QXu%EcH(w24)g-1G2UN^$UBXlx%~og#y4=Cr ze|CHtYtg4eed;vl`)9SnR6&93u~&Z$Z+E!=pl+zDb?}|Tat8-H%nJjkB4{pZaS0o9SPoGmY7!kMJC)FL zYJ!sUz#(CnHLTv5!L|r6MlxKzUADm;X~*_0Y-uuPfHN6n)YPbv8CeBKB%l%df&brv zg=-?KQ&JK-2F7C*S+LOSErh#57m~6F4s&_zAWti(F^N38qPZ_2qp+iZiScR>e84%1 zo`U>c6?Ldr`cL@8x(4&maDwtza)@Voaicgc4f(~xr!Jtiw6}+2dpcSYhB&kZsZCj=alD;h&_DuDME(Qa_FRK0C-zY zNPwp`HdKyF{@eO7n zY5{`6#HXsE`AnCvdH>7Z_33VcO0G0%oo&!qW5Q%D8xhpL(Q!qp{A6E3R%ug3X_j*! zCy*h{P(@%4!i3k;EoH4gQ1~TRMnO(8@6xV6cXTp zsa|A1Yo^~ul;`~W<7-!L*a>e3bX8&|DC%-U;~U{(?<=YCm8uuy*Zifq61Vo3@o>aP zlO+mtVGuzJaYiR7`YEIMfkIAraF8#`ow%|TmLv%#N;0aoe{e`V&m9TT3%w{T5?q`p z;Io1Y;{9PsKRR_dE{cyHO~^H2oD$j#y8?Hc`}R~6$a~B92p0zjc@I|!;g00v;ehce z=*fX2AY?bDutAK51p6Y>DUFGZj8gjrdV0E}=f~5{;gQFlSOihj79rG(5@kpGU9PT9 z0MQyuaRw4wQ1p*skT zMgS*HCWfj62vb93Ble5FngEYoByKb+pZ8UT)g`;bWCK;i?k;vg?pr1rF@lDBeNg1- zAA*k3%(hcd+pt55QsiNt+SzU)=B~qi5L;pxYPph*LZtIuT#y*X4r+qlW#`-l4MG0} zQ4`szU*_I(vg*U?cRH15=`V4SItNiMqP6pv`K3eueCqQa;`1I$PXcW!22!5H(P(hX zdG$d?LR3c}7jvE~6d{du#VFcLYdC}&9MqeH^Apg-GF27++4&+^rHdnkitGZ2p^VhH z#3+U!pe&Xh(wY6`aOqs}spHZwL2gAA*31U=8UHb6Ps9MS`Z+dZ0 zG~`-y9uvm7@EAg?D`19zEk~Au2sX@tv2)lqfuq1YWV9Ml{+`$^T!f<7?x>#%^t6Hr zFquY!7cd$;1H&ku?oN>1(5!H5K(=*`qd$1)5rlIwP7c?j`_|6h7Q{GZ#j zYv|Nl%Cv+>pMZ^@C)^6*IR(jUYqKN3*Da7CLAbavBj`e};O0b1ZTnz(L#t3Mgz-I? ziu5q*gi-bdv5Sa;MsA|e8uecgtdo_YcLeAXg3f2^zx3#`aC9kU?-f}I>r_Ha)elra z^k4Yo|M|hj=Wv172v@Fpu01!bXy7W!YBq1)P@UjV8f}*$u;Q{w@C~S| zDc(g<6BOk(>`;4ezW|^s%xxXbXXA$Lc57{dVEzY)qCnTp#TG@gs3+2Z6R2LgH2wg% z9^H-D2JX0kC`xi*UI^g@Er>o;Av-ie5&>C;R#8T<9pD6Srh>jpBwkE@X@xq5S#tn? zVJC}9R4<41Ekzi&5{_}6Xx6;-^~`}r$XRxAO>=f><7-o~naRSORB^mgrD+328B}3S zM}&|iPRR5oi6Og@XBASMp&c<66xF=JVd25yq@d7ncmN@&i{vHVlg*pfYdDI|lgFQU z62(?eKl2RAn=y56=Z-Dj&RY>2_V@ROjTFu#pw5}WHn6bAisLxLVOU* zQS^k9n$FVR8#~L(Nq}kp^YRn zJrOy%E$g4IjI%G2*(x|YpZ1WiTD1~=8azgjHBE)?L-^35jS>x@==cN(kuN-a>@b8Z z2ukx_4}(4Eux&Q3Pir=_?O{%Mb5mt} zoD^x@kRTsisc|5RP0J4r@kKy2J}n0e1l_iMdr{9cIlwNnv_%k?9mt3Rn1h%SKn}yh zp-sccWXzI7+!z(VkbvN*hpQdLBE%>RT~5oPd)KvMdFgr2*@>yJOYmtZY>^d*a;MC8)iMtW*j+o9Lq{P454KKWs)*h9n(lQ7-$^D|_HBk|>XVidWBl{K(? zO_VWmL{>7=mZ#k1C?fUobYe5Y1TjiGhMJ>=k?gHMfKnAkEs9kDYt}zdBHjIiLg4TKft!$7Ql?7jXvocLKXz>>0>TT8r17*ZFeXHGE4ni=;1fOx zz^4lq535w&xT)-fZxNn6WGk2*CuL=1Ds#%4xG@AI4wLaN%?t4>4Yf_vSFq z%>X1fcxMF3N=mhkqS;_&WGHB&c#6C&+-viy)vJ)=MX8ZgM8`QnNT3&#Wp1>09M>%| zF}nHS8>1J$!rXOKW(9cc1YePmh5|-U5l&VRCl^rNA=%OG(_KJ}OPHdnuSt4V(BgU9hTwc}C$ju%q9)2Ds@1MML9k#LI+!z$8N>oDy6}3fu z=UWfHQrkYjWV4^y?o%LhfVx_}dUbB9*xl6*tuF}V+Ovv4ATS989XR#w`FDSd+$SK4 z^3-S7?U>KSr`K)=K7mXu3{HWW&fKlAqeBvO?%$9AcZk;~9{C0z^uhDTxKl@V@zYN~4Z)|#ErD+ltP%t<3QRpiza|7X zrf}mG&DPwypvDT^vUYG)M{E599UL9Kz1=zCE-2MO6nD*<=fF`6AhX*1)WeTFw%#tt zml~Oqn+a$6`R@joO?~FsXJH%&3Wf!HAwUh6L2Qh;ahXbfxJ3xh3T5*NmLvt0!05Hb zKC7DAU)-lW(#*zKx=mZQytqe(?$1Xaeaz0z#^28iT*ni@`9w}mdZN%rDB>ZZtF8qL zP(N)vRaRsIBq?g9kbE7hViOmj3o@hgc!}#lN)0TRu6qqpZO_2~tu2MF2Xj9U5>WL) z^nnWAK9Kml=j!u;#HW6CqA4>!KT~UFe!du;zrjD2>QqAzMeeg`;0hv;8h@g!WFcH{ zih52>jkZLU9oTpME3j(cq5UWnN{?`d46QCsX*={P0E1E&kS4@)8-kXb);{%vN1wuE zY{W2Q(~A+v1$z(+g~DSf+9OmW;MVkH)9#BO7IYoUZ9A;NMq$@+jp9_}Gfs_9w5%Zc zhY2m34U)5p&{Q*@F%Hfy7!}T^z#Ab313{yCz71LA$OI*8Hbn|B#B$uw&562Sv{YtC zc~4D_>>X*LvAEGJmylpTa+p8*EN>hvLnat4p_vLP90nku=Lib*iPq1E2%(j|E2JbU zfZ&sW7lL*g#IcXR{F5(kb-@u3=~Z;Wa=2V9g*j7$9A-JXdi%y_FbjRn`prt-PV@*lI#{DQm9FTRdyUVmUiZBpJdCBur=mB; z)pjGo={Nr$gO^Sf;~VZ>N_AH7D04AK4I5ho9vEjz|OfND)!_4v z$zMz)s%@`bIXO1e8XVV3N$Ey4EF9p;ijYfgD-srT9-Ctf^q+|CiH*TazyM99Xf4f7kJB`aBAJTBDl&iQ zIz{pA>!)h_$0sMcRlq9RS~6OWAr%^1rZztUD$u1vWzZT`0;Eng1w@+oEmiHJ-=50nYXcy-8|;xD4Fo7O#z z@hnd~`aKOtp;;eawFQnys3P7)%}3wuc9PnT7+(1y;UttOC&!>oMTK7228G9DJ%4Wv zYt`!KTwUz(9DqqxRV#W=@pWn~6ok62mh&7-<2{jTjc415!gdA*cqPbKqZJI84f&`sI=6v`qC8&m-OYwPEsxAjR&D^IY&}#zB9+0~%15@Lcj9 z`0c;&X_3e+k+AL2CMHbRN(L@uwj77p0z_+e-<%)Ior~YTI;B4B&W9*2cVu{Ku7u4H z%3kysgN zZzzVsHKfEA7~4`QYO^|Yp`d&h9i`xCZA~c(Um->Ta)4HpH>{{T2nS$TFJZnn=5?#e ztCFG^dm189UKA-6YY2+?EuS53<3&r&Eh;O@+_Y(ZM7$EuFs5v>u>TU!3z?3F91<@U z`w8&(VsSY^{_ep69x0L_l<(%p`3Ly8K#anbDIho$Juomsfb3Jd0VCcUwi{_RsyBs#}w70gl3iaHI6P?VAZ>K0b-C zbH3t)F?z+wWoKTwi0(zAQpZQSLjyfE%`NA9_&AP(kvMu{luCJO_?!m4Gle^)0}2MQ zN0i>^Cn$PDffJY>%*oK{HZBM{Jyw?2dGeiK&eZL`^42eB3d*b6OC?CfsgXtxEK2YX z3G~1?Xg=KMD%;|sc(W%Joh*l&_JYl?WA%RnU?3WTbXBWrgQbN@;>p909u5GdgO?GsOv)^}*uzC7Ds19mqz-RCAXbgi z#1?7_F0`Wh2IaMC_ubiN<>McitVl-F4zTSdt^zgy@~kL7F~vTyY7#Q^__@mn7h}(3 zbrJ!Wk{scWb{81qsnegc8Bo+i;k?0@5`kNv-QkOYEvUuCz_p$eAELEptdg0RNE#gI zR5l%l(2OnJt&oLsnPElU$K{d1K>?n{NkK>(*Nk06A(h$@&@X_-pkYS0+MmHc5C#Zq z*F5KLyJo|Nby$+{E!iTgk|>)1_w9vwsp+k!r6~n5pn3#{NeK*a+p=cm6DVmWg$LSr z(|2s&jPUY-E=5WIg@T?lS*^!vnp;`az}KeY_U`T#iulNnqK=6d?zm>NRY|6J$F|KR zf&5ax_*fGS?J-W)>oIxeIiFO>*`h3&RLpR8w93g&jS|ye-=7FsA5}d5FNj)*=td%z z2-5ERHWp>7MxNe*sFC=*J1cwM#Fal>;29jca$oR?9#G;0HP$TN*wP`>@M%uXt@-T4 z9*o7O2BnCtA&D4~Km5!S4+YR8(KR@$KJRph;)oAPcj?1FqSK=(hnghzkCV_*&Jz^Z ziaBK<0T=__^Nff5SSwc#M-SCguTH8seD%0cEHoOH4_`Ue#)=YAA|eGCcAZi)*?aP% zoRaGNvg%dd3Ux{C<4;F%d=g{$u(4%CB*1=w#|lFL69NmhDu8HIBpVRYWJ5JFRFxs! zJvk8*E8}MN9eeFJMb!<652GO@HZ^;GvJ;o#yo0}(IF?Yc$2EwHydxhYxTBIw2hr{s zjho_F_V~-o>Z2(-D9LR|)&in1fCY)GQbSd7eyCQ(;OlIe7rc!$L0von#FLY2_JN=n zIvrg+HavN#qBJ{FNQbFHR!k7$wDK4>=5+3|cL70>G<9GV<2)cGzt+x|85O|*;L!zjTfz~YwN+#a!6PFe(BhQp*%C_7HYdG4&zQ1hrHeTR{RgXA3J4OiTvN*Yw z7n9El4PeMR2FLddH69);czL>dYVUC8(Ki|#fV^lQ!kTS}COT3x!0F>t-_)YS6?ECkdQ4{rSS-WK0JnD|5!i^&ANkN5;E z_uc#!hdj*OKvXt1vkJ4cc3JJ3tr)rk(Ws&kq~G8h5L3DbDL@?bHT6W8uDsQSw9VQH z40!yhm5A>_xD+M^>EbA4C?81bSLanQnZtlQKG-LZ=F-t|FT2 ztlOU>od5h>wxX95Hha&k-JZzUUMzz_{dU~3p(@|TYCGOl7!YDS4wV7DXiJiJAiUpR zulnWh{_Dc@==5v9oPPC}`)+*GGyQhu$Q8_-iAl-gMWw*TuehovzI=Sus#W2RoT@6j6JWJSovjq4bx9q42ErbR7kgF^4 zxs;uYYK#8Kyodtm}L@JaFCwFsgp??e+MuFP(m{^<8JXd{76q6iX>w{nqsl*+TFswt$z=8V>p z$6x=gGQYH>wn^RZpOiUr@k?oR43iohostcKn30}>13jun5lyAgs1#wMpSMe*H~>$6 zPKH7mV-z+l5n%G(Ur0(4dSX@y!kYkwhKP8cTb;utiOMIQUIm082Z=UN%#eZ5JaX#H z_?2&xvkKdDLibmP7ercV?t%%Xf}BBidas6~NRc9+8XDJx=YXKGrncx#W)wl)SuqL$ z3io_yTm*6jF)4)wS*b~4M6&@=$nNVy;^Ar$&PC7-0uKkjpb!`V-W-d`%1Aj4s^dQ_>7)dz2&**R%Z#VN~3LI#}97@A)jf> zD8Rdc=AVMvUNW62jEKlei|(0z>%jBhA_DR9w==K(Waicve*;SUPrjScbTF%+q~q|b z2aX&l9k>WDz=?tCP?yyhz6KecmS2u@qoRtcU(U>QAHJR6adf=5tRR_!5pSBVP@zbG z1Oah&&Xp7`Y;n<9f=dLV|G(#`shahH!m9B!U7@x06IW{Q{=5ehvvm~TJ_yxACK%o> zL;UtZ$LAbS#ku|P!HJ+cBDGmHb`7!FRlEGHJgI8W*yJ{#0#iHU<7HK2SJNUr6GZ+v z;BE}c+~H2%xb|t3pMXqHKC?QLzjOWw?n|G}XlP1HZbQ>#P@r!@#RLX2U+xpYoR1?- za`o~H5A%=Wc*C8?*JaE9$KG3jx0#;V-~0cz9fl+`VYVGJGqWvQ7Fm)dqYN@LGc!Y+ z#BrFJc_7I!wgVmNlySP-?RE>>-FCZMf4^6+<8d;XnG9qmX>(oA4PbJe0Co>tw}5DU$-?bHJ|=vkf$Zq3Rns-LYh<2j^`@( zZ)n1NZb+U#d`-2MSyC^XdF~FYaTvgz2f~+8P~Kdf6&~b4VU`}JBHlFL94~L$cmc_-_@Z*U4yU*7gAVE{H^r8Kqhqv4A)|t}2)%A9@713!4G0ei^2v}WW0Bo3efxg?tpo*$lZEnWEt3eY~SlvQ!3J$;l zzOKHmX0}f5KHhHHvh^@{edWfKoMIHy#AbL$7@sm+=Mwj~)&boYYvUn@}h8rNPw+^P>7@%GYqFFJ~<^*5hEd*A7{!udr}4OSrSw_cRW+p&`HU$F4;c5W_wU-Pi149EIJq*!f=)D zTBN_Nzw7E}wj{c`I$sZ2%@QymC^A97|t;xfll?652lzBp=HPx zUom#JW$QCYYT4^CfOU4X(n`G=s&bO*wlh0{JrKl^s-u(n!{50$IeG2}wHuyPB<3Jk zC2tEyy>yj}x4Q#k7PUrM*FC=4(xIm`s#Nc&3tt0cn+>AXqryli%hr71k; z)^l$UA9%iX@?323IFCn@94b!?j)>w+fIQVBRNY%1OuD2Q#wwOnWAxLrLLi)TOQ_;92d#3 z3hJw|)21X9Q*0t-o zl6(Upr__7NCIgT2<6Jjg_#p=r#$KsrOM@K`yzm=!@mies+Y7>QBxa&ip;9R#Txki@ zxGm7RX2m*5eU_WMNl*_NqRcAv){QB)c4m+IIWIT)CSq7o@2+hLP9Id3Y--*5^m9M_ z^Y{KZ1&IFmuTu;-z432T7vB0~$?#di!*?D!`Qk68hSyKvAkP5Ifg=ZdcRZffxRuOp zYT844FU$1CC-*d>!+L6y9<}h$zNgon{{B^Qp`WpkD@3?_WWMu85cK07^CgLTZUw;m z%AUigA?qyys~>}@SApo&2zp0+E0lBp?xjOF0-qvY9_)&uHPyN2TW*?0w%2PwbT)Q! z`}m*|h$5kSRcL8`&mnoiDAFMyGqdwpprO~(Hy|%10*ipQ|$-y;k{e)~Y5?Yu6r=p)hMjR0 zo0LWCutAt9>I!7k&;?V!wlivy7hOTn@wB{>;&e$>W9#J3y{RcWOayyJ)^YW0q}BB` zMSG7N->`N22fz9EtrtJwuj2^c)l!<F=<82@_kW)M>D0vOcV2z- z&DB;8oLWfttZMGwb@`WR&3kwnd)guhN=r`GaE{Sz4N=NS3j6K_nkkaCraaV+OayhG{jjSuZ@Rrt3oe-_m33qt42?t(n`s# z;>bcJxvn%xr`LFRxKve@UY^vWFuJ8c^iEOt%Q!}SBCLMxn0hsuPJ`&zMnG=~_0X5o z`@9L2+na0GcYXMrWp8^8Oj1S6YTLEp)Vq{1Qw{N&lxzYZc?^)rPRHU#=Z@!AJBP&!F9ks{$u3@4d*EYss5$@@@YW&38Yb;jjW!|~v^?^iSDkB^%7bJwQk|z~rWTdnf z#o$YaCo1{ZjCRNhH-KKA)^lBLm(6)(0kaJ>GDnWQ&SpyQ@YoAK?#}m>#-$_SA#4jb zI3X|EamBOS47*#xFaUCNus$=QB7k#md&G-}YO>T$ZywBgeZP@E1Pnmk>Wl#yv2JnE z?)b}-4T8tsM2j{_?p~J_JX{)3ps{5uCjz=>P(bnWrr!4EGM*b6rOM`>)35#ZM}L|6 z#owk*e)~VVcR!!gxnEx~LE)OtXyb;n&mO3W3U+pLSoP3?RhazQuAV!?Xon8J*}mfi z{FMmMrmmY%vz6v3WR&{qv`qI3h>BzsPj*qJ3l$R)l+y{+kXkXxr)7D%(!vZ6-vFIn ztJbJMP=6nnt$Pk^-*<3md_63a_oZ&bh0p*uLc9@6V_It~tIg{=FmT`%K=i#oPW@$S z3N@3Xo7ck+&km;W{`TMf;}mivo+mA8UoWSqh=5;CO<|?mvgz@x z)}2|IDJ0DhM2hA))1br&YyEITU0d%nTN17U(d*@gesZt$4io({VDIM9)>{}*O=$X0 zUmJYh!u8vm();|(j(s<=_xV}j^Voo*Waw0aCY-U(qp$uhv#1*JNMoua{Ya639`2QH zzxZ=*kj%V1s0e#DZnNEkUItAd98nVH9T_47U&m#X(%54N0bx!{UPz>m`AVnIr2&PE z1KzvTZR_L^3Q|gW$G-hvW?^N?1x;vE&0Qlkk&ZCJWp=^X@-bYWl^z%9x`H8n(6pxj zYgI>WoM!K{|B|Qkfbb>7MdA-IP#nmh%lg^~G(j1K+ zq#M#xeq0k~9qMhx#N=qLoN34koh6f|54jq#i~zUzL*Uc8$%(Wi1!A9ol^{>cXhHeRpn%<-93w4@o=CO%7`R5y6?GP zZ#?(?frGC%ZxQA|STskq6_ZRiGJ%Q^iO#54(WNtbRYlhXqFmC#%35YWpv6gKn$$H8 z*6Vrxm<$!*^SRLN8uBE%TxiXF8jyx(LyS!<|8iz&J0rM9v+5Pkf6u{A8 zVI4eq_Px`u|Nh|fzY0?tbjEULn`IF`7FB7!zHXLUMKEe)4U0dKUp0VmN}v--E3$+c;b~04(%Fy;_cr*_ryV!EJPD-JKmrS@^eenMqgPHGjUV1*5@wg&i*Ag z{q{|98N7K|_+|a(TMkpN0Z~&4_v-+fKxMyE58VpZeYZgU_7;NA88UkDdw)C7DWSjE z)IFG$rdG+rsuOLSOLbk9+AZhbV_z;Zgu+t~z3>52Qe0RuSv59q?-*LIi*lAn`BT{o zkfqLFxCH$RbBa73$u7|xLcFuInw&DkFF35~W85jz$rLh%NvynNb01yE){kkNGH|ub zZ-qEM0gFwDaltbF^sutACVxh?s|~k-JUu$+UUir?7C)VNK7*w}O9mKs}j&}bytyL{*{l2@iMiG98_5eIK>nmBXr zjo%_zZQt@(Smv;%Vr$>t=X-WNgJ`I7_-J5CH<%Zk+9S;y>u<>cPEgr+J1jkVWM9qb zQKn7qS~P9ZzT?s_)}DB`bJt5V+?44|Rq;$k_lmrTitZJ85!gv5m6HcUAi_+GBuJH% ziRBPeI#tC6AO`}6X*<=_#fui&IlEV8Mv{QmQ-=|v$a>SU^J=`mp+EO`3%4H+ zs9#~pcLqdnVh8kV^p5{b&bN2qQ-sXwwWq}!nJqh-(p|1HA&S?8M@F)HYQrqynsl>b zlXLM*Ft+U6-X_BhfF4*v^(OZ2^!(EC>M%$Wl8}(JZiYd#O6uha*_yHm<|E--cmdM+ zb8&Vct8%q-n2nDNmI?34>p6-AYgTE4KE`v6d(>i^KtIQY%Ps7IQU+8WT;Z7|TTNk^ zSZpRAW)PGOH@;@8y~P62aseVpwpUlaFBxIbUxqQTuhU06%alrmN`awWsE>89mnD6~ z;d)(=mnA#+8g~is{PgBTez3DJB%@`orIlqvJ6^1t)jL|M5u&Sc9Ii33=BoboLGMaay6Yd@!XF`U>v`kvl_Uv}-_x5sw z=^bY$2LiY8tY>5e(}t=ve`42&R%Jc%=p&03FI0rs@oNhb{nC}rRq6hc0DI0rc^R65 z%7(%o;W}is?f{|T?%@4oll;W61~OXNHX0b<#dM9ko3p*5J|c5atBR0C18i<+`-o_JOsihvYF4^_5vw`P!X_PB3fB*{gi$2xp75hON0qa_#K+ zSw*a>Fel~Bf1Mg0AOEuW=yg5lZ(|VsRNVc0K-sSiPyx}e3O+x+e)~z|E1!4z^E1Kc zO%V`%dG*^bXq)g^i?@g~$-@FW>HKlb7eQ1k+YZ;raDyu^&B@3wOVotNs#Q!SqP0oN zDrVLbzoB*O$F}S}g3dE6$P-T=NC~?tkjVpx^lGUuY20*~84p!V2qP1o;hOXmH5;*; z-3knYm>yXZS?=W*#LOkaCE8#V2}#uY=0l4umOY5!5n^3Mz)FBKJ~oWbS&Gtq21KDR zsDEdCbRAti!EgW2XhY=6+SYD)ux+5f7wREDcPrRuZ-t^O-+!c9)>k2S4^cS<$i*aW zMVJ%4!>yhA#*L3rkuFN`q{j(>G1JLBE9K3?ns!ZudoB)Ou`Uf zN(T6B0k8m~!ocXXwg}V|7x=+SQTq+o$Z?Gz0p{?g`l0okva=0-L7~nrjw@F#B{ZA* zEh(f3xP0PUIXXPEIUe5$FcrlUm#Av|!lq`~0-wAk0R<~VO5k?9C|(FRK)zy~19~VA zhm{N?x!W#Uu-p>(B>T+O*#;*dkI>lQ@JQESvSpOG#>45OV&p(0e-X>Q?CiAk#2Cz> zC_kVd7RAGRyH$0`b`}<^5%gBIjbv-x{1Q6?QpmdL<+aD_6zz=#P+kPgZXqfh>iKhs zhV&XKBe|)$WqC%ORvEr!edm^a$M#M%Wwz~A6po?PJ$HOFW>Tb~5ijHBViOVKy>B>+ za}00C7i^9SN?jA)%=A!i5IC>(+Wl0}x?LV{yMpUi3aD2=^hyc$Q?2`Wz-{Z^_f-jq zZd>>SEZM%71r-Gadbe)51fQU?%47?k<`*Y)OuM6hfv47tpCL$u-4M}AVrH>C$`3*? zS{b^oCY*xm(7{)*ie*B-uQYqj^AdDO^eFjC>%F5!?um1;63HfMK zO)g!rYkU|)GD^HjZB}S!mP=`EQ)Od&oYWK7r28LP9^_?}r1Dj$gG z{luxGz^W(S`%6((J(dMYk*k^hY~S(x(?7xkeGAV`7vtGjtmz-$NN05#DlJ2nIvwRiNFIk|Z;RO%7eLX#W)(E^`b|Ku*2K9dREXqk*x1K35ud3hP zMgpQw^B%eh`rDh;{=D(QmD$zWoo&(uR{qH~lXN$M7CMwJw#%ChHjk~>;gAqtwW)FQ zvxi>(J)NiYwu6C&9vpwn%*}%Xy|kt4z|oYtO(5S;Wfc4D@?}e~5Gtr@L=FmwVl2?Q z_1SZ8{pH!8PHo?@?XG+7^Yio3rRC|;3JiG_P*M=6q^6N3U&qcDaiL?%v$T1*x}_&n zk?b28=N=kMLk{5&qot@c>&w%dyLx~0=c!d@X7vV#k2(SZqWim~RE8s?qAq{$f5$tr zL0lk^-lVV7vW~)Vx^yd6t-`*5YBR4ChQxd-)2k9cOJiX)N=c%o! zZyqZIwhfc%Mdn#?%ALPG?`d;JyC#Oh5HWAnNXj<%*j;6&z{+kK?4?Mxf}G{o%c zR2~^1OS_ab@6mdV-dIBTOsc|#Dyxr+85jJ)haSfKfy*8&ORQ+@+P3!)KJprQP)fs& zb8r78y=5{33|(1C?xuEqW0jG{tpLoWLQ!{*iHx?U z+nZZhFqlNwQ&b+gX`9{STF6M}>5-+Qjg{c*d-&w3zGe;yv5roTO*MJa2w#SF_UzvJ zNyIo60KZjU%78Cs( zb=|*z1if8h^=8r2X%M|-3Fz(Q9e-;O(9Z{-B9y|S7#7sayb5}c?0^1W+1V9|x!u{$ z=fCqu3TO>=CG5hxpZ!fyK?ZZ~bp9#|5}OMoY@-BBG9Z|qkyc*Ugf9X?dib>^XdFXx#)&&FgyVR;K#ZwDmF3QJLz)i(*fwK}+e+ z*4iT2dA^yA^8@#O!`#MMmsuGU=!ITM2%*d$sa$)$rej2|R6waYK1?=5_U`)@lRQtX z*IeA7<+-6TE>7|R2wU?*$2RZA@yFP@2djtn?ay`YdLdMixV}!ptHWq;+Y>+4l&)tw zWm{uNip&vl4P=_SC4Zf4YHHUbHS)IFEM|e=qd5Oj7UqT!?IM6^56^sh<&UhZi{92I z-`}e`KBPXoRy*0M8Lp1m+#c6f5Qe%3EiogQ;ojz$ChBx*N4quj7fX}AH%0_| z5^UlWpg`xJY%{+2gymHeFTG z#a0QoTY8@dd*zIaq&4q;;{Csk)TvcTIl=Nog1xe|9>8!yw7tY%V7IbJUqIA1p&dt_ z@UUQcpvBoy6{vY>W87oou_-3Lng502C-kN3yaWQHPXMp)$Pk$F%w0Ib18mv8P`9 z9m3!WgSRSHA$CUTAJbuFjn_sKShl-Uai~v#&og71^W)mb*T*4AWicHD|0AJ{6Aa64 z&0-uX;*3>J_Lh|5>oWs8i^9hnR2FM2N|U^y!qkL2hd1){_!D_OM=0>d zZSAaqeCpDiB>LM+v3X)nsdVUgqOnjf^TCTaFeF4B;m83C5T&AyhX%g<#NA*j1i2*8 zG&sOBr=r!>dXb~mQdG@Z2029qp{QFjzPn3RmtxJ3aFnBqBqh3 zy`#S+Zbe*Qi*?@@VV^TlI%7FR*r!Aq)1Ko^sc@v&>&2ah;l^Z)=(5}Q zqr2Tw!RK9K)7g+inK2>4{JJz0=$$uzQFo4OYnmN7YX|$aPwlHQB&sM#dU?9Ql8Mm< zX|NX%%o*Z^q!d7uuRaOwytM6;1A;Gvn;p-;&ftvUKyjicnw_J4G9*P%J$CkRV;^Ik zbV;k%J-*}8&!73p6zVFHSQaf=M&)^+EG)DAKzd>{xn{X#)zpWN3}~W*9B5nOy2ljF zhEs26weRDo0Re>(&K4H+mxfI?N|8G6?J~jVVC<<8^|`g03+n^~eR4w_CK89ojLJ}Z zu8ANZ@^*tJQp-ilsx}nzCpaabbS=$K4w5C}=YSPrq@UIEJ2PK9QYO_Iv*oMLu1`KX zsKKe97G{XQ8%f#?S%FVY>NvO%R)c{Nx~R>-t=ADG2OtP-ADtqYg8}xJ;o=H=>RT)Fl)V^!0BTG|!DOxZgI^L+x zFUT!#=pb6vppRnq_lDr}D`BN~u=6utfm;hxKPQ@g5{TXieDau&AZRRV+mEhKngN|9 z!M*YN?PnsOw}5}b#}d%5SbY0Y0(y;O9|EHE^h5|H`}KIaA9gd_8iEqSFh`9-6O@r8 zO;1)8RW(p5g!8dqqhiH-fezLhx5$%&3Z_Ih?LLH$0j!AJ5>RJty@Fv)=JZ{htP`~n zY^)UY;-XyW5iVQ0_~C`C8C8hv4)|cldSUMzUM+VsAO^;bQ?mX~a%;oXX zg<|rz5aMpyebCX)5_W~5popg6D1)S6Di?v$>#mm2m-ZETyI2r3cBEIjyDf5SQ{-@Y z7$Az&s2?niO&A)n08Btt~|wuimRo? zD#7%1bJDpnHPJ307AFtNrxT6xjg2vznxtErrF%N%2Ycy#!afD~JSz}T&0_+BYMPWD!y3toMy2v_V3anl9!iffv2;b)j+ zeCdWBQuXR0P!o#z{PvR3&8?E zo?)=Jm6?^}1J3ERZx=suuXuWZo+`tgl4Z^agLBhWV^t9YrNKVVtGWK=Dc+eHcV%Ms zP5#1b`}e;msGo%d4|abfG(HG&cUGp7e}i|bt+?* z$XwwBfDj56OPX>*wl+s)Yd!E8uWjpp^1VN! z@T_hdSm2#Yt1Kz22y>jYMA?GHOVg6oj*fQUd}xWM&AdpDg%Z*)kQ0}Zp2sE;11ilJ6a zeDvVK*N2b1*|hm72q=}(wKY*{L;eeR>gKw_9g_`7C5awnz1@5N15MdMXUEj99V&cb zclN2_SX1`Pz+3+@g#*LkKIO4Nuv5kTr$>QL69E+vRP*>cEzd_>-6Ip}83uoHPbHBS zW-Fkcp^_MsT)~P|%#vC*o~0)WjrR6(6NY@eo%FGxJ0?0gH{jS_P}K_Kgij-n!hm9J zodRlZzxp9~9_8_@jsvhjd3QBHuFeFT zb36CZMr}{G{hT2BWmI=X?e6D?jXR+G30L5jz|N^otPCFSmYs4HKRH&n@-A(4&mz9o|kWeBCU3UCk|4&j03J_nv$Ee=vaUESBJA zz&0Hg>_s+6NRW4G!`2Wl3+kV(gOga?J+#u3c?Kp6A+`3h8i)(SnlKfLjm61+jU8PK z*8>LF{w?t@Sd3|$Zypp7D|7r7sEgt=&NwOKl~JAx2^j@Y7cO49V$nm4IWAtjh+gA0 zIGULpW5_9{0Lv8PkwLXSUW4wGO`P$^7@0IKKHeDXO5JtQq6H*`vtNtZAmZ}UO+#sE ziXVC<+;=hN?JM#hCs9o(6?&YuyFCk7a^2D5m^{1LA&a_UR zr_ahk0i`Z&Y3M#@nwC<{*yQ%gibDP_^b`cekm%Hq{8*oqcZcLMW@b1Lv~7QmFqsp> z)a)aQYCG1Qd`qTOxVt&QQ;QQkc}I|0kti20_bSx8QJDusIYniwot>0*D3}8MJ%hp` zrGeHS{-Fa^3K2wkvyvjsE8^|ijgDPej_~8S^djEVxpU`vSkJ{}2@Myg97I^HIewhm zP7llXwMXn}4Fw>Xy76;0CmR6QWeV4;mdrt&WH2PABq*Pp(9>ck4ej%T=$AxE?||sd zy#lu^nqC=_xfVok1VL{-0*bKcIvn)t77%@sef*b?pr1uR^a-eW&9}BT1Yw+8T3S?8 zS&LqDvL>Km@-o!n)a!q0tSQPWsir(jU@}Yyr6tNBbgl32mIx;74V46gAg@KDvNEI? z+0m(CMQeVTueaN#&LjvWQq?7^t&wytwF{ykxx^-rN0KKh0Hn!+m6C6aO1pIFVqY&u zv@_qh>mJ7c=RA1V!nt=B#hOnuQIU^cp`@9~GOZ!k!Yv{ty9oM=L?tU#y`eVz#S^`D zb~aQg^%d)xJYm)at|o#gOcbYkVNIi{0HyYpOT&CD33ll%^aD5nQ8SkaI=hhCqrFmu zz9^4ix)epFvY4vY0eOVyxA&&Myvy+HmIPEkKoq{RUQVmPORy>}zjB2`NM4*vPo3f2 zWBFvcK%wBc@x~IY+dVy;VXG8u`GwSkO$(3%L4`#v`sx)+$|g-;t2L`|80HzST(uf& zi%>-h>Dl$`PC`bRm881PXeQGmL#06!qEXn=cxF+=rsC=+(T&w9;Ij2yBe7b&rfegA z3(!`yREb%|4S7)~`eQICrf$r9Dm7=iwiN9XUMi?C)^O zujUGT{eXHMZu%jJ-Uxi&A)qq?qEFKh-INaKO|9R41X;C)cqv1o)G&P_}U!Bdu*&NF{LwKa{sj;x;u($^M>vFsNY70`==zxvB1?SLzL10VF%Akjw@eh0?`eC zD2g7OS7$(!%H);B@P>e<;gTrkRy%S?NwW`(iBFa}ft^r(DZXww;Eoxi!JQ6``OQOp8)A9=?S z0ns9z4WijftL8Mv&Mc?yY$uLfap6`E-uDd<^nnK-ObTDY)Xlj|NXyD22tjNc|eHsd_Gj%;HmNz zr;h9Y)JNpIH;AJ*mx_Hg_;h>ym9H61uY%HP5dFLe`uPP!pQ(O(t7(XCAqnnHA)wmk z&6n^AI{n6f-M7>Y9A(0xFgXa9pC>lNJ-an2K`Z&z-i#QX5rD}^Q8zRazvav{eNwV6 zCsk3~(q34Qu{yNWJffUXZoK-IFJHn~3pyjpjCMBW%t)}UgNrC^A&A^Ca|sU%@dLNO zTDD-sEJ%MDBY~AJ^37);WUfb6m_))j%15zt=ANR|Fz^htNX#ru)Jg{0OZ0jTW&(gH zEwoPnQG}*5%Y>#a6pB-%Hf`C05D7}hz|T-wkR&3IDsh(Dg)$}}%2XvaN#aiV3bE$3 zRAhuxDSd2hEOlBUYq&=k0`c;t$w%U5QgZw&yHjDS;N`h76^+TKH^(C`WqcDx%bjsj z_Y32(lN(3*E?{}h;!a2{zj>%EBta(Rs8Ci#t3@G~RW)+7dh}SWNJiJ6Zk{;Xy6HR$ z=f?KV2Ud7wB*hda`U+!6X66=_RywI$e3Tt=C`6k@Y0@se|6kAk@UIGK@T%2j7%iAMf3=S7J#xr&t5a5Gh0v9b$X;vP$rZ&+EpNHcEF~|DBQ4@%^hkJRtDr17l{Z@w9 z@{*YfP1Gxm@!??hzM)hOVX>tfG55Ie^oySiq73Y!-r_MftLG6nJMWQsJDP%-H9{-* zu|GHqN@vh zq~w%90R^wrFz?C6D3FY_WMi@n9)`#WKYC596a&?gyoBWJqVpFoGwER-UIu(xMOD_6 zWo()pqgZF{8D&&C;pd0g$3Hks5+kP*hUJ2rt0VM<;vp6d*3nf|ccXmGEF#PK4OD=! z9l)fXrY4k>(q(CaYj1(qb#ZiOTNJp3djOLXg_)Yn_>ivQ4ROj4oZ_#5==y7z=oP!7 zji^k;1v<{4DaBiMTR;@Z_X`YaFOrm{h4?!>I$0Nv-4D;4!4j;LXnewT*qwn=6OUAZ zbE+`=03Vmwl>EGe0Icny$Q>DW=wqMXmdFhjmbNfg0YNv$QA8E{l*uYzbxJmd@*-GX zwMGaDN|ARTvcY+*s-_D z^5QuIMTL7u2iemhHpm=g`gCj)A~nY2FaPSyYrnbho!@!dFJS-)e!R0)LS_rrk5_`h z1rUAahyRAFA&YEl%bUVDb`^3fF^gK`bx%b{oR@LLGDX8$0*OS>=s{d1c{6K|suSG@j;R$DMY{CDkRTtnDq}M-CI@U|Y6jMC*}9>Z zC`}u$=oGnAQGy4`Pe26&TbhDMUZEOlWfT}3>}kHnVkN;T#5IH1* z?Bh^UI3l_veWZ1FuE$4lR2aGl31tqXG$XpRy$*kTz`nPqrMjs_JIzF|52A@R(;!Oi z5oU7*P@5s6xGsQdfJcJV5t}4ScL^CaOO`AwPYrZ*^ThZU{6J0f&hg@-z0s&-xjrKm zA#D1{g(znF6D{r;r3zftZUWBPi^A{ajd5^L0YNut(6yrL0qXKnBtsKBwK^Tu;4{O* zVmcF{jYMO}E~)A-32M#uhJ;a-jR`Ps&JBfmLw0%QcuHUv2p_E(J1)r{3iPm0B;``n zr4X&r>4?$h8oGMeD_Zm-ulCt*Z%#wAlkO&$%YN*s>e>24Iagih|GYB@;v5W`TQ_tBo@!bXqUqS zn#b1bFK>#6f~PC&@#SB&_yORvjb&CHP^w_M(M{>P0up_nGZ zk7b1uSUk@D5r%)zSX~#7Zv;f|An2`l1-?Q+{S*-Wa$OW|Tz~tS>bG~`^Sa(cGtnzI zAS1d$Kuz#zY~3|lEip9iOi4{`sw?q!Hj7Qk14Q8msBDJHg0VCjE(^xWCoj$wDdwq- zxysV7g-0Y4FxDm@m}}$ z7Hk#-O!aqX1~DScKP^4g!^a=2VpxL4s*U*~C=2n_AQ{D8J7*6ZQ}Ms;$ab5JqdQt8 z*v=XBlFUp4ZunGjYg#%r^57J807Ht`fT-n~)sHTpy?Y|poQ!)+rcYt)B8J5RJI{QRw1N=P|F=1FIqJ#oL z1z@&!!DtEh104AyR4GQx?L&75hV-f{V-RP*uP;Uq^7a=w!w{q=;&Rs7? zWDYP0yK?37C~YcU2X`-aIWZ8k_o*KpeD-IgjpCF<3E{dRdiu40_e*L=JJ=ouC+N8*64vLtN%_DT>t=DA7I&e$xDP z*l2Ju+mjBLv2<7KslJA!^-6L^)Mb+Z=dO!Cdg+BHUwz@RpS<;$v!nHrRo3WKX@*4w zSUK9S!6HCper&{kZWheCFh`i9bxl_|u+SUY25fYkjWFi zvKn1t8(q|m4Ozid9m(is4us*B?R{xTV89O`2X}j%b!GXZ06ZDd8=7Ks;{E^fxBpwZ z+D1$ev$D2aW3kG?)eB?=Dro&O@B``OlEPL~a*FALj@8PMVi7qiLtBndOQu(3cz}ofat!q0rf^UW7M4+!R?$@$F|Jy*JW1u} z9~~c>-VYy*%o_4{SxId+x4aJP|M3&=V(PoGF5Jm#G0&MOR_H!?JKG=s?(T~}m<^(k zT7iigrnA^MB^-J213?M(i6B}&e5|CFj!xh_4~PW4SKiDApr)IOXr7_)(fa$-QS1%hs@4Iv~oE!KNOounn*Y4zg!9n2oa z+7N9sFL}{QtIbdR{JPu`$!@83jUl(p-_L{L;24GC$jkq+xh`72FPDIRCJoV@ z8PKm#f_oJKodMCA8|=}fT#*WrSi22gs0w#ViE#i$n6sR^tYvkSNEyvU0bA04m@z&v zm6No{$gE*y$pq-Q^}=_79OvLTZ@&N!4`*;|iJ5(DkQpuq9ko>=9A5IC*6=ke=L4(!MQ9~Y4|-jf85khd)3YRMhT{S= zuRw2x!XBqRd<`4&W3u%)#rq7^X)_9IQc@DKQ)1xo{TSu<1QWj3Zpm)#ngZp3Jdj4HNbl1i2@4fsZNE;wZLzIIH=OI%nc<0`y zek_1!f{BR=t`t`>QH~m-I=8U*U~b2r%+_7l3ttyRx3(!yj>bJ{0@40F7sx1`%h;gR zem*XD&shqN%KcYhxj36`}L0qAd8BNbs77;W5nV9BHRIa|ze_6!`zce($be@+Np z{=?a3ephZY$>Zc;EjT5qqJDI~BEy(QslP1Qi=!KTYo(!_8!-jzfkO}br8MIU`;X;h z8=`WCc#W|p3DT#7=+#p(SAoZ~aZ_LJx?Kq0ZS*|9Y&5+Nh~7ca8#BVa6+56eP`MT3 zwLb+u!BM6{DNEwyjvahUrsu{62`s8WWzK*Hs3U?XO(|qMd>!1dEyJK;pCwZ)Fr_;z zW1wpEB$!9t&)LzIQgC7KA*e>f=I4c}hB=Qi^toi&3Y^>2@=!MAoQf9oJ2V<2eJxSL z(l_;Wvvjpv5$0`fh_T~aCLFEcx4~JdrUuKBm@f4R3l-NY@Af}*INzqE&Vt~^c4lr zAwJxv=-%@RK!Vxqvs)AU%B5ICeDK>p!e;O^V4B6(WhI{Vg?e{@5Gb-;`QRguJi<#> zX?0!2k>G2fFkG2Q5@uaW@{$MEZ#U#sNi?aU@k~`hqo$}&+cA1VC*qA}i4Eh&Z~+$}z;#EXdDI9vu`B>Kl^YS2l762*eJ) zG)IfaAysjnIRmMuhZO_+o*O>+V#oHUdv-lHaq^AHGjDA<_s+Hp?+FdjDbH=jCdR z3Q-scI^mRaV7ASu5cfVx#{Cr@18-dx^`&7R?D7_X$Z$v|MgD$wA ziGbc|f_`xmqAv?UMSz^W@Wf$GqdeYW{pt4$W6i~HWoZ4<;-k%N97hj-8wOUK;K3e^ z{zbr1Lr>Y@5k#BRU`>X!ZBM>GWxirQaFX1#UmURqM=3V)tw2vp<}Z;Q5s~c@sPK1R z11m)u1Ae$WtP~VFuB*&eFUN%r;^OEhLpK|uFf6wZQ3kA9zUU!Ef{~y!S#&VE+@zF5 zs-x6P@#vWiqKA8>jhmiwb9E}Hs7(Y-GwWc<#r=m<8@BNTXv9XvW%k#`=_)4By8^@V zcwJ+2$)l>pBKZ7TRaKgA zSY*VyW<6&25WdarT8J8Qo_m+N32^J>n4Km0i;0)^hyblmdIA?)}L$K_}JjS=i9ek?%MIp__1%VKk@p+sW(j^ z+P(SQJDbnFD||is&ZaYOZ#?~-4JY3iKla*HAj({jsSZy8ymatrQSZULu6<%HH?2{q zvs1RovJKE6ROf~bj%I?)@R^T+~xi_DhIlSO#@1_sv}{V^)y;KhP9 zKC;9-%yj`bdTJ8*B}HlrBx$n|bT*Viz9F4vOYWz$?qxF%DL9`Tsu~b02r`pXuYLe_N((lGXN|Iv!3hva z@?D`+=;NNPaii?U3}Q^AALSy01oR#0(6*Oh_0*6qM{hk;O}wg}5$O zN`s6#e{xF^WEu?d`6&@N5fWiN1ES)HOMJX`yxfC+jC1)4IZZ#=61I2;uJD!If5;+381DyGKkKVnn@JnRDwrs%x?q=H? zLvX(3RT#BC7&h@p+tu?Dk`jcJw3={+Sm1NJTf;Gir88>sPf%5-`)MMbO3RA_qV-%f z=1<7wM(TpVn4nggf>bqQ!yQoJ+WE!+pKex<%w1%L1cr&DIjg+@MGG_fowmTIy@NeC zYUvS0XV=Wa!qIxUzmJO~$jLuCA;{2EIec`5g`Ki!9oe7t>rRJwTSGJ}Mov_ZovvMX zwqfEz)8yl=TP_YCcyZ*=%VS4g6{WfBkG~G4@|EyAuygIvZ;c*)b?D$r{d=Dm%DDm) zZT6T2qLgzBx)0=b?9FV2hECUVp~zxSR0L5mUQ`h1UIEd8eAm8QXToG!3Zs@STgq6i zrM;VPKww|K7authM7be)G6-R-p#dMeUuC0w;TKa8QBlN)QG}$pN`uoQuGK5PJ-?!keXwQn{CEC+iX88vL?0BnsSR6x z^4>GxidZT{<_e&)OkKA&<`+R1T+yMV%roS~2dZL16)~Y{8vkHfB6FDl9$Ox=RqPtf zEzA{4d4|@PT5ei`RI7@_@)ccfQ$uNaUE?(%$|k$l|7H z>fq*$e%Rh}iMM|se3V%1gD1|E4IC;TJX|q+1Q{@*q?)xS>&8!2WrRQ+%ZE=?jh?C* z7bvL-N}uT8``p03=Z6lwIDGJ>;e#(4W*WAqMW`;9PUR z+~f!dC>33f5!}Gko^u9@EgH8_N$T5J=Zhf9tWIXfA@K+KP{rrellJ4{;ltdKlaoE? z1{-U$6)ToT$4CiGrS{h zYf`rgx>i?BlcHd>cKkHz7&cZ^vd{eR|H|u|sNACabx_oc`cE2lBASX&8kb%SltM$H zq%`vYw!F&L>e}kUyfmpkD^Qx?6`?_`0|KG)Me9qeFE1ew^9L486rO>X@7`|Jx;m)< zqQz_ReVsO2C|k!MYC&ckrc06jc9_T$Qug|hvg($uQlk{}1U6#40zgE%Xf5?cxurF! zxg`l11wfrX%265>WN&8$pM%p-A>7jzvG3V`+1wBgW%Ts*4+-=@3PhcmG;By}W=Uga zW(sv(YQK0Uc(}WiHT99p4aCBwa^gHl_)1l}LVtN72%EL~xU`IPtuhR876%ASo$k8t zVFaiTJp2fpJ2Tc%6K(^7BJREa;YU_FhWa=y$G-x37a(C}Y3}as;^F2%Aru@9a9sr} zjZ=jsXP1n(rj!mGDjPgpK6IpF_-NJ0vFfoCwd1Ftq$LAK%Z83ujGQDGT!hlD?U%cE zKGn19ncm&3XZ!X%%U2fnbnkq+bH`I1+b*?kexhmeu`BZ}0*ICj91%e@=W0n&lF$&n z4u~G?Q(q89MNJ^OCE@AKddMi*>GK}E>+XB+yYK!77A#-GWo*k2RV8J?9fgWTYBxR! zig0H)Z~rP|D8nk8%m7QqNuvVoJGVatcCJ`5k4K6i3NG?)I{3*M2_;*N>cyUCe#M2N zYzxt6a7&gy#?cK2tEZoN3QZiXWdg(V^U`7P^l?7{EN}Z-?iZoOw+_gCHP7U;K6;!j&p)!1B>j?=o0kKmx>6A%ncf(=X!(jP^jwAwi=K$=Kt zG+yRKNGA$jVnpwqyNuc+q2<^GhX(sb_*zN)t<$xB&K};3GcrD#k`gZsvW*F{C4vS} z^z(M!-7ZaS+TAs}nR!-PdN@=h%G@B+Xr1DvuKW{v%G4|cZJa9t-OYhdI)za(CD=?Q zJkZYt1Z5$oa&WMxV2+g%G?cYy(Lyr|^W5Zc(&+N@GT>W@Q8uZ0r3spd;=Th-^`)i# z2WOy^>TcEO@tUy{MZJfL`;V9?sR*T~S~ox5w&jWTtrt7Cu`Y?LowfBMb_y+p2XdW3q>n5zk7d9hcMY9j)$5gMS{};sv_oy;wv}IF6SNqMAv-? zqL5L1Cl2)~O4Edl?uQ|pj#MqwofsgLsl{6{3Cp8&dF4U&EBf91xY^a_Xy@cG#hbk-Q? zXOa-UR(@CESkEa}%b+>RjCFB! zafBaW_^we#km|+sdR|$Lovfy;vA3|YHqRJ$^o5^R7sc=2IcB+X9_mdza@lRejs5r) zAiWV4p|Da-q$B){(k?_qCh^ZLZ-B#*s#f1UZY*h%#b*ad6BbzqEM944Z)*wm=vARg zSs3gyJ55ts+fZSQJU*n}(LsXFgb_Iob$#q+3qbdqVn>SsQM);+dv>>33RYqZSfIonZv|6T!VMK@6 zFKv`7(x>{Ia44fD+LM-^Jls_(mpgj~U_g;7cQmS9Gu3W+I(MAkeF6ee3=t>>9jCJG z=3iH;& zg+U;OX3cH&v0>$9d3m|%SSm97laQ$6@+M{$4K*YHr6sH@P+Bo`v~u_uP+Hh?u&D1) zi3v(gtn@_V#QCO;7XZtd1@Gh@?#GizgwLw6lNBS!F((p16a=Len$;$Xa;LkY@HxS0 z!Ia;^KoN7IGd)p26cIJUNYGFcZ$uD9^SrM!=AZugE_%JZd=6?p>T3W1|MW>jK~yMU zUTH?;mX0`#64!MYnv3@TH7Gvh4ok8Jkt2bo$#OR| zAfORs5ki?@EJ(>IODn7`uJ10+Pfs<(gMT54WFlqQB~cZj#ZA-r=~8oz#$+;E08uKm zB8XDXoeiQh6exH6MQis4yEb-ar~f2;j=D?e4HD)N2hxK`An){^CF(1iPjq zP3g?)%=c&U()gOHa86Y?h5K3pz+4<^m`pu_5RnnVfxa$`z66AXFl|ZywKz5W{K?(v z=}Gb^|FNTQy!z&w>ziUJlLoo3BI~AmXpGcPhk#fj=bYSqHk|n$HSnyg)V1|0ts*2p zIqa$9BPGSzIi=M(r8Pyp`-^)I6!#r0=|5CDa2V}0T|gj^xfJF*K~sn+{)b~bSLC1~f?lDa)3w}+`lg2RR2+-=M2W&8p`5!; zFNp{MM8iY4S?OhI zu}Y~B!dT#)47xx=*VsDq7nx%wy>-cI8}6rB4*Q(5Xfsi= zYoZ!^#tBR4E|J*D>%e{%zXbIYj=r1DeU~SIGF&MQK-x(0?E+qFV$(ugfy&648GG-js!7nD6A4Rzu@v9toLHNdx$2a{YEv zM4%UBYum3D=jNhCud{lmY7+9!NO>rN(52Lx$Ej@f#|HZsF>x#wtjX@ z$m>QIgG@#mXiFKH#F7k+H=LNKO1XHkO`!dnMGVYPFJ;(e13pp10u&i5mEw5QM?KowR|K#I(9W+lfsVi4% z%Pbc^`T!)gr!-0umnqd}lZHmYnZhi5Zm1zCCT|$x-o5KNRZO6e9~U4eZVV51XUqBc zS142}rcODd;F6z_kz8SnXe*YYF4o6u^|9eql?A27n1b%T1>O4!dszF6rlC|oQ_8SF zDepyo_W{^BXj(aP{K`7P4M=Cj@NuvcbNSN2BPRGf1n%YwZ{J>&M1Z}BpcHbEj4|0F z(onIMTV9%*pBy>^qRj9hETSh06GdvPQY$(72uA!H;|})7?N&XseBlERFI*KC5y6?p z#%w`uLLjG;bH}#`&JQsOX-&KCTI52|4fCUbsBd%bM!o&*28P|v2C%Wj&?Ckb3EuB#g9K8GJhfUsug0(M>zPR}E*3;ES)fFD< zOLZ5p#D?M;C@t4nWw!4AI2=W=tu0%B2VAGGz}JO#H}&s+1WEzXuPDy!Gnx5ao2UJ0 zCEQPMg5D|NUUBvND1x3CkiiRc^D<-dM%WMor18v_I0q=`-pxGtP_Il89Z;AVi>@Tl z%Z5hR$mC8CmnIYX&#mX)dhd5r&;4|2|8pOZxm`bgoWaMAj^+fN{DmL=IaU_*@WR#D z&|5jU)ssV)e4Qj1L-8lNe@5$jB#uo6#4HRcAnSLqm*-iO$j%m97&4(S%Gi z!OHdIuo`Ox>>$uFVHQYJmgx@c6ryv6i~0^z6--T3@OV0-uFf{>;9L*@^0A4e*wm7_ zbLTSBvqoHz75D_fYv~HdLk69g z7ts_RmfgMwHVGmkuLVs@2dM5|S==5tf+H^2iKU;wK7mi_x1D=U1QY}n$_ZBxRHUII zf(o@W2QVG7rrNC4#1q6a<0#PM<;EPPdph-`!WvXH2%dF0`{VdM*ztW3@+ zZR#G8rBssZUYi+AIix4cF)+0c^(-KV9lwpYpvZ-7KQ@^`^4)N)lH@z==0kmL>6>!G z$VgWBND>*7MH)u0R4NHhYuVGb{dusHSewSG9HwUVrhqmP;8DHtk;~BdP~@PoO~HA5 z%dYX`Z&2_c4e)S(>}(vxviQ{cj8B*rMG*#s^sL=tY}tJWO+UN>Hx<~v`d>Z^O0NT= zH^WQeYi@!v>vA=S-gc9qH+7DM*^lCsfCHV8{@zXu`(scSEmyFk&4ycuBRWQqiOrEw zJVoI+GbcsK{+l-r7gW@3+_tSWSJ%1i$>QpUtkxY39o=lEuU^`{VYCIm(-3c~_JPsd zG$rPxHa0fvdWt9d%gEejPt58#XlUH6uiDaE9up%8C`k!O$|_<_z&N8Rv^v9~KQP(n~Uw4n~zD!PnMa zQQ%EZc6w!6Kw?%|QBGn;h5@dL-jzQGqoSFoE?s}5PceS-T_Rt2wzPFuIz?qfkEsmH=8 zXVA2$kLvD0Ad>|*W!_iBPR!*+_~gM^0s*}iL9eEvLPIn=O|4T)=v#}9MRAIdqk~$C zt0;Z=jG?B+^q8SuUeuvpd9c456CQ5pll7)5(nZ_mcXq0QWU$i;#Uubs4rkF&uPC>smSFaXu>>IlJqr51#qS z)TuZA)V=$qjF#OZcA`5&!c7OA!v`}qs-zsm*b9C0tfkdV0qyQfEYUlFmx#X@<>ChR z^n5C?3B;>m^ZEB@pfo8-Pnau!u{59%r4ms#j3EtHN>M4_!O?54z*i4=H}5Z+p!8Z0 zy+H)MaX0xpP0;Jlv3&WHpr1#Ddkrh?D2fb=jHF&lOOm0DhyX|N0hqZ2x|^}vQs!ls z-+Ad5d)Jnb!=+5jlFFnAV=IOZH%*+0RYZh%tR_&5?J1*q`;Y%TMOkln{p94@R;+>= zDvfx`ySljyANuw}pFAQ$(QyzkB979R)V9XxGfNFY$yvqZj)9=K=#dW!Ux7DB)TwY# zsVs&#<+=0bg|OqgIVC6S*pWd{LPG)3^W)m4&Yp(0_OjZB$tIbyXzatbs94dRMMh5z ztICr-prHU2C0wd@Og?Zps9FE`;Gx$UhhWo(ZBuYgRQU@DDuWw27F47KJ+ffY>Sd2O z*jrBnC)g>j@G_F9#U+Gr=>+VTXn6kVQk{|8g(;!*IJIeo;76P?OrBf}>8VXAWASwIHBz`H;tw;zC}8n1_VVq6cKBvZ68=)75wy%rQ+uapj-#@p}G52lX3`n%>WPt%e} zO4c)i#mZDzuPyUQO;XYj4U#3qZX`_zqCL`7r=K%&B%W~s#QWdnsXpCj(Lpj}-kDNa6>@Ratm7%`&K^|t?4xG>! zaySVZ|uWCz+j4_635WO>eE!@{MJ0XmrvX0{5oCSDtZ_IUGP z+4}AKZEe;pS-emiX2CE9lN%2>r{mawY8R&4&^-p^=XD<{P4Xm&jeciC*ATK&@N&!U zecw7<#?!!vheM3EeB$g|f5s!1bHL7)h_O0F#n^eIs03 zxb}hZvI2wP$e3A3i5nLPN()bKPDH#z>rpTF85?M<&xs%#Zn!#T>7)08WSH4j6~yn| zzLwi`NmpArF7Yp*e7$tZqM(TArStD+lFBcsGoy7stWg9x^k29uAoYrh3_yZ}xOe3m zduuB*S`rv6P=GBeE@+s%G<5ilj-4+wbq^&Ni_kOYl+`+}d6dry0c}(fD7|1A2%6$u zB?+)!yJauc-RiYxXP}z8f`^ZvqHv7*0WD-NFIPIdxLb&P6r+s7$~t+7eO3Et)!K8^ z;nDrxLC{aX0$(NI-JHKQ%|vgIfPSVqmOC8utMXF#oCpfqd3m~uTyvRSaDJ>69(x)C zxD?3VT49tN=#)6C8qHk783rH+t#Sj!d5Gl&0O#CD=R4+e&wMGd`1A6ni4!~1S z3@XMBz4*kbZ90wA$IXhpvU=nQlAJ_MIL1I4c?el60&Lv-jXCa_pebksAMNdGQpf4? z%IoOu#U^EoAS%#MwSldQeNe8DdHV-M_}jU=Ik~ymAwMxD%d(1V((}uSaEVRM8tSep z%ZRKfFFe#2yRA)r1w^L@U0Tu|DfAtA>0kTHqaYbPVG5y-JTi~?FkVP>WDtM^U)l2b zk0C$_S(Pn$At#4p+xkcKamtfJO001`UF`z=y%KY(V7-+7c-qs{Gpx)ktQ7cUNxWAf z7XnlyS%Xp8L+L4MO3>0sztYrTV3^t_nb=f=3;T{WclB*()-Xcj=;qC@vR?6^qnlT( zESOYOXeDm-TRU}Wv0eo=od!eVBac4H&fd1;@dxI25|U)h}+5$uJf z16gS+LrO@>G@+URY#&`&tvf$lZ9CH%wt|JMX*9h8s30Y%3F$O3RH5??VHMk-B7E|L zA_3)NAR_38dLmOdG%G`&k)o<7%f+=SF;1EtACyy4nUEMK*5^44Au{4)Ae8{CkxaP& zqOgCe6b$x+$djm4?;grRi~G%m&dXP>^0b|gPR-6@5wLpy0}mpQ#&G|^`KvhL?Pv@Z zK@Rt#xr@zs0GAh6VQLKcHWP`HQPzpBtuRyj){)%rpDB6gSblH0lrtH#Smw5FP=5r( zD56pPl98v0aHPoG)HQ(fVsinRbheB?&44JH0D=d0T>SZ1R|(V42$e0|BD~@|XNtP$ zgmJWQtj^!M_ef5z5h_nH(<_(|RUcdR~Alz3F&?bQB%|Ou4BqRE)nV_F8Bl<`a zl%D8U+y}j7g}Cf@`I&mEolL6ClyhkjvG-w{$7aW{2kkcsalj1PA|^mM#Rq#@B*i## z53?xkh2bL=AzDK&TNO;ss0*NDl+&?~##>=w4(0=!o1)7Mf+Tg>(#04Q&>I_EyG|13 zRau_PR7pdDGT6h6W@K8^4jgoW5ZvJ#x`xpi6;?Ov(hJZNnLyN3%O$kL-w_gk_SHWq z#Lw5m!`=D+ee(f8G%-nEQrm`V7oLF-iO}!T`u0;J8k8VA+7$y85}2q+Mxh0KwOTPp zRlLqvP@bGqfli8cY<*T>VrH>gD_HX8RW#;w9_ru!Z91md3NpTlOCOpVLfpu_glD9x zeM*N;V|K#~hRB|0uv0+LRm)*Q%T}y}Ie{y6okQKDo5CU`sHNo5ur6=tY)VdvJkX** z=LVJRD2@c2p8fGuc11gr7>tBA^{pc!G%>4~E1aVC$Ecw^BZBrJ_C`$58tS*A!NF+= zl@tBohaaBf<7zG_n3A(q63@dg{)?SY40A8wD3AOE9Hsm?dzskeRuh`e2GngrnHSP2 zkW_&43U-=`w^!hE8mDI==yV|$8d_T07_Savq=dpiSEaV8t8e}IK!Q3fB}Ly#ahkvY zpj4Y0r_4%t_q?|=MocRsW}qTH1Q`*=es_QK|HE+DAX$|WV@?Ji82SJ1!qv!f z(W8RidtVz@*XoCRqgiyRu}bjvbfKY+Rk^A+U*6O*F4+X z4Nd>)4ubym$uHki{?=79)DQXy?w53fi23^Lg!m#B-gSw+R3|9n962gsrs8}(7LBfis?)i8A zhe$F4STH5nuys4NRSo}z)ZsMIRtPN6srx;ZhFiEJk)P2JEr$UemwWqw{-ML}Y;K6~TVEk_1ocXujA zs-tGe=<)uTmvK%)a`e>brrqEcz6Yx;9cWULQA2?-KR7N>~B~w6|D57Z5iF+=AHM^@$0o zYTvM6F9vv2Q9eL2wOo0yEe$gc7RJ^+s7@I6ph(-h_tit)QT|ant|anc{NkDXkrj+V zXJeJo%-%5Uh`0&u4?A+t=!TL+54y|k8FoaZ^;bv>DjOipPVTw!s_&$GsRo6e)}N-trZ4EsBoIbT7*I_N0!m1#MIOzJdN|qYp_jD zOpGhb)utyaMY|$ibu=d=O)9ic9_GRc1`x$>LAa!g??2uzUHr&BM2EUq%n_i}gr-U1 zE4V?uH#~FLWzC$GPT_9BDi^B-*vE6g3i5Nu>TmSeTS2l!P8G@OKz!{>hEDO}L8Wfp9RjpdfQygEG7G5TA2SiZQuEl%PkCe0yhaf{2;Eq^9%m- z?-zYc-%Cq;A`$fg)mR0vw$k^#(g6)+m`L33*U2Rc}mZHj06|K!| z-#>Qj?Z@8x-xII>asBpv+VTx`8&7vlk7+s7S#*_3nEgpeI_^ z(7AD9G+rHPZDXCAle%~Ns7!CHEKFG2Q=FG)#BTu*rLl)jN*oEr_s2G-77v~3wWkpq z7sh+gKf|e&xd^M3^BS{*pV^Z5t-TrV9?R#>Z|zM-|MJ9oZE2F%!}I31rP)#>)ac`# zY?ft~wTd8$MPH)K-N6!_O|DzapF%Ev_dCny$kw|XSD9qly7Xw3uBuGqCi|B zT&!wiadrKr$#|qj-?--?w4loZSw+QzC!xrI=nRft;iJ<=hJheH2 zC{{*am@Fb291xW&WoVE0b;a-ixF(HBY>BAl>O+>_^$nP)9k<1RZqjV-fAC=@O1Ztv zJ~$%8Gth07M3dp}?u;kCmx~3N?bT_%nYw_~+_E@z6daKvIp?lmZ)=Wm$b3dC!y$-x zTx6CuCFqr}u|{{FK&zE=!DcrvKiL1o+P03(XBi?Y z?LYL&vBpi?Hh0vf&qhu1BS7&9VfOdJA`oRM)L-Nj!C?^}E*40FiRYG+uJuZkcBkTd^_e7}! zeMHXMbUJsngrc&c1A1ae2{s%Vj7v>aJ-M^|{IN~j`_j`AVrcKt@j~rVRg`FBu>=R1 z&|n`by%g(Ik?zIWaels@sf|0k+v@-%eANw&yHGe95|t_Hz!-f7QC2LvkEAHinKPF{ zA3H3#OD&fhNF|H%QXzaHK|ZcdHirC~?3^sjXejeybAPZ`HQ5x?R~9LeMq|S?-oVLV zyCNop!9g4(-v7@jf>vTn*25&2Uu0y^#>R@eA`F9Z3&#IN2LJ*%A0Jm=+?I2!Uz%0g z2nz=_;nNbIRS0BOFPpb~*+L9Q{tw zz)5fvjgm0YXqwESo4dc4SknZW*<3XAM^qF;GKK^w4Js1nN7JUQ4@^bft68Ind_v{c zqzMw2cqh1c-8Sm1JEwtDz)lnU6yVdOBoaBO$tialK?T3uiuIL^tqk(Q;4_nDR11>y zF&8(+b5eP3Yobu>jSXXzHdf-!M6AF>yJAx0E-UcPb(v3QEiH4=!-yg(x!gpGLQfaW zx!cob9y3CI?pD#dER5+91mPQn@@VO-D*#?ncP*@L;oQULw!1MeKC=W9=Df-lPB{F+ zh1LPg;AUnTzJI1HG{BvwL0JMR8CUGOP#PPwijN=P$|z~3+Kg3wf!_V)H@?$2aTdc3 zQsP1J(IcwwaaLhS7cuD39n zegs7CAn4~MptnAPQn`KoKo&jAjSZ5mEirf!g~u9buvJwSw)GCB)NbO=Xob46u?=4| z|KLzIvKYBMN$E|eCpI}p5#~r}37S$TdrNstM0In!F50EpU=uEpXe2J|O%FaiXKh35 z`1nwJQDjC^Op3~z?pIA_NM(AEyWLV{z{-x6st7+@|KJdV+{w>LbScLmz2y) zixrP%m(^1TQ^qP&lhsmP`dl;bndRrWh+XWP_dfK`-@Nm?UQD_97OyfoS8 z#U07SoZ)E049S!0HDD*R|FkX1V4(&Z9OxtQx2ehSM|DE6&dbd{I^4H@n* zOT-c*MY)Id|Ni-|M;?8|YQ=+yZyg-$@UBAb1s~<~z|jFc7qK=3`=GZXwk0ywKyr(< zrCGc>{LHW-C@h>$GQuBSl(Qrvkcv8m1wsOF>fhCy5FwG!dM9{C5o&jAF!tjpX^`tu z4xpUX$ofuK3*tEDo$ww(B*ljl!=vy2=hUC4re6EiRQHZcnJwFmNip=`DK;=UilsiE zt6Kv^Z|8RGEeWMpgXkRu{kuj`K=f#z^w0$17;Yy90d2hxe`}7Rk%}Sw!E@sATTC@tgaQym*9I2t?Vxj$TMp3g;_gL2jl4* z8O@3h8Lw9oCqiNdz7566zND0>BPoL|UA}m3Z+&W2Sq^#avkOPoLIjKyoaB%g) z3iXlsi!7|H7cZDgh6yU)Ijgc8z=~W zLTjoDwF+@thT(o=P6)!|_>98%xR~y$xT3xwuE8O;#9;0aX0%$7`*ts)uy5JXK7IJ+>*;pszYtevDg zK6}lO&JVHk3i}k`(^SG0IH-w+UO`a7alRy5Q(aZq*x8>NA61+hh7AywPcnVFIwhMS zV1P$3|I--c`i!cKU=c(qDu{T=0y|-%Tp6tXxCs0cUG5`~JYv3P4FwWtJujITi zG_f|E1yQl_QR6E!NUNR0g`ryyH_koO|Eb&4%;vV4xw$67o_9H3BjF>o+`_J`u9=TL z)d;$zSX`YSk84Y}y)KUOS12U#WH^dZv``eT<%MH=*|zmEucdy&h2t;%;+3CIJ@L*T zwr(0Gn;|*3nl65GZU_YrhP7xg-;yAD8|s^GF({n{qIVGV?;Sx!E$-&p0A?a7pW+EO zS>wOCAr$vfikvVcw%Y3PbDJ;xh+^-i3qQ*5Jr?BeM*IkQDH%m|=tX10?QP5#;jHH7 zup0K6uX8)_+%Fn8K2}iOx_Hq-3T`dM3Pq&HKxIs})?>6H6w7sOxQ*1`%*@6a)GWwJ z9X{-_u^uD_m&K1I~Sb!oiknu*n4*Y{2`Z`YMnXJX?9-d?g@f*qHF811lqrnd&>1Z$&MiroBqk?dKBt!Y zX=0`EaSA-*8?u8e+#-__1XhZ!3N{}Wl-4`0F2B4g{WjAm1& z%7DTYqYSseO3501_<_6mgg6DN zIka7Y&k}@POc~*N0dQi=OhYu(lU%r!zCoeh{=x3v{w_{73`8NUrLN1ewzk3t%F@nd zwVBx}=P-iMn|nudyAS2}9OR1e;YVu6+}H6TO`FN%{;Hm+lPB}3d_o?Wvp||N_~;rx z5)qN^_H*t-ZD^n1w=nDg5DWrxh<-=vz>{K4yuRCg7I)a{L*h24BgWnxxPkFuaNwu ztK7((`2Od9{ld>FC;r>cArdy*;Trdnf zvqv6!;O?j}AA(t;y_c?7^blWxPu4>Z-1Ff4mE>gc8z8R&h%Q|Wjj&&{n86aVPy#${ z5PF39*)`;Zt}XK&De>tq@WOI|X;Ii)K(zj;A5JltFS_Zng;B4@E(Z#(47FDq3J@OC zm?VJ-5^K19{6~;Vb6pt2SSF_pemyz{2G0Qf_;C zx`YI{hXr|JMPx`+r6HtbCC%QDmeRfZ`LPnuv8r%q zE1^BSdikTEOU1~k(xDT@{YMLW59f6s$nMye)wajjvP&rH&XCc%E!Ti3y-eulHGR$5 z82JgeP3-e30t$S7w2+&m@};g$BHp%6eN&Nw?l`SSv{wve8V#`^EAv!B!QW)2k*JL_ zf#@_1b+!9;p*}W7wHw13Mzy;x z(k|3}8681mVL4(^G_(c1NB;1a|MBz-N=r>(f)n#Ucm|a;JKvaZ-hCe-k%*6)Qfz3Q zwxrskafOWm0B~08m2<@SOkanE4(9XbJ#^25_kB|*bx)9aA|`UMnD1l1KwR{?$T?xW z0T2~&6!RK7URJ9YvM`H>$l^+foFu^0+QG%6Ai?|8h?;3p23;`GMP7uKRV?bV6a^#L z)=-qg3YaeA=@HfWwOY{;up-sZ*4EnF+a2Xp7?PxLA7hpgfOHL3L6{T?SpX*{IL*1i z-`WXBPitcO>HK~E71wl6moL4Hh z)7Uw?ggXPDGaS^^4HdlpH@9mEUd1z+>~p+`sq-hO!*S4MvZdG{h?#MbWLgxN6>4op zTxLKNZ4sXkG`bwK7!~Ecc6YHOzJ{?D5R?NG9{{XzwPBWl?yJK>1LT2g@KvB@>*KtN zdI<?jy0WRc;)o|tvGdimhTODrpdl^GRRyXDAkfzp8kuQW|QK^|Ng z$umaqJpyZp4x_y|gbJDxhfXveheDDSqQd?8<=LfmI2uwqPN>#O7G@*FBzfW(9KQp4dO=#$KVg6P{)2|y!|LG2ber`X%+m3?*qRecB zcv;{$zqTrj%?PHoyETkS5_)WBM`LkneR@mMn}>4?it^G6YZ-8K2~tsdg~rLlT^^n@ z2f!mT*}-y2e^CI+*pox@ixWDA_lL&Um8AxHSU)mW8QPHMR%dWwums9TrxQTEXNfBa z%0hhc>YnrsZ3$h&>)9U{ud)I}m(9O#$s_kJns*PQ3ryC32(IO-1(s{fltC6w*2_plNs&88`$b=|4& z;yjm-q{qD|%*#AB)H+e=qe;nzj8fEnY@Hfjh5LM{%L32>A1G{Ei3flBhg0F|^bDnA za!y%%PMstosB6~?jL)iK6FV@?4{i7Ad-1L^rTHjwx7b z@Z>os6(@Pmlyk+RF2^Rc$5H-P;?bh6J@_ou`=Ry&zMzVTzWFXnGC5fKyA+byhbA-Y=(cHrPwQoPmK=Zz5 zezESvcW_ng9v&+y%H|S5E8(LZ8PhmQIvy2x*I*^#Zkfq3B&P9^3socxwptFm*Y>7$2(j@9rC_;%N?zj zQ2R1l`mn3zJUARuLvMHcC-=8zX+78hy9@kQEu9-L^JwcGNR_NSJF41PFPUtRurp!| zE2?7xogRI7k=dd}i;(lcN0%;Jw#Hoo%7TcXSk9yh8 z_cB2#@HrbqU914E4+V7CH}nxGU4NUREprx^0l7R8DoEXad#9ekIt zO~}#*KohHsVR+5U6SA>kD$LRuQd8n$CF4zT7%KU@Ssd$^?dg;=zQX3dr$g%F;Sla^ zPBoHi9u*TEsWuc=w}PWX<)JNGpAj^``c~|V=X>WO*ddy&WZ=kPfm?{n0{9TACh%9_ znM{~ug?r7q3n{wDs%cS_ZQd!!bVYd)72R3^L}zH|GtW{=_?+Dby`spSMo?1<_m);g&&YZtSGZPT1c(;bkRZ>?jHjqe#X=qBsf+Q1_W_Dr z(j8ZNq9TY=&h-xtw)TtyK`90VNE4#8My#b6y5#`3#&QjZ9^NUmvbpj8?L|>o8r?f@ zx$WwCe5#Qy<00%~x028mZCX)bZ5JuFm@QD-hdZ*IRrLji2+lE6|9bg#y8rG93M{R`lQR0x+Xp4XM<`{tn>K-AC6G16n_e;b8jemMh? zmMiAbb`lYkO%3-MfLUBfE7_8QU6+QrFMaU7ZveFSJ&cXpH{7k}x>>U3xLVG2x0>f+ z^9a}pl=5|E0i_J!J6kQLMw%e8jE}GcNBvw^x!5eRwKmH)YIKpdqb1&eD2bt17wzj7 z$S9prs<GS!cM z>RtET2RG{8^Dt5EGxx^Q47Vv+g`34-^Lyz>G)d z-0Nh$6h1@=6hvoO7BnsFJ;cK*Mo-fmg%4dtM#YNmM?mySU-PQ+>@~nC2ySPVFaSC| z20FU~I$KF3&a})RD9nC+gKTeiY)NreVP!4(*d&7jqBzmx>%@FZWo86n=2T5J+E|2F z$hoWHZD!QD0*D5N>LYDXl7parQF>K!L0VxwCJ7|<@pgE)+LL?Z0#KH=qCBe@(sq zZ&MfF|LeYIem->Y)&8*!Ii35~j`fl-larx^@&9md6iRhWkzm6Fo>RT2blf<3d3Q_b z=Er_a=4j>Ed7)EKI3|K9&GKEX5qnz0V5=A$;uN@}DVPiR_l2M{fO?CSdB1Wf6+raH z;q!~yDSTSC_W$5{`>E@*#cO~0mVURmt^AFED3572dJL8ZQU0QTQ&`(=xq4w#fDJ>I zSPMF%%-vE$=J59!S9J`DeRYEsYO z9p&89!wP>{Iy+iyS_L?YN$DdG-vbIlQd!@4a4}4j_3(n#z#*tfHIlD99)ts9qJ5S* znm^2LC;}&CUU8Xj3k^~8CHI@Jc$5|8vx*=O(#OWt=hv$Fik(ed#pHn({*8SQ$6zK~JUm>fH{yH#A)1x!tX~<_!P0%hnfI|r7a+E59igo;dBYSW1v1)uH5qN(KHV1mkco<;DJFY_E7K`g zFmeVguY$}Ef%6LW{1858j3BN?(30Bbot>&EHg$fB>x2a8FJ8y|OQzdj&ky+2L8^ZTh6e>QdMwg1?3?!AufPnQlJYv>v*s;X-%Q5F{(=gyl;S;fZMEHpyG za2LTrhWx7H>c;NQ#-CiMeEU@Og~`l)y;|bZ2u7td!Wb1kj=P#eKuuy^DCYm2!sjha zOus@X{iiz!`k4sm-v@#MqG%jAFB75}p3!gXEp@V7IQ5i3NqY+X`icS=eZjz`VdLYl zA9f8)Vc452md^o7=RNpMzCJk=NYsWb*giVIniDra)n6PqR2GCW{a97#E4$PBDitDX zQplxj%R)Ew;KOrQt~M7*1K)ylJ~^S|sLs^9D+F}S9MCHzas}q7;OGo|nr;a2DIzEZ zNkU8`y#?%~@(F#UMQUSf6X0$>UIvJI!$bkmfdWs+D4o#*y~-W!@(m4AhAuwD(GTmo z0wr~GbvoQD0|M6`e+O*{I?Obs3;u99U5CR|hRvIV`JXE>YJg}zE<&?F^eP&vE#HWB zU%Xbjp(VbuxeuFGK>FNRY~|YXbrVk#W{G!CO}Zb3MC(qyH+lXC+n)UCuBUz(7UJKU zA4a3j%h#Wm!!-fdF~h_5;p~WlQC(bq40%;yA->+uW{7JT+Iix+SFu{8Z%X-{KHr-M zvoMRGGb)l%WV)GcyP4b&E4qTV2oSB=M7QrM1pNrb6!G#Z)D$fgJ{dl*Mo`2x#2Xyy z*PL0at1U?(;Z^ilz-$4tNgAaMMQSEq@=_v;i}QjbrE4rLHBoM}K{Qon%hf>P%3a$;;goJADJ~%5!wXkumNYQ*$!(h1i){iO z?X4JG;WLAhmV4ykuG_Y()1+7A^_^+h{KC-D_qIIw%e~M4_S^q5MMUVyZ~u17h4*`Q zKiAt*n3bJTT9RE& ziup(DsI_oLB;x)+X9U<;mtuc%Fywn%lAK zUw`@TD(47K>$!Dnj{{=_FN2`8uf$;(O04+AVqCEGvF|fuU{L!z1t>6i3Gnv>J3&qH z>&(K@8+4~?3R8g`M0&3*PVlfWU$NZWmO?HFI#vpZdI=y}=y`fXeZoXWdrBpZ?VW3D zqvep%kML1(^o9K$-4L-{$Zkp1?kI}N%}GO(Tvp$PC?+jENmTF(P+Gn|G7AtD!p?{a zfrif1ay4ZeptHF52PPrl1A=+-BG z0)o1@IyY^8ihUo}jxvRQGtL0XF^)h;W?CEpk5Z#JEcQ%NM_6RdY+G&`a z!ON>5Q{`qHZ~}L0-Y9$<=og13wMWA2(5WrvHRC$l;-Ccn)^0XvNh{%d*C}`C%=F3{r@@loj)FY{sU6~-u=-}TlCR9 zyk;SRsZMrk$@J{Zo5oRSD-Ph`D2>vTco}Ulh7&0Nl3P;W)((P#h-+5N6+skIOQL5; zxMbw;x9HwsV9SQcE(|Fo$Acw;=;0UtRhM4KFO+2UGwMe~OoZ1;7#q^x^%Xvrs}~g| zc#M~M&j!)6W12Ig>XRdCjNA_PsU|0e>RQ_x>PkL}qx?D2AL-N@bdn@pOni(hGzhYb zc9(vb(U^ka5dLr`1+NGd>p!8Ei(x`y?KVT>PP(Dlod+?jAWq~84Sl9_*NX!OUmrXE z_J%XxBfE6x=O_a9pN7zC(F-HX)H_0ENzH47ORsPO3ub}5hUj0M{Xzs zpy-wQ``Xizl~it7c=O@~2u~G3lq<>NFyW?c^@@xS%NzlQ8Hvv6Jykw_v0?M`ho1k{ z-lu;C4drv#w)N8B_=b{P#*CEKHdbZLLoOaZ&`{?!a~Tw7%rsx;USaT&%3?x&ZKK1z z!BHy7w5uaDS;9M_lk-1_Q6>D1O*v?{*Hq}2`)qFkR(kVs^oBt64ubwYA?OU60(;E` z66j+?x*PSwkYGO%L`9gS+k`1O^bYM0HbB7v?%{qm*TvB%1_J?F5l4Fp{i*B1{O}xT z&X2^Et+j8ga^%?d?!?KF+PM#Y6A+~@MS~LrrLH^Yq5Bx>KqCWBDy?g=@{GoH2*HR) zs9FS3=I$98oH+YF@uj6k>CnMfMh<_QJY-nff(4JV5QHjR&Uuf%2+~wZ);sk8?O{CnF#1L9CWls+CM(YStKbgQlXR)e1^Fa2+Gt4AqP}+ zq4j_$BbDjtiHz|WjRt0lmM&cch%zhu{XJ1;OCDUXcIpTDESz^=T=mYJ-0bn=Z)`aA*1F?w4j+7_bH~&58_u`&4yG4W))&TN z@0VWOSf1iz<={%?1AtG8vdW5eEY!O(QiU#Qurzq6ECiFk=YBF37#czNt5lZ(qh)Lc z5JhqQj}4-?Ms@clt81 z1w9AzE9z)lGEkpeS_4_Uf}ma?=vavWqQk|WLxmm#1s;%5j2Dg%#TwLph9nj8%+i{M z+|nw2MuC8%ruk94-}ExiB%M^N)8u3(#V5o`WwOEbTZ^)Vp+;$h4`+hHsz%^y21h>x z(W`a2aTPQ~H>39kTtMUO04EKMlDYw6E9o6RO0IRK!|7hdc z_nWeV0A}v#*#2zurb~4j9z&xmv_*T5P#b5^#RQ@|QyaDm14Di$t7XyM@*RMzwSVXiSK8U6KZP)pC_;!|C^7s4e~L8L$CR zO9qbBZ@k3Y+O^}E&h1aNZoXK*9yWixpyxnl>#qE~42+g4>YG%Gh#)UZU+3i_QO=9C zA(aoswNAok(4s5fKfj`3yf%u_FQ$QWIuD5XHfu{gsrUTDgXk^OD7|S=`Y9m#nGlrD z=$$_3|6S62blq4)=qDj4!!0+8jyLkiE0tTcwbx)FFuAQE$k@8i&3+}7-j{Y7h(E(T zR^*^FJoTeL#b7A4S#fpc`)+ychh%ZHiR50!~tK$I4pv8lyaE3!t!~kg5?w1hd(hWsVB+$@j1saNgh=~_mqBJ_4A-{U?&>JXO zaBOFnUukL2bfdf7vWwrFdi=e=o_*`TPrmktLofc@-e*48{^UsmXi8e0;z5!qQOI=vbY zC1KQJjm7F!%Sc~AyyIi{2vS(OkJ#JdDKCxmck%G1h3w_wh@485ltmdVvF*C#cfRf0S7_%ApQ3ZUL{2nxzx z0ntysF;E;B78!|`0^r2fGrN{M^Mf;YQq&a}Aj*_WW4im^4k2NR(&gcOo672%db;Z8 z&wuptcmLSh-Hk@6b<5@B19IX@=r&~**I;OeD=EZONC&Ik##g5FQZ)g^**a}(B=X&= z@y8&Y87;e?``HwZ-b~HsRkkf$X|2`A1D`y=grJ@*YPrKjA`^87M17+Yp{>PLb=6I+ zsfmh2rEhtrl$10q=u)zaa!M*iC?(-JD@Cq}_RP=+3jrgcUbR_ae8r;<(o>!xBzv1o zjzoK-bpSjb3#Q?g=?PJWTXdDEiU3hlL$pI|h@P%mdjY!By6stJL%~SKS~frSBf6o4 zogI1Qcc)(e)48|*hoH10eYlwqQCMakhBQ+E!_#p^)%b;t_2HL)IQ8WF|9AeKzd%Om zjP85(S358LjEe61Q}2!(d82>-E1f%^Z`txx{lpU=f~ZNLdj&)VVNp`8P|Or)s9=UZ zVXEAk)|Dcy80dX1YF???&aT|zH_HM?Su-(hbuI0J#e8zMGQkLa=Qfv-w+uHtn#$op z9#mhEL9t5n6SFc?bUFbZH zz);pec_iIy#)8oy`y_TzI4SHs2z=&s?#mWb&8V^9?ueNM<9J*KixS+OZI%z@yUd^uRpL7!di53fx}o$Y@X?P2(XSst85q5KB=oOO zsy}hv840~Hwt8a-3QSU3MDZxXBsPH`ZHVGN@1boL@6Yer$EG=hqd3KM<@qFNqwCu` z8`?XEx+;-h0*x(OpWfV)4lC{3bqO~(1}??kr##BfKdF-zAdkV49`jNrNze}`rX&ku zNJE!YXM~&?V!gj}yqw7vjPVFF+0q=d`3>SHbAW9#L6!FzA z;h3R!R%qB>AxX$v81PR?Q1J^H5kYE1<_1vORuB#whCg+eL>6ajp}+X)@RSlWi}>-R ztfE;sD#(kjfG7>owXr4ZOdz_6J{+nd7zwJPg1%#=!>57&hRI7pLv-&eLx21Y z%5V2S_b-4bTz|vq_ePJt*}wnQu3a-AdUnQgVTOqsQ0LZ}K(u<(3=N$@PymJnb^@Z) zCQVl?CT9K#Z^Q6iq@JXv;I$;;s7Oiio~>@wpicR(bUn|+TGL9*QZU*^YjfMcQ#Jy!Jp&9U}3i6-UsJBJZ}Lh?u2`DW1(*z z=qpBc^BN(z+(IixRG}Wrq-egW<3sW~TH#QC{CnltMzJ zWr)|B;Uc%$OjNv`BDL#kuR{pt=;npLJSLjm1^!g#6P13X^xOf_k6eMjHyph_h<^R9 zejhCzn*#XzmC50 zA82%UUHA;uQb|RQ+P*d`JTD`bw+||oqxVmai-Iqvr6o$DCA@L6 z=-}{R4_#U={#LcEop|SFWf?Fq!tf6ewYD+?M3I}}lsk9sTnvQy*wArgC>BdUtlr&2 zV*ybz4**NfG|in|ZQVUEb+D~E&5xhr)Md8hff;)&K0-8@k%?i=7@w%e0UsqTDP|Hy z94`=O=KGhqM}~US=MI)9a+oNt@1}<;F5r`+p@^W+P@2c+jZ+ilJ$XW2UZ970u|^09 z7lC2s2Axra5b0Yd9* zb{gup0bR*i#SHH|I6BOGWL~5;v#6%cNmUPZ0Aev?tE(-kY3+u9iX3!9U8I1Zh3+s> zTeC;4S3QEs95{*`w7s>asPAaUhCCT>JJbAd0F;0MTC^eDU7_(X-$A zGmbp3A1+MDET&S89TM&V%A$4cS?({HK$JVLFi{aiVWR)K^U}{ZU-;qrQ}2zKnCMJ7 zx2n3ltiW*m!X;x?2I}07=JKSh(xSrboD3bUNCC`w4w;Z0A5Igkkfz3+hs#Z(`Zxn{PlcrcsRT<|Ks~ z3(9L-+N5#N+zi6xK~rz%)q(zA+PF9Z3;K3F35c#(u^f~7H-9@ta7s*6kU|=YEh2`= z935&}I*=*hWiS2}8V9x(i`3d!MTG13zW4S_x~h=6YRWAa5VT6rUbPoXjTuSF@p3+{ z`q5!p?>w+-m;3}W38JWUw`yP zN!Cz6a%VwRQ&q8{yrLwvVGHdsp@f)T$i_E$_C06{2KTb~EVPkW>R@_MWC*o(bd?uP zcny*s4GEURCjW5OjS_#D?04;y7Dq z=s6cbbWQ%fv+A z{a=XYQ$L!*kC&3NHp1q~4O#&~e>wI1&!?XK$rKvhC*S|ug?Ijkfl*UW^j~&d{Mn`p zKUin#iT3S#rNbmFs@w2*ab0IiOI=Y;0vgfGw!NG798JtBp>dc|SZS)|3Lt9gg9;!T zSGIo1^>B2$&3OerXZ|^Zqau{1%WR6`9QJez2zq)f4tu}$fzkTf()46yYnhg=CskaH zJSZ&C9e+N+Y}4+88`ck%=EZ}f^>r11C;*uh7fpBoASz;;xXjH~+1c5W04j-*Ng@IW z%pshorZT^-wOyt+l1WFqkqB;js9<4KjFb@g2bOyj_3WM4wxezHh97qz_Ul&det9^06^MTQ2>K6H#r>3lmYXEU zovkFgamf7WBfEFMOn?SLo9;a?GO$6pth%xgbMQE2XlngtN`IJfAA9-VE`RT@d!PPk zYjb6B-$5Qsv(UrU_RNSXEj@*l81gb1424KhEG1PY*wBUFLUR2!inMyEYk)M-C!xzh zQRnC{!y6x2CI*BUwIhS{mFOq{-o4lbr-J6Za7wkrU$dWDc}AgWBA&BYYeVeGK)xG( zd$J^f@~|IYtB@&4aX4?Xh}fp?OKPAilpASeydA5UE}O}U(V>(3`&`{SV( zf3wG=&Ye8>z3~%o4;^~Fckj#X+n;UPbcwvuyv&3>Lz!*uEjSk8Zh?|npP)A;D~4;7 z)ivc1GI;Y0f>NiYUwB;{g^UW=Su!q`cEKCS_v+A6P)C5$@G_&qwpiy-o8r=%=}xJW zBNQ-GV2tgoh%HTzEJzBf&xue)x=Az!u3=kcG8*0W!_7mTRAnm}y)DU&k3;$#?!A2Z zQfw|}BPeZbdZMsKKX2Fgq-2~RJzedX2JWdzpns~81~HeV%P7uC6?`k_Jn&79Rt4RA z&tJUs%kRICmJp4P|E2f-6RV@l@^(IlyjdLb@WS14;d=*O{N3SK{!lso1QIh#I~P$% zMVC~__l^)s(;w#5Owa!a%4Dw6M58e9`s|j3r#9(^3#Z$nz+`;rau+w(Yw(hJ-#ZBU zS+2ls&qqH5(K`q#DssP|9QVewxL+rNei7`P`PoCgvc_~b%CM>RTadQSojZ@X45cib z!WX0N_3KWtEf!YRL0G8);yhq)3*wG5w2n69_^ZDmd;@R#@$o^XA({MRs~WEkO{w4J zX}6fE4~FfSRV9TA2L|*tl;dJ@hh(8n=^3d>3J>y7gTulYY2Z)Hoj0$fINK#q!BF5z zr?4We4NY8}@xf7UgP=?wq7_0~T#(=s737F~i9Q_jDtS3+8Tn<5|5GHS*+w4=suZba z8KA9DDE4=`LdM7_4!X&@D1M4)vw@1})L0)AjtXQn)>PEh3RZs;I1!4Tf72r_Ey9RP ze$Ua8LD8=0;>?K4x|8p1y70ptmwvwQS;4F5#A|;%`_`Xniy|EoaP-FlaEc2|rI3q& z8Hg2V=$n7Smf^tjzuxuKFPIaZIP?D4v9|^fe!F}3i*4JUX_&m&(a~I3(_WsVDa}i& zt}aC^TGiay*N{#_6kRSflsQYWkPA5j8y5TL6U*}GbQn9oP*l-3C zsGA8#vsAXFdPh=YTQl82(7__Fy1McteGEo=8(Y*_`apma`p$6#dA3?9DbG(D?rRw7 zYp5-ZL;sbX9tREO@+v|dvE#o6M0s29z5Acd%+0Cj%GKJK5a$qYn+Siqs>aru()8AW zb<%{wjI=~*#X)|q&_4VTQoY~t*~ zQ4vA(oQnDm!6AT2ZE68crd^#%b}Rak%uuEk*1dV8ka+6$f-rQI+V#Ri8eO3s{Bg)P^ z8B?U1h@&PlT52Mrl^Y2`GlA%bW(#>HvxN%G7B)Q5ESN34*th@Nc-(J1i)-#rg^Df$ z-B*7P89n#*Umkz&|Ip|HnbdWK^~0&lKM?dpPki_PKv1f_Ctmx*k(YnF_nBV_wcPXK ze9N1CLPPWgalQo~yQ12T-2B|e+9E8Lj72pNz5^%E7Zzrh*SGL?U}0F-M%qXS*s#bi zf3dh`<7i+ZZxcAWY?jn$21i$glo+H|xoW%e1jqVRm*d0Qvuoo93cV^Dnwb~kGtgNS zK{k73RjFDYtc{II(neOM2j-=#N^|3zdxrZP(lS$&C3(rYX)5@APJBR?&JPe3Y3Mz7 z{eLrj6!jUOC0AD`a?pHT%;KV)iR!CtY;g|Kgln>i!j1`X;w$!t%x*I733EkpZEW6g z;JFX5YJz&YI9cNq-%%6+6XnwdvNEN*IR?NZ|_aCNl zn4@(I36H2*dxq{K!yBn-Nsh_}*g$-w75+hI-~3~Ov8ZD7OuWKR7q5p3;0w>5ZX>P2 z)_{LjxAYKYimP9^%8;m&LG{3}=G@=_sh&HF;@utOwZLI~R)w{LE1pNRJb~oUKu<;C zc%jCch4;NkMgh^Nh`?N(7mo)`_3B7td`LlldQPf>`TE?lx{Ah560cYlO`Z8hZF+hV z{k;5irCj0%(hx4jTt6ICY?sPD6!DsHbhmNHbo}X9QVl-&ViqZ{vm6=J=StYgWw(c2fN-eBx$ji^p z)CZ*}#$*{3T-8OsdEhAJ0oL{SXdyW2?XVQnW08-tGUV2UT05Gc4QVbXM??hm94Ya> zG#THVFA+-L5pE@^p*5MIB`ElaUh0Cq zAMrjSc80plpTSXzw16l^PN-p%qz=6A1bLR%HK|kb?VLT-DcRUQ!$Ez#+^ByHO>C!f zu>a`MSAH>t8x+RH8yloFFXK}4Vq<~?TSQV^swYw24pvD6{5)z)lFEmUW;AbSlm#b{ zFfa4G&OH!KL{DO+TC_9dGbzM|m#ke^7jtQ2JP6A4kqJaSM4Uhp{LtL_ky*poH0moi zk_Yg4@#799{aW1tzc3m7r`r%gzd||g?TnxohXQA>FA+yk2?1#bdt%b_E6$DU(5=Ko z`Vr*$#CmO0PB5CAE0DS6W(9B~s#7quhD>w=gL`Wjhm;mY~KFWBgsW~bXb#cuV$f&j) zHOi(WlL0;D+}Q^7^G9Q>8o z06Ez#2SJSr>k^$kVFOL+E*)7^aXmm#(sGE+d1_NUAe5l+!AJ<7JjBdG6;~0SuJ+#6 zspliX+S8wso+LxI9U15p;%g`5>p3hH52;Nu_2A=1q!uXKy*fVYq9LX<@Uk+6IM#Yes^oA2%^+8?x5-Cx&pT=8T~jAy=4Q= zZfgYns#~Eq2}DQALwuZ95I$nOPl|V*KN?oz8%ajX< zh|>-BL*OWC)$)eUu91oL+xAcFJUFm!Yi)afZo0;hs9=@`7KLz>rX8e*A7NM`ySNgy zQ9@!IJ`5UFWJXa9II5C|qsvuID~#whPKc&Oi8Whs{)35Tw&VO~ib5MbTeDt>LSxVc z`&_0)>5NXE`@yy+gfLNX6h4Z`2(Uc)`hUVoabN&Dxy?P?&v&smqWp_lAeMnlwu~PA z&cFe>p)a*h0?cPAwTO z9ocTZc_^O+1RX6UImd@ApbeG26IFhd>A`SBtZONWN5@1LCi!ja)HUaZG-L&WqyFB` za8L$IRxDpilAXhvh2W))`642eH0{{`aDKLIM`y;pbU5JE(i$svwQl*mkHL6i4Mnhv1!v~bjwL~JK{46 zQS+kp%`dNhZbwGz)@L6(x^A*JJ5U;*+qpk5G(1$1%m@$-;OaErC%^j_!DJ&z$J_n* z1|2VunHdlo5QQb*egB-AR4)R4X zuM47IA%fnrwnSe(2mNXh^s@FECdxm*L^3M=DtH54^U7dLR6G;afo#g4U}!`{M$1l> zI+jt(^!)OuaNp(Tb}2c<45X`MVI;layQU0SY3-v(Eo#B5@8obSx*?1X*oN5IQRtwC zU3=o)^Y8qXNlI`uxnXBi&Tw#Qw~!*P&#yz z;eNi0nwR))ju!%g3VI?_A$P~~7!Opo4m35_mzI~56&kYAw9L0aLzDF}ae9gb($s{Q z>XI~~F@;$mg*+!aRe(4=R}rf0#RRTo?AO~t~N_J;^4YR{gZ!EicgNVt~2`c zr^ACi`L(#{i6ClcJ|CpK@1B2N`sh7?C~N+lyJryep8M{{GvUF99wzIpIMK5x!P9E> zf|y`?564x*6;$jaNm`8xura2{ab2J!%P&VqMi?z-4(G;H`B@2c*|~tHUjGByE_rnD zNOw7tE#baaV^!hULX{34=Ob628NjK64n1~7ul;(87&Rgg$Wccj#cAo>c-*B)JqUVv zqmF=dPJS%rsp^uf(+g_`4ty&zO5*F|PC_4vY)Ltl8O3#%iZLEjlC%T+_kTOBd9O5gBqXf|ux!fmMJQC?J?`r2?CtHba^+I1HLLh- z@`AMrS){$Z*3oWFp2~7&i8$I{5nYoN*4$iEQZ#K}o|ILRU0PSs)ZN@W);6%NzH7L+ zwhg0s9RBFbQjMg&r%{9?D!c(v%y+P-M@6NRy2FHUUC2z+l8A|XhA7r7y+3>u7yE=n zJ!RpH!m8xlN+D9TVcPs}hK!m5(Jnzo2}EOm2MfVbqPcmoP)sQ4o@agqD}{85i`(48 z{d||lz+9nXps#?SdzlS=zIn^jRc(V+rI|&!hLXIL+A?EmqAD}Xm~V{JDkHK}W7864 zdUZrnoFqvvmqz-57LR&SqFhS~jk~uWQy-50^5qtG4=q?_X=%=|=9)ET*b&I((Vkvj z7{N0~RHnD9Np@^Z6A+YG6^wS7M;a=k6)F^RasOXe?lT)iNoNc9TIuFu!}XytS)1Xn ziE^z;_p46#Q%AZ4d0F`e21R(UaEaS&(w(Jomh5`H3)WqEKI-lUkSa}%q7l9A5ZIo`=sj9;M6C6+& z8N#pv&&9;rt?4SaHxK7x$S0Kqsnlv^s2!beK9h95S6JBL-^9=}Q!dmhu#ex>p`g`z zaY8ST3FEt4>jSqp1c9KTL7sfxh))O)_4D*_!CwiJ=ZMUHb?F2jQFL>hB<|qo7q|jn z6No+=H}!dO^coPogP^7nm)jFTMNfv0gHI+zzjPe!s!(@qyMzH-Yntuu*6`NeK?<`} zP1&Xssy9=5)kQlmUApAxtG}~MOC*rsqN1F%B!ylTiitU@6Du1V?#V50%&%N3-GjE81H zywj3F)4mER0w_2rAj+cFN`XB&8DUoe+L@l+&u=>Se&6_J+P!rfE<9@C`{)|Kr3)T{ zP|lmbu+`{n?HSdbC+T#g-MxFP$9r^VXLeTZ?%v(IcW3v%vzGtwaFS}`K%|p&<~dKEYAA{l=KRk4 zeed^vfdRhx<#lLK0*WaiAVWonvKM`8Q`EL53DwT+EztP%^5sNb$OX>*X!7kb{CZwW#m_PU=o2_h+Xy@Ge_?yH6+KmhWI!LG36e9N=>5CWPE2w3bi#^yh2~K z(cjR{>alr_uB8Sy@z6%Qq^jIm&r({N&u}49QWzDrnj|u1lF5c;x4h7rRZ>@;r6dFn zKPNG~h%Ifk4&>5d-%oNEQoY-NSvyP;qs3oQr3G z!@_6gxd}lMROh#wI;<|fuNUUC=div{N#83xwdl+Tfx_E+L4=|V^s2fuEn^-bT64x z4>>y1ci=06=uE|^U5P#<=%tv2Da+7%F<0U8HD`CUs4FlsEs?Ph_FrP#p{~p6GCIKq z^Hw&cu_LUY_XyR?UE?kF)kXV{oi43wEvRa2>KQ_(=5_61abr|^e?yKWG~WF5?0J;+ zSOCeeCflsu*^ye_(1z#MmSR0KW@MBCh&lx*6pFZC{_BP2zP074k)e`UwuP`U19vW+ zFn?cng)9_jX0p=1#NcW_=)gfx7nkLDg;-z-M9Doz_C)A@~*Pwo5v9eT9B7c=e4Z7lwXw7wZAYgH9w2(V{*MF zR+kV%A9QwTF$Wyw5Fk2nq!!fD+p{(9WUmhK?#zLB>sn{eTj=T?=p7ig*ejOisEemR zi#8MDBcFM87TJ5+(lH#ZU>-h$c8J2!$ud+Fqkt2LiUbu8@G0KFTZ^b=UU70H@DhY-Ab>NHJ?m~rs^dWgmq=(Y(6MUkCDYh zz|=s0Pm-!OwW=c{LQNJ^N~)!@szRsN)S%VpN3awF!DhqH(7k?01i9 z(0i&C`enH8<GPu5N_52t?*>NUm9R@Kcx(rMBW8 zGAD!zeonnB2Zl_-1^wL@B3U$w2(3=b({u9<#CjSKCJ73cdisarK}B%Tlrj zB(W|Ht;v`mg%H zx`1qb5XnSZnXgF|2-+F{P1S|2aC~;*yl1EhCrCX#+?=zL{0mLNgfOIAwN*n$g{?u~ zdJ39W4IhJ}{1o_najg#DH31HclkV?NdT!X@i#Yer@&sT#&)y}_tY zR7LYXsLlC93IE}G4375h*EEUpiwVW)0>^EGKJPl9}*B z(!DThV)>=fY$oLu4ca-hkqycF2Yi+It zpW8O9s;eq!9T?j>RF3xwU0YP!H8|K;U0}$~&nqe^Zs;5+sA|b7sZUOl=VzPARUl6v zE-rOk;^gk<8lqC zk-kA;D_mX4!X;)o*w;BW$Uz#oM1&~4&qZ?{6$#3*vOvJ6cvP8I@ZHG-<#vYFKPxFP z#}K5I`4|;`6=@NOQU1Uj=Rbjocm8Z)z?2|Kp6xfj^=P3vg!QFWEq%OXFKx@BMGM)? zdZb?oLC=gPttyX>k92=|qqQ|%NdI_wgPChSp80E=Eo(OK$t=8^g|g?;nW10-0Pz{qPsRiH-{0(qpT(cu;vJ88O7#iy>g9 z{CFUhp%Z5oQh1mP#MDzi@idjR$-*%jDyjGaE6EwUrtF(@8u>7 z(FY&y&HVPk+*daytK<>EK1*jgN6-^R_T{E(0%Hu!i#7Luhod zZ<4GvgcOxGEFm_Nddr?en|B|y6*R;r=ds;|`4fCYR9`LD47Aix(T;SEU_%wMq7 zeZf+<`HPk;TH**)oIU(G2yUIb#FgTkkK1B;Y3N{;A{x3-9Ol{55oDAlr?iITdh+Wz z*am}iqmavOZp20hui3PVdhe=^!s^OGi(Xz+Td7t=5pj@WQtcVA?&`Ph=(la}OS#C= z0rcoehF-9`P>e-TV%ep-+p+yEB8~70VYsEt%Q4*F)LdWM*I75Vb#G&Hb6ZDyeRV-s zOL<*oUSD@}>L=~G`?*wE3o-EBz}t? zTM|r@7}A{l_WxaX>c_Z~*0m&dmZ``Qe0N9c<_V4>Mi~O3gqvYe?dY?x(-h-$NK~x1 zrz?T%E=%V!fRrG0_gFp$g1R_78|*$8G>Q;~ppzkL7o*&PJBu`>4h%#Qqe*h#Qd?Mg zYItROq*M|{f)(H88it?nU8XZjA@=McRk z1btY@y5fi{~NQnnYx(ueErXu#x2KAb$l?Fq-w zHPtce8wtmWR>~!|#E`zKgzAh)iQ2~LkFy?%f!&;|8?=Sh&1I=kppM)=w1T)&105Ma zSdcZBU|VZ$1@g3f=(ulED_MHcnJfK#+#i49DIS4t7EnwnY#@dv#j4+Pu%v$6;YoT+V zHHHyGI0_)qzAW%U>tMCca)A0N#)Hk$R^X!g<3oFk)oherzzj};ysD?U74BBGQjQfNwz z_dBoe#BUZebc9i9S$f8my44-FArTE^;$C z(Cf*ko{0+clNoX=ho6^*xXyEpc6E2pH~4W?G%KXYJ4zd=vZPv*et5i?4<*T*Hd+y! zn4}}NFeAf;h7&o;bq^(6D!p}WU9r(YIh7s6QSmYH+ZExWZ>8*nJMS6Qo|+SZ`gNPl+{bv_2j&I_v32pF4JhPdOqym{Noy+BYW5 zoo7WAI5npkOgxD_J%L9Y;|Q|B@1dYQ#F87VrpqeO)ItysQ*z+0J8Gh7)xS|D3QN-n z43fmgp>kNRLVzj^Lzp@^E{l>xAU-(4RjDCzvo)_KwWz_AQ>C^PL~GJQbBfhw&lINz2N2TMK5hHerbEj`R!%rca)#sQE`4pC3GAaXy{wB zX=LM$s@j^Gjv?V_AF6I2tgp(isVuB3wK26)U1UBwUU+0IzojfWH^Z1}PHgR8vw7e1 zokJT6YdZ3)n$v7ad0FP{ltf|R)vO|biTDMUU}K6VF4!|t7ZRV++Be)aH0B!=?&ag7 zO)C$Mil<48FNyXxpAKnxArTU)k(hY5pZ^&vvK^N#qZm%#nn|IJEz0=(VHWk&Wkw*v zMD-~Yb?YNUf>t+oL`y=MV-e#1dXq|jht1`rWmZ!@?YSCmy#^WB?)llk0+Z!#m(#F1UNo;X(-ufmbiWcJ=1|^23h~zC@d1Un1XGh-q{hrr; znbN$MrSxm-;<-M<=*wUAPhY4wJ1BXG(iy!2_bo(cK+u`BLjU7U978uaEEH_7dEEY1 z=yV1{r$*3=tY6t3#>1hAKDM9qsG^mKo8(502%hdO*dYMO%zXv5;!b>wt8w9Wa z=G_FiaQ5NqeyAdvA|6X6fhe6S{-t8JVaJ{qMvXXGg5#38(#Oin-j!lYh_E^%q0!CV z9rt5~#*+*`Ts-4#Mx!dIuUf~f9^K9H?FZi2Y>rRR1_t_(QAhC2GXHp;)P-mv8lrSw zm2naAhHMtRM5=5kV~He!ag=0TY@)#&5)$aR=vk`4WC#Gx#g5D8%wHtP&^ZgR*vy~( z#FKNEaX7BasZny#+avZlVW!t}C|+}f(5&Zd&`=Kk?Dy@eAKpWVaj8fuH#|COI* zrrG(*jv|I2^HNmoLZ_g;deh#jwv~l7ZS?a9x0`fSQXxn$tfJbSRZ^pjbXA!0rMjF| zV_Pf*&9X@6cc%sN(4~a#W|p;Lv1VRHoL~Wv za5Po!2s@3scxR=Xc%(+g)27;?k9A{v0k^RQ6YMAiQ?|sLVO#8+Po)rb}J7 zV(1uQyo0N{aChf)>|ysUTi>%g_FyhUuoA;NBZNG7%5u7|=z)Rg8)g`JKriOU$g@Md+O z3Rar1z_}qW?)}}FAMDA(qWtmx+)oeYeRineJ4cGXd$job$4WnczWfI#Dp>mVqf^yC zdZFgWFVwd7tn$j%>%yHx-cv_Y@vfblt4lKn`a2ID+&M71IXBx@P+0Ks zq0)~I7TfY`dO90&^RiR&t05?H^W;1*?{Bf1`L{A#k&;(YQrk?d5-7DQg_M9rbDxY$ zE;8jcBGBhKxFsm1P~@q3%Pi`^ZM~M>p%GG?)*btxd&irY#R!%Hd#FaGwG8*Qub(eg zXFeb%HyH9EnIWrvkElL5wzelw#^fF7>TVm}u#*7WsF>K)#2`1<<*Y;DbN}X3i(%)| zg~HsYeQk@_5MAc#OU!*lv~>Ia=NLr6%wal%g)d^h`#L zjr4St$i91|fR$t~tV!BUBtmTH&Xt*&IzMw(>3BmtP&~iRpi0!W6~*xf$xFi=6zJ!{ z=LZtsP58t4`zyK_} zB297m7F9LSxI2W*=B%FbL#&~$u8dVJA zr&@Uco+H#SwLWpH$@{xAKHQV}(Y~xt_UC+hF!$Ss@;T9e|GA2vWS4O;tD0`rWSOKjIq}2@?|bWa4Gq;_MA>7tOd>wUB>X4L1)0?;F_8x~i9B;mSoUSS>yMdyY z)9kZj21*D#APKY_TiOz~bh9)xMHb<;z1PBgZB=t8V?P99Ft3U7OIIxAVC^gE?JV3D zWvI4vw0p-J^JYChwD&cB1y7*V63CUx$A7p$=Fw!1N&=VjggM}7jy?d67Qj(+2(g0i z{QAF`rusG|V02F81C2(kNU=9Hba_m&l0sBgHpX8iCYKNwtzi)wJ=| zRR=#N+P-r23Ci01)e$$yeZ0IpNYkwwKfm?-FH@Vg37gLsFND_2)jZUr(|-rpE`))?ni5;KMTQsY5=7HK*popy z@#B5jpB%{f42~Yoo8V~S4~`fA==qW#pDg?7sq&wluK4+jmA^Ps^~O(jXcI#=`S z^EGK18LJx1Ev5R3TwO`NCB>w%7*!c*$puAu;M1UuBTE5|_|!AAjAlZKN+%9_%q8p+ zPq8HG5~7P!V-3j$-i?g1Rv<+6n=~ITN^pL44vrVp^#yt^BD9D%lj0|DAQL-869cmi zr+;d!-i(l9EV5S}p{%DaH+gPpQ$wsxt*XZS zIL3cD^yD~_cg7Q%d7D3dPjq*Pr~pnBfjYlM#mrahS1R`{F-PpGdkL z=YN(^GS0Uqn~YLbZsC58(Lu{)VJqSz+>{b`wbT=iCdPWh(d^P%%(_TYE{Sj$5o^4$ zMHLa~vZ+N?X!PUlWjK|#Zd}fgUhYR%c%V#TO$>W^eX>g8NnutDUKp*Hqd|!b^z(Lu zpaYi(3iz2%W#K3uV1rIUt)9YuQBE>muwAeHmL;z&NblYK4tkVY1^K|3p^{8il<3EY zN|;~50gkmBkM8v0F*Duv;QiEB1kq`Fi!LhBdxM~NDp%q57IN*#6#Ju-|MLo(P7#wg zxZ6#7qSqqmWsf##rRe0?ziUp8-ZW|98Y83=dQ?2<4qo#SdfO`!;-eT3sBP(FQ5vCW zwBML6<)ln#5w^*-M?c}*J#_T@pM3t4KvO4%pa`WUQe}mOQQ>~klCbu|7z`s|m~U|s zPn7xkdb@Gnj|}%ui1A|ZkrtPKNCXK8#4>~h`(_xz2|!TDCE?+rUJ+XSs4XpZ)Y;VL zY@&JC!%UI39WYTaQ2Ujc+|hZIFXb-Z!3F#J`wJ6SP`5igOh-k|}{0 zC6k?*u5SMTfyAa*$s*-en4+lEF zeuj1iM)@L&O%@$=YK{JbU;pX+5B{I6aR(u~^gbg4oe#bD*Q`3B6wKpfx9_HgNof0c zbtrj(m21zJCwowMP#2FvQ$Ccck~C?UXO=O7Uig`_r>GxTw2@@iAOGmDw;wp3ou*}Z zwFuEv`O;q;N(gjcz#s~9P{W({wrx5`Vl9D@St$uuOuVG4-6Q;$N`svRjz+po=+Qtp ziWiqp$C6tS=srKE>kz*>A;t$U7+)kccWle9G_#V=uAwsLl?_Jf6a2_{V?5yGB8qi<)d|RYieb*=Z7k#sR_Oiw6`dtGd~Q1iu0*lh|niyKGkZ{VA#$y$77#9@!3Bz zd&;^x^r)$JOJ}jHt3;k)$!Ge7Hx`hy@`bASL-k`XbZvVzFu4PW_U!%S{OA9dlQjVg?79*rGLzB?Y|E=^M+PBD znPS8}#KCWpTFF&OIi2@J(>B$!s7eui@*#vf^Pn5SQe(v)k?Dnarh zQv$;xOLGm>Dn)iuYUU8|`K?F!moGAUfx;6+-s9g;%fopnc6~D}h~rcp;|oNw6pgne zt#3=34AGLp^tZOzC>WMxs+fM6sOYAWWAOg2^bdBYf4JvMjuH()oFVxJB1%!EmuM)tORX2<-n8+L^%i#D$TdFZh2$PvG4Ig zlNkK^mXy`?*WhSWz%q-{Gc~~{J<(UJ>r(%p*ijn7XPu_;V@8E)0Z~Lu_Zl)vOj)H$ zsc&gsa%o1~Yn!Otnj}HXsox?%v3Vc);BRQ;uZ5sBvenhG5LB$z1gT@>sEB;0B#Eoc13YvUeL1-h@wQ>x4aA#IlnhDx?w2x;b*aa649(jWbJf7Yi5kfakRJ(TyI z!!$}S(o_U08%ZfD^GlO7u~pfMRGXgLPdqb+FM2MYg+${i@!TGH^l@$oe%A>xN*;n> zbymh`w22J%7?Ttfw|Tb-!maBR_ORBBo~0$cYG_qbvUxd~vBqTHQlj(Og2{IYA>u!Q zE~QbEF4mHqfG5Z&+Q=0T2Poy>gG+7N%8V~`AFB$1qoqc75XjzBUT;~l2LZDfwj37C z2B;id)8KLKXex1VaMV|>E9^bU_E7NY?i(B#9v~8wgH$8(mPv3d$uYdL(X_Tah&iMM zQDuxsU7<%aH6F$|w~qWUmjA%fOr1Xg`aJD?V-TslsfmFU{FQ1oS3DGEslcvh5pL@Zv-NPqYE$ugs1p+-f?PFH_h+B{W}xe{i|0Qb z;6C3wIQoBlKu`85JZFO#I%sM3i7uTbMfn~Ff?c+xS{-P41KRo1%syUoL%O89^{MyUv1fGY?5 z<8j3j1w=(L${HErAOgZBNiip++q5io!MH>{To9&3RVDRZDn$%{;m7fOF#=0roI)<3 z<^73}NKs}+g-=UkdGDI7bf5`LSS+oee#?2Ef+Po}cpE<3nlkc)VFNn@=%@04ULGqN z*PSg&le74RmFzEVOo{eioThRkdp64uTHiUKHyTKjD9%nI9Vx+@uZi&{9}2H^P;j6@ z69Y$ilXZy<99L)MWQs47CEkS#o#a270{j^$rG93Wef8-ET#k;q%-bhJ#I{cWfXnP>Awe&#aJen)ys2e(x&rje z`O!-Ry|UPAHxu0hMcq>)+M_Eq^xKd-!jUQ*G(>Ydc2mxkW)8~p)~Jiu=_UX8K z9;hlXW~5nq8!{Iy_cSO2`4L10r~4vvaDcD7T*j^z4>m7z>gOPkC`wAI+zOJ-10&^F zY&gdSx(c%^-+E>VbTO;^YTE~zYH|swfiCU+!@vBCzbme3Cid^yIrF)L%MxK*$m9cs z2cLkbpX)phhGAe8)ZsqRLfj4wLu~xaQSWe}$JS7|%8kaMuC|Hg3&+a_1 z=Gga-ef;;QMs#d2rGK2)wVz@vO-&96O5h*iO%>Uy#8{t#+AgLf`9P`C?|uE(``-99 zse8N}3IoVf#62UDKEA%(pHGSp5uaD0J~^Yfe)FEA%{4jEAu9p{eT6vt^u)ft4%C}S zP4Va(THU|%B|ArfDDOO<%j~BgsY&r`$_!$_l+QXfL6D?;ok3FGnW$jb=nz+p%%9|a zTUwerK9Zp0r1$_D=k-|vIB^d#21D^yRG%U~g%WOYWLH60TW&~GW?-eon<_4cI?^dC zE3F|{iXV;V*}ZB6j}_6lia5#UwuEgR8lm2>Jq4yxsCZ>#GQaEe8Z8eHgp~ z`lHhkqgNMo8^+Jjg%TAfo*>$jHx;a8xM*xeJ3EvSslCWbk$fCLROpFz?V-3T%^H;D zjwlMp#5oE>&30x^Xi^$$ccNUygQ6S_QB`s_3n}U3i7<}f;L#+~rd$bDOkBaWH6={) zG4e>Awk*#mJm8XGD65zII(W;rv?{&5Jqrr*Fxs#KYpI_cBQB2I$pi&UKoog50nxcU z&NI(E%Sn^3Lo)tFk8-1@ERHGCR8#z>4&x<=vcRUMGCc~8k`5?{QL(6d8AnqEj$T43 zl2lZs7ilWkjs&2J2S!lfJy77oaIFXuZi@#*7pu)8KIbiRyadsSqVD40B@1T}?ZghR zv@{#Z{wyR}?uJ-&Nw%iaW=30+cgUN(#9Ow=!HJ*c36pCPBMsMAZeU*9#ur+L@4~kQlH7}XPRkT`J#Y$WvXk=>k*^t5|F_jd1^Sk%GzBR4H;9g>M zFEx7LZ6)GL0y#L+O|R|DYcY3t@T?Dop`Y%N584l$SbX= zscqYE3iNK-y*EZ0IlQv9ebX8Hb{B#dWC8Q^GWUk`0IW&)ctNRn@Tmp)IQe?JqBzAo zDash>Nx=*jSEYqvvK4jb1UrTHryZXNP)fKh*+DFv5%C%6v%pv17V7Ir3csOpeJp!w zD>vZhVkh19t|ZFB8=93^huD~wDD%_W^0DJ$g+tn6O4`>c6H!66nY-b9=KgxEJjmQN zeS|!a;&NIq>b`^MZIPjGn(2LBaoix8$WEro;Y5>hCFT=}U%6gZ(G_?T?}SZzxuO(Ck65;+RAz@&Ja8=R3>IL_h_cUy|za&>ryLM|0uPS9C7Il`RiW>JY+7_Mk2 z(jwic@lGo0+AeYQa!I-?O^~FQ3cPlj3QXOHLd^u0NGm%y?Kcu59r`Pk7Hxz`Q1X?Y zn7fQ8_Vj!wv8em4rx!o+%o4_X5Oz);fv!Fwgh+5TfR6YnQ6upGxnObF|p18HiB8$%G4Y$aY1@gyrumq)Nk`cTXTXDpdvmmYS8#dcA?`b zGsgS;==su$v?$)3=ZAI7@Bm<9j|d$EjV$>w#QRYoA-kVH7=}tAv7MApIE3(I>N3Om zzd%x~Yf=AE)ciw^PV*hOzaV;B2s+JNg=yhuGEMDFo%$o#fjSi>D&FUc2^N0W)nA$V z6S#2{!^~iL)1R{UO)uVarW}peXRxfXeakC#wZ-h?ye2`J0Y$Z7_F*KS(ZIrjtbIL7 zd_bZVh=bu4Ac{W);X*~XpsGnxFcN0#3s32vOi)T^9Qb%AAC$$!uZv`*$x5%3r1+-w zXI)*E<1Xo|HE`w~*|3%5cT7gE%jSxY=^CP9#WdSpqBNPDSXb92l$RHgaSv=DXjy4) zdiz0ko7hq;5os$;+2v0^{!PxsJhI=4xh@W~u*FW^$<fNnK|>bJNK7m$h}<`y*O@K zTd%~zgFHn@5xR7E&_Hwpi@w)9_dPa*w{3khxBCzqURj?Rk&tDQyN*_c^184c`S|%4 z>Q>M<<@FX;HL?F>Q=5joe&QEmvPX*bZlIKdA>9QF7HA@tIQYm|p2J)X11-4~%`S>M zILd$%pAPD_XXjf--usJ}fAq)U!yo5%?j`ZSm{FXXW_jnA|AB2A$58RWVG*KGkWUZ+ z$~%B0#Y*kG=m|QPPK$*Los*kN=REz$;zbK-xH3=d>E*@CrfKqHT8iyKz4Ltp(Yr;^86f9&{m2vx zxpu_fI3xGgpVdwIcf0Oz>l~$;hao67d(c(gxKvh+-zP4_;o#eUu8Ve>OjFK`jX4tL zHQ)Z_f7Gpi4Fy9dl7<=SFbFuNDFTx_55E1|tdi=0*Axc&bXK;=u9{Uy=(U_z%BucHx>Z+>JlH#0#OdZxIN|d{{k8R(#zpJBuf}__% zX$o$m3B%FEA=Y?zrIDG=LElt7?D&L{_S=f!h3QFQQong&p0k%Pd}7Yx6@pWD_H0%| zbAG2f&3LPj6!Dk<7$H02$ytv-HJjos&n?{;lbK33eKPro>_5-e2eNMt)2S}K9AWq5 z+~vddTAs%DpDXy;X<=M7Eh9~r%4WB?wkj)Qx%FeG*H#2IvtSr+@&bVtw=8%aEm7y=;iq2(oo#RhIs#s)*YlA6T*SS5tBTA5KAX2S zml=C|+n9VOHL$NrQ_#IPAi2{;SwFV@fHfh&stJOfPpP#K{RP9Pcf3Uh*uk z1ftaI#K1ZK70;r5>DQuPIcYM&uTeztLJBi=Md?atT40lo40Uu3jviT)dC6pS1xF{V zQlY@xKLJh-Xe!7d-Jve!0&H@lZh(9%I`ncl6 zi+G#+KmO#?#7BVD<<8Ee66WL=)K(YgrEB>L78^Q|!T?6b0GAyk6*Kzc5fDW-1?m}& z=2teLiDxf%LDBk!O7YgRv4l}bHi8u;xmLCIeg1bBQ1Gmit1n2P6P#a=TcBG}pmQzc zNU|RSM2)ddu5PZFcuAqE?HuNEhYJ*991v|(;7^Yx`x!do@<#LePQ38kwj(dRjAC~6 z4j|lsRWR#Le1F%gzcE`)L@0m%Z!cIi!Hl4A#o+7Ziq9xPA?X|#+`Xae!iC>Oh5LX0 z&cWCARQQL4Q$oPb!-Bk=iq^!GLZ?6y6XYpM*P6V9!gM8B^RSb52|>@F*>wpDRwp3J z8q|^JzI(VY-oxEFGSm<6u2C68mX`Qk4hCWQo1{XHYA5E2ca@rLdA9nN`SGAC%W1u? z2MD4wGZS4s6?(haGsVZbvLSkXKhc+c)62V|x6=EZ;**>n|E3mjfAhzjGDq2Ew!Ynj zy@iqa+=S(vrcq;(2!Cbxva2h)oRLRsV*stTY&^H35idr1Q5}0I{SECL^uP!w!mq(W zX}75FK>6TNMhH--#JVo`k7vU+=OYoK#J956m|`ywWy*ry8@D<5IzWxf9hT(`fl|&{ znQgm}r&X0D6+_RT`1J41_1l0%q%;Nx4a-AX>+(+=Kk)L8{`tfw|NHsPwN*`Rh#Tf! zSTG5I8KNf{6)Otyfjq0+&OJOP;R6||CUI>Drlh>&5D}sr$x44Vd=ag#j`5?P2TBPF z&do5C7g!SG{19y=>G9ip&3!#hlgzr8IQnIE_cD~)Ir=3;CxAN3Ig(;5r+cyqdD}&Z za)UJdp0aqXwtSazx2AMVyu;&9&k+qr-*|EnT|-EZ9*vQN7ME4jcdyN@?&S&qe{6HE zM3J1&2q|x}rC~eSxgc3nG8PpXvaMY(8)M0#en9HNBac2o7)5Gfy&~F=%L_&@$BuuO zHep$Pn~<(h*IZv)QkfFcvgwtf@`!xxiUN)al!^xgg{hJ_6`_pE_~`te1MttF@aGc8 zRJS#$as$5_Valc#t^-(jf?13vH}Vt@RD9m>+UGv4Ui)ItuJ_o_N+>@Y;JLP-GtJ!y za}X{UzWJy|;#^;5t1V0I*!*JY%EMdNb<>+<}OH9hw=!l6uq_vy+lwuDI=7tUHOR z(|z#Ud;gm=?{=|s^5aaIqlnS|k_e^x7nIc8Q0Fds{=% zx!2$P`1con^QQ|R{`rO4b+2X>S0jViB~FWrFx51TFILr(nx>?L*l?f4hxctR=sTK~ zmXuT7Uy!EUzW)eY#3|<@M(Mx-QKM2AT1}Gs!5dJjl=>vA1Pkauf5+}4r`j6|Q<5U8 zv*TE;nwOhim7^eK_flQ=Iw;+q0z|LoC>as{u@)v+{96}dpjqWlCWa@2#PF6Oo6Y7o0Ta zL=qCj7m3VeQ5v1j-pT}q9jVQdwn%=Vrg$w&Ln)7&vx@nQfYXcL{fG9xm8giG@nD}hPn*|^ z8onI}nU-jKAn*LOg6IwHxRa4{$)u&vB57`FxIEDpA{ka(VIQV0_l zH5;G*snjxr?1Le0dob-If6NS1=$1MHa8S8mi*Y|xgi z)0B=wQ)RrgqPf>(wIpj}3ybpD4bJoF=o`SOlAPO!pyBM_-PyS5^bg*7`{j3j^`F#T z$v3y9XAajTi2fY{RP{QAPUcn6_Z*BDhen2)1+7LoktNldC?^O?6<6e_LE$G2^WeO> zwN16PU2RKN!BO<6BHAY-E5oRbtu9F;7ZAU3EnUBiIJS{&?KT}6$=KDM$RX|vyJ$F? zP^BV1uZAd@d^{7BB||v>>zj{w1x0gJfg6kW^Vk1&0T~2x+BUyLhCon|zqlielnIpg zvIRmw#FBZBk)`0|Ou{ZNQdguFhw1dNfJ#{27or zOz%7;!I!@id}Ks1n-fBC(o$DoT=mR)Ye9a7wSHS;?NG_TRT$=Yg;zIK1CVI>}gx6hT!|m zl6uBksNAlujjyV$CHHvM#Hb8nbY*#TMxyWg`-}RDBhwQ7cD(#6cHuqb=qaIF+`TE9q zPMvmD>hA8w**_vWrn_84(3(~i&3BPFCY`LPx}m*9QIKV9tS@cp9kk?>v5Yg_lJLo2 zTxc(nVPGL5fbekwzGI_93T;yMV(N7&bKN#dj%BN!D_wPzq#;VR$u(Q_Rhx9>>!B=} zG6~v5X;ct#JPQ}jH(9L+IJS@B=VY>l&CF1T3NwYl(dRx*&}v@ZQ9{B|Z*>x#Q6?#e zD+M?afkd7keoL0D`L38tJ+mm!MwB3-GZe8ogwR^Kuh<+dvV?7ERUu^ID58ydM8*V3 zwxghzNZ6hsDbuQ|$co?4re9g5q=!c%c4wDnXLllipTtqCVBFny8AL@fN}d2ikXTp+ zyU42HgvD{mKacM6wK*{V%j44)*-g)V0zHF)AM%6(KG$5=h z#N1_!bKlh_t!nA{;=LVj{`^ll`XE?E@t|*H11u!&ku?KCv_f2hpT|<%v#<@n)hlQA zQ&xqkG!)ji8K_-zospo5<+-t6=;i%w$3FVsjBZQL{afJEe$-}!+ix=lGx=M$%#sIEW#05feWe7wUB;s667*gG+m~}Jmk){F z3(xJw&*3ZNDArcS2SspJxAxI{y8@y=K2=3PPhR)_{`OL`-=OSbX=Qwzq$o9pBIjU* z1di&fw?bJAJ6-u90LkBD39CDsy9Zct)!fyW*1Ut$U$R~e;aI)N`cJlr(G`3B=l@A` zDoHoUoz&*tEb-Q=qlueoE@CLOBBN~|89H^Nrqb0U*fJB#+Dq>=S zoJ@S4Pgl9Rqf}Xwuieq5;SeBdKPDvUWMMj)ra<)kv2_?_*;K<&?1tw*rsA!W2i7!q zU=ae7tTO}NyAGcq2_fGcNwg4Q!pr>R)W+w|63j%5Dw3}&DnfI9lO?}SZ7GP=r6ZT) zV?tOb7v{Iz#cAo1C5vji*7D|a5kMu}m{EjHiFZs`)Eev^r%(c2a`yR9u=()9-`Hw< zWrOL=I_sHnQ&OUwc%z^FzYA5XPjGRwvZt;n+mM@hKzYgu*h)2fk^nXS8MfdlN8{AhZ#yF2A9)^0CVYSgjV zT+y-##cNmX|A2KpG|q{7=f|0BQ7fd()s$I-N^Rkor>Lf4^|Cc?>)HMir3-e@@|d)- zmDW<87-5Q=dr~sn_maRzk{=VdrmQmLuSmErQ96N4;VYM{L*fmRq!=w_4LBE1S3{JD zqJ3}velj>8LiCm|9llbCPIoEyHQl*WBIrab^xo&w{qhXI0*+3AlVL|;L0DW3CLPie z7@xO86jvnI^($2M(Bk!<{eKy)J1N^1)wIP*0%^;o7uV${2NNJy(tjw&6bS&h%1qd-S(XF29-j}S(~UDaU7l`(&U_)jIws8Aa#!3 zpON;`qD&?V&}3N|mg1Gi%Z5%>tUleb^|jW`uQqKs4^6>pYRhg!YP>8$9ut3xfC8@QhkY$gbP`RGrj<;3%jPoMx?uL>Jm;t8El)@(k50^z z8?vQ|X|!y4VuJdNjg%X*mO3t`4{EI0TvS{@6b9w@jm?VT;gz1A9>n#LXUpz0cH>Ax zTmcM%kFGO&-?B<-Dl3ZET#W?`zZe#1hCAE0yh@H$-|Ep<-~AAj=B4W@DvFczI`+rK z2hB&1daqc>=MpOkCb5BBT#4ES3sahQGJ(qe6JhG6dHa^LUsSI>O|715EL>d-ifn9( zJKU#udz)1s=WU2}<%)-@#_RMC*0!e8-lSkz)+!4WZzXZ;Ng2 zUERI&?Vg=)^LJuPR&q6e{q$cc*&!)%%IY-X3x(vrE!GXEe@s1=q9`=ND2wfo?ZmN3S(FpgQjF-= zp(EduhdF0vWl&$ma|@PO*m7d6rGNEk>B=KJU;g65-(DbuA*W++ZqIXyg3<7lK4v#F zt?G$gW8b82=NzO=&|4gQ;^(+TrJ2=)t3C3p16e#+L%{>RtM+Yg4ITPq)qxLtcfZ@d z_4U%h6S+Ny(^~hWrx<9OCX|fE>4jWYo)Yd43Y84@`TP5FItBv-+VQkWq$}z>SlD+k zsbT|_L$!wO)2ryx5uzmcQ$l=o>gZ&vRT1f4-yu|Y0c3(wYPMSPE1O>4U}RJuzDh#e ziTJ^pytzftqs7)RYP^iZP$q?=C8^N}K1Lzw2d7(%6-urQw8D#}04`LUu?^38j2rW3 zJ@(jBv&9gGka(L+m%)3IZ44)GT^c8>K}DdGE6e^eo*_~GdPSg%^HPR5J;D+~gM7%T zK!);lLZHGVv2eGtxl0i(#Kco+2Jh@t9Un|MI-o>}ig}0Zw&Tx_nHF=rN3uGEAiZpT5P3;S(MywzhPdz* z#Njd-rBz8b>^hW{W?0qNa`Ll(IPlJ2cJ6p5tz|dfH1ZJeQt?N~c&I_I?%(?%W21$s zaTF~mQ|n?}X(4Yp`}1q^?Dj(R>`?SWYEJDP_(};n&06k-_ig{N%N*tWi`E1xR6B8tFb0RGLzh+xME9*s&d<*P5AW_uXOGnq@7T-~ohczK zEZ#&(5PJ(&9b_wsHbjFK4IEdf)xiN?$A^;;Pl&&kjpxQs{q!gQ_rjd8VxbXb2#d)c zX2vu^X(bqlAsO^jh}@)zT=B${PlrauKC{3nGew(HP%GGKCOo=*dp{6wY&rY0ji-M+ zdi;B<4t&(H{mruBQ+YjyZH+sb%rj?~@tFJw3Jik`;~8+&Y&CP<7cA@u3tSF6sf+pt2va)lK0!FJNKR*M86GR< zSYqN7melm9n7H7GsGzXO;0OsXle*~3Km2E`Vb34hc<7zqv0G8N+&p45oh7FE<@Yh?;{k*LpCMDI3Nr#wRi(W=pJf_@@&GAg>)s3BdZ+F&9>kO4c z$HrT9{gv_9a470Ftv|=;2xVJaiuuH_mP>xn#ip}{u@{O~o}w8^gf}W=^@eSDg=jb8 zh_Tdf(4;o7M1r})W1rx1>crCpq^qxJC|aI`Wlg54b?zQsm(?Hfwp*1@ii1h$Y0M`l#b zmxrV#Qvyw4D!aPy>2RYs$I#c?(z5X^CRnQ0T+?tN!gUF}$9)6omn>O0G}v9;xpwIy zAua%dQV~7-gMYz<#f*o`Vqq;B4rem_xHAb#Tug}gr0?q#b$U1rV-B=61DB-wRi}rR*@C?y6RFT{?lj^L62xnu@4LVL zZ$^gR`^|+{fAX)-fBZMw&;M-j;D=2c&N0+f+1MWLznnTSMPSO{;w%cIlvtK{R>aEV zn8o+YzMA43BYjHZI0y@*@Ggm!88V7nH=d_AObBgVn*Rhi?S}+*Zf)0e7KDlE6HM`j z`8tsQmuC!I-&cTBnvE-c^{Eticf9iJt>=Exvgx(d=AAg;$gX1j0Dr*mY`3w^h9%qd z%L^(SZFyDv0g&Bss5hQJwyD%|?O44zI460IM1nq)p;LzFS544cSE4h6s6Ap{1jZGK z^V6ls!~5SIJ-UJE!SXs%$muhE@3|sa7@|*bV;g3QE< zWF%(q8-Kq3)Q|f2eONbszOuS9wRsoqJ(Vdp%MkuQzxjx#hg*QxGS1*M(xM~$xiUy? z+FmtsYV(<&zWu8UpZ(PZCKOloG+YW79AxT)>ScO@2f!d_6+y-tlf+oB!9$-G)wHzr z_HXY?ne7q<#$v+Uh1`jzc;2xMmpID)YV;^ad1|=GQJkU`X%V0lj#k-^jL3@|y+qTN z`eJ?;OhxM1a?5$ugEgw5!{4sSlA=l(rTFgOUML?r&gwDmC@lc9=9ZK1L&jc7zD=po zk|;}JJFeZQXU!8D%w=QDneYaBgeSU%CXhfR5)^!L$-;aQt28~sHOeS={7MY)M1=Ta zF_lMpq!{JeSWoVW(T0O9+=70M3f5}m^h!C>wSl;tSUalL>X{lst)g5>&-ne1U;5$y zxxn$+UtW0Qi$9@C*X=lXX#du_(HGdDPApMGM6k1q%kpIo4Bns@`MolQk{AbmSAKb2 zetKeW8Oz$@34kQXaK57(-E?MY3Mv~|Z0_gsOnJ*tc~j4;KlztS5ETe&KLF?H*`vZl3l+b6z2%dmRcAJ4pB}fG^>NHxogX()GiME|+wysw z%9)};fZ9@7{%S3;MIq8AXVcnX}ai2rw=`u60*evAf~uBfu0HYzH^$iO3pK}HJb!lF$jJ^@4hEAo4T)9lt2r&wqNA{O zXq5rFFzDI7?F|ADS_)#46~2rgl$Pc)tirIzCx3Zi-u!up-5h-&T}H~k3<4r;wWVWA zq?JNA(bIG0yG2tjrA$h`-I|TtX_vYLsWzYexhBTzv009Dm$*K=(Bd)I_Z@b*`Po0d^3#9c^TzL1uiIFeDHDRIMZK&4{eJL{pv*DxY2> z3W-W}T1G0@C@9^m>c^fot((N;7W+q1u#2Z zCnVh$StBq^F=uSEnQ&GwcJ?XBF_?3zS9k^Rde7}{ph|4gE8F@88G^bdM49hAd2C;H zYQk8pM5~U;Y~9YU&?g(2Xv()nBXfmCt^2Y-GP`5xmGZZjZ3rT;ki>cWsl2ZwN~Tb- z8Lispn`;pE2TVnY+RMC??|c(g`VgWIIzcb%iO!6m_ISVBi;#zp#yfD=ILcYLDPLw* z2StatZGQ1b#yB@hUS#*APwZWxAciTlw5<5}Cx1`+ytaIO)yN6fNhaFz=sfLy{kPaR zq)~yDtpijD3kxz?uGv(iF&UH@Ry7S*PWnhjq$&%UnMuGBIX|*=Zg|P8(4uGOEN}`? zI61p$EV=7WevUPX2z3H?gwvu{j<;x;lZ)6Q{ov0py!x~MKuYd>^*5`Jez&*32PIlo zlxeEjl$VzQGQa)T7Z`$6+sYO#_oB{8@sQtDUf*hK+)+95!j>)TcWxWsy6*_iQan&d zpUx~#g5MS`_waO@-If!AP|LDuUijX>M2EUj%w*g1+S=IBT3LoJV5~kaKRKwt6bwp> z%pn}bmQYcT+Dp4)br*=DO3NoWdTo>4v9j6|^DRwo(%X~bykhvw{5-6wX}Fen&&fOV^70H< zXH>VZ@(&JYe;n;h0kIPsc-Cy*_1VjtPQLv1cRn~v_4tc_zVNGm75@F+-&}a}=l_1} z!@oLm>dflZ{rQ>3=*YnIk`}34<>ephvSI~2NGi0%3~`OcFeUq6b@BjOk}2AdhP*gs zv^NP>r026Eg~|b~_YJ4MpV6{I#HY=ynXEy%EyfIS=rhWY-Av<*4YfRf<~)Be$rcOE zX4Yj>_1)T`+0venq>k2THPYxX>ci=ZrL`%(;okG5S;ANg_FQW7VQxo&IWz%jVeRGEQ2wP)8mH1n9x`(SrQqAj0Lz_pEu@RdH|K%H^Rp2PeU zi_dZlfjVqQl^f3f;9u7s{~VfDrG`+*ofT3|F`=S<28Mg*)QlKlt5+*S`4A6QBOW&R75J-QxpTc3WDTi*hXlulLuR$A??-tx#_y zTh4KXH$Af?gC1K=nlAL+o$22`T!3R`k!Q@&!@D|%H=~x8Ixb-iHJC41^}NHvSq7P_ zEYxM$;%B|1bl7?^g68)g3G!Ub>*b*9X6I<3DHt2eMUFPbiyY;!OVYJ<@(GTHi;{E_ zO$Ajd3RCKwXgl~vPYwgocYpfp{QOKxzP!&!dAEc{I<@PX6PU*}nhcd$vh3ujn%XLo zX3Gbk6Mj%-VF*VT>xr0VERtv^E;5`QX0vsiL?q-LC0x?>DZLVD6zb9UB8+_~`dBfof z5Jidhb=A_*bnuqJbqWBxUi-84yN~g{l{F18MH&_*_0b6>TqY@*mWc>(rWnihkUq75 z#vwQiiZzs4gJ~Nxc0xE2kp;ZTVu^mKTL4dq71Kqv9n^kVje-&-6AGH#O#^-#;?W$Se~z=_O5xdIL3K zY0xsaWpl)MeO1J=kdOeTR{W(&7>-t!NqFK*nR^<*_)tK!Po#%L9V{_B&l7bPUS%!-e=M~a1TIqnlTFy^ddy3Btx%? z_nW+@-M|u0!Pn{8}q9>)Yc*fNH~)cLUgDd!~}&!kr!B6lEaylLa~sGTQH(F<&d9#^x(F?|Je&~{Nlgg{KW-2 znlF6kpANk9hm9}(Y~_KEn>M}**Vnb1k(;w0jAq7diT+;b_8hbg{q-N>d}C9ntwwk)iUuAxf_>1_KeB zGG*cJqz6C(q&etF&ZFQ2eNfKORuHWJ&2|s)y$w%(kZWbMRu3^3Fl3$zEvG zC#m#kQ+lg_nMNk>6=HN??>ie$ea;e4oJ1qXf4u(1Uu-=4tCxQG|4x1SxBK7x4P{vF z@YcbG*Z0*@OJ^82OCLfURaUBQ!J;L+&-OJnmu?7qX%Z|2gcR~y_N=sF?_#)?D=j*; zLmPG#_aD5PpaJd+55M=WR70l1if(wbaI*Z;_V4v?n7(t6s{HS0fNp*h6)g!5<#a~ z$bC50a(hXCM>)z^XM!bHFZV+%_U3w%eKS}td44$Y@XAESCE3(L%}{77p8NUBKl#(s z&pfmC`1b)=U9ODz0pugKI2<=PFo!B6M+Or5%3}Bt=)12!i77qIw6A~hpR^~f34u)P zak3_lO$4|=v@_zD<7cz<}U-<4nanKDt z`0ihBJO9g(=f1}nL+#jE7KkbfRoQ**h6fl;l@hpigS zZo+SzBh-6~Yns?b!g@;vSKtcMu4aV?NrXJH)|KmPM$h6+M5!oAtyiK{v>k~w9jlj-UPQhRPway|8RP{58>T)&eV2s?II*0v zp=XSuYgAevc3fJ~tYzh$ytoD~Z}mj=autxH3eA2{t`bQ0!D5isS4nw%Hipt6!{Pjj#4pCkcxxAAiPT zR2>-5qtar--D856Lqv@=ABa9bl=$4BcDzZA1y^6W-jWzLu>T`!u+SHghd+gLG`=2! zgy?{tT&-;{l(Nx zalddGe63jv(?qHB0f2C)XRBu;HXgAz0@MTy0kmd zC7n>E*FfpTNtnqrEl3Vp-=-&WAv0OJWbR{#)Krz5`?5JEO&D(!?9#ZlEeS<@M@nOPS9LN^QGoJ*_;&<+ zrV022oWeoc`^3S^cZ{u~s2~#5MNx<87mj*png_cpxo3XQJ{FCUW))vJuCLj#YX5s{ zpZlz2=*6nhmukjetr>r%a_xCi{*j^VmZ@5OoNy>oqDt~D#KB`++OsO9w^Earv*ncJ`pJGGds~znsN0B8|DK`N{3H5PKe-}ye4p;J?$H!S2n90|P>$h`V7?;J$!kIXrAd60(x>?#Ol z;IAM<%Z%Nto6N6ovAwq&AMD2Rq36kKU9iaEn@=sKOo~0{`$r4tfiWNvrLwLpi#$1; zczUh=^r(?~BRbXAxV>WdRR7)&MxOgFtFK<$WJUt+>(`wbGoBkaytr1!kO@eWN~6w< zCZRkKRY=BkePqYBH&|cVS1w=k-1jg5bAZpmgP(Tqd>4XJ!^HTL(!7&LBl#~f&;_~4 zAmAID&EpO7P(NoL{Op*%tw1_d5uK(Bfmq{PwiCw#Vrh}G0t`9G`YLnnma}69kjWFH zoXe(6o&&}xtJ2dBQTq*%qt`C&URK=|Pa}N>i!EOHJWgXSLGTmdLjsLM z)C2e|LV^Rh!6z6bGg80hE5J-ppA+~L*@>d%;1g$;fJ00bH;VfXv~NC(9(7UF!%>25 zF=mrZPwYcM@BXlqf#|GZMbSEKk?%%%RxRF8kav6FBL?5E`^2>;OgP=2&p;Lh9bO<^{ z4f>yN-MxLHcZYCy=eOKBju!PFW`Yyma55!4k1Rma_(+juyJV3~LXDSc5VA%Y=3`zW z-k9y^8%GpemRUxWPnOP)7`Z^4puX-1zC6wH^XrVS(Am;wpefBpHJcZIdaCRP$BI7L zpY`sJ6flV$>HN5!P*Y?C?%bx_s6(raJA3rFfn?D^$3OW$?3LU-lvh7~zIoHDty^Aa zeKa>H&{d6`CY2tp5Q}?L#5%v$zNV{Pl%eX89{}6RnBiS94S>?SfLV zx{KS0>MjN!j*Et)t9qrEgz05vUVw_q%+I!fQfyYP!76Uh7c8o7Ub^53VqJxlqS`z{ zDo8gR*#GgN_x}3CXaBhA%oh`JOWS$p(W$uw`4nk`VvSgAc+*q>_!MSLu> zTd?r>djKbL5=c%U8aFbS)n)=dfixd9?-GpM{^EDi%nJS!+1J)kEY@`~g#l4UO>p{L z=+nv_xLgE2WH@dab*(hb^*%}G^T_0`+>S68vQcI_#uzQ|A-w-ng>RPH+~bOHqH7j%uSZk9o~rTXuV{RA z2Stl;RZ4-uj|w?s!JF$Nz%~)S*IapawIaM;+TZjdims~VPKM|;W#|=H760>VqglUx z5WTv1J4JSiq`3(}*Tud)$fL3|C-diS}O<;69%jiC}l3=84ZJSua#gMUG;F)anwQ9Oe+Ib7&-!7$fSa zj%lx0TiE}SE%N%S0errk(o6^O2>kk7{Aq5@<5Ce+7)pL%s;GEex2&zB^|crb$>=sJsyp`bKdy?k;} zH$Bmp6{NV0R#%JFU19nKl#bTPI0TN`y}PDhah!CbS322w6uPE1jzhHaCd=LVmx}}5 zWNrYqwa31*an~UNeK2H+GL*FajW7Q6jbB{&_zxG3ef;+w+u!Eu!I)8u7$q2pz&xgP zwJAl+bOKQ{83(Iu(4h292|nZ#B>OieDhNVzO(WuypXKeE6JEk~!`s_a-~IK4oxO%N zL+!7g-d>TPEQyi9QRagoD1P9~)}6d#lxNYSq!0&Ndc#u(qA~`LpF9?qw>G|DR8cs_ z!Hx1kcD^3sKHM1zOH+CEP}i;j>xX+Yo4fmce0?lRFV?v7Rug;6mD6H}rH?)FR9j1J zvf028rwGv%j?XsrjS_r#^;pXd2r7Py0ss@D{Fz~^u3q~hU+FFk7dLPB@B8RVh+f)s zb_LR|Cq}0S(J9E#s~Kqr=j0n-gTn89Ptcnw(d*2#T$7_WMd^RMX}JbLXN=67{@?@3 z)H|d{8T_C)Cis2oHp`TWS&3f!BEn;L^_j9tYHLev9*NCV`PkHG)Ukrh4d-e~Y6=9! z-CCFGLq=VG&!L9wDAr1IihTQ{PdS6nU+SKbnJ(`9qWp^n6$rY)h!F`ZP^Q+;Kfs@) zp6(nk4tO@+5Z9aQ^~wI6?;I}p{8;f%PL+T0V%0CsR{!#B^)Jp;eQ~$@$CpfxnvL3~>%q-AwrPSUf6;ZmjR^aH>D81<5y_}|KQxT=&K@K7* zQRD^?Jd|Eob!;mYT|f6ecE% z>wEC!(yQhT=PNWsL*&U6cqy~zCWq%{7`egvYY0j{tw7M+Aq>@o1;WvArImZKP8!RXAPvXw_@ znxa7|VG4}jB1sw%Bv)L4LMWvU_0ospYGPF|D&&VBy>aN#B>W4yiGo4353U0OR? zhH{4qrV2TKHwCBt4qQVJvqf!Vq(-Ka`r5xPva`P=>Ut2py4iU(N2f>78_LjYlG3g? zulL;tSCZZ{1igh??hPS2iJ&(Km!AqdFOyR@h2NdH!-ECX+s;uojSw79zpZBMT^eNx`#eXMQ@Tb} z+u1WG_Pq9M)_>A|d*qw{D?KSJRVOTN+}5FH0Vl~mtX(6Sfpj6tj}#kwa=kcUCq-ki zZp>--ll|G>K9u{tqoB0t2gf;zVdwXsD*&Hlmov&qUvom*rU-c6V&U;YBbri#C}V(8>lwY`6E?t(=~{4E{Y zO8j@#V0Dt$ zIxFfRD93@ln^x|Al^6$KeY;kt?HU*iw)BKrd&6vfg}wXPH;~`G7lLw6L58+$r@Kiz zb4QP1;?vAT<~G6jVdl*ynNyI4`+fM*qO5+YvYDXKC=hr1CNIe0G@LR@W*|VKh*7)`| zTdpzaJIAW9@W>RZ${ba&`<%jTBX?LXuR*7-tBs)K+qe5IdSip@wln5mmlfHc=gmQl zmsD8N+Y8OX)QXuS3<{453Jw;*X~!o7<#>Nr8si`I(m?5_2Xde$2RHan5ua$#FA2KU zg1{9a`pQOupkwv&2^lIQpMgjLoWQE0wItgy8^fYC>X~u5!=7Fq%xhkcpyJo<92F%g z$3ST$*9xo3C6guT>gpJ~=SZ~gUR0$QYrMix>6IPRiDIw2hx_UpS#;o1xXz#saSEVl z&5@5~vX~89Hli$vA42W17~qE|t9pjUa`JL&+6R@%Ld=jna6Ue2z1*7}<6d6wK5mN` z6JoT~s8cB8A|oS02vxV_R!bzbJsaBBt?7K{Q0>O8o0zyIo+2Z| z7G&-QpGZ}ap!i^U%+v{p9$aOb_#890G)8Wy4a-(L@#LMCJVT>;k)!joA%&QX7DZPO z!LN>{EqYnd{M2RW755~xh!}_K67*USy}{zMdx4-2Xi@i`A?U5i(CaGEDWdf9y6!c= zX-DZjLD0!CzW-@@TR6((;>#OMB-5r9*Rw<8qkUO0lKl7BP?w93KNbrbE7QW)H_2by zYz9{Yqgz_~M?n|(6c4N}oE+JPEkykZOR)Dd(a3y7u=i3^yocB*ePKkaiuNRk$D;OU z0AtadM;9)3@OE<$)u;VHT)w*_6-Eju-JK3ip{4-N33l>DzJ)vKq6VEP5nmxgwR$}= zl+>j1roN=q{B(U7-O9?0qTuO%sVnmieDyA@0*-ej>(JBUP5sdQEt*Wd1H2@QQ^bh6@uVxc@^T|ibzoL zHvU!SW3XS5$6KDC%xVF=T5tdQ0_lw8W6)~l>W8Q)hl#ltk)v)tL2SISYJ!Hw*8kQ2 z`M+CFf4gVrTjSl?O&ec9ah9$+it^(*+X)J835?{j;N+$%RRJ0vk zYL|Z5F%_DobrV_k6F}va7FohFwf?;ATne1|{EwBZPx4;z_A-&eD`H}Y3mW0w*pWgm z0fV!s&v=c2YaOn8mN=xJ}~+2r`7>w?L}Wwe7B#g?{K(LyCabV7rQ zw>70>_<}!j#$WYqkFK-P-DFD)_9Yy!#0ilT8z1VJpXfBLV=_mHr?)6PNz5TShh;Bm8lTCkbeLXgl{7oa zpN(vEUhPpwmqubHGLJ6B9syL$$uF%l^16_lxR-eeBMq7m_u0s0Ou}N;5|<0C;6{2% z6VovV`Fgu@1q0HY0~Ne)*7|KQ$=TuAG>sn#e|4GRh*52vKR%-fiIfU~xCY05klw%& zR{oR4DQq6iH3U>=L~5+L7=1nb!x(T{5LLcNQZ90o|8!WojJ$iV2(8U1uOB-@oO1i- z^MpZ?gF(a~8)K+N^9LYSaRm(uK^wOqLvaE}dDA;wTZ3Mwkb48B-ct~LfQq^g6hSX4Q9B(;FPaujzr6D$ zGTo!C(5ZA)zup{uaon`+rC<5GExaa}8DfE#s6CG`O`#={6=ujCHaL=`gFj?q?$ZF4 z5V9|Cv=Bd}GUqWy>9&0S3WsOOetT-E5Q;>k;k2GyyR~C*BdG|ccy~j3 z5hwH|K5~iATvk_t$q7#{$h035UlH&rIEf}zaRq|nSAsea#grt+tc2r+xe;8Z1=c9i z^MN#Q&1~Nv?6riBVAb%k>k*W+xz76R#!}-o?;xU-^`cCtSQH*)GE7Eky2ghwm<+8i zu46HGcLJsU*%K(8py{RTz>71c0#G@4Z<7oLq^EEZpj1ZqIpBFtNenEpgpwDyxmCrt z(3C){uC83nGvXDokAFUtiAX$&lHnM}~hx1S8i zdnz#h>7asVf(u1y$Pp18qfo2KBQ#``&>vNp^5?ormN(tt0 z*qLt(T)4y`r*n@Xt&seqn=eGDf$U)6e z6~sfNGbESULJDd+sp1NKIH@OcP2?!yf40V*Y(0DT&n|#822YzZ1Jf-kx`XIfP%3CI zL4Hl}^0Gr(=B$XS>s~XovX#5tK&Oh+FUfIku>VSwCioys1(YUEpj0a) zQ9x5B7bj~|0jQV4c;PWMaMpg+WJNET`#5Vj@krydl?FR=jgnQ`KuAJ@R?DmA#S-wu zh^GibunIoo3^~kS_Lj*rwEpo?o(#VN(TdbCz8fAENUSkSQI-WhFJ}uo^*WN$6x~sdRX8+ov{+7Jv@e?&2!?TO7h4(4Q8cJX(5&Jb?7n50@(=e2wcL;Pr0;Bv-r5)$6yVJaYj{|2 z^ST!r8>?z-%S}AcY&j#Qx`z8UktV(I#FG~hA;9jXU{}i zA;YE$V^+R7Y-PFBnp=h&mXo^(q@KdC9Ag+5mWI00VI?Pl2^OO=V6Z|;W{tPYe494h zY*1SCvZ|I|CN#uKrg%_ZW(Y?(gyq%ht?k0JOeNbo3Cv3gXFqmveHR2(7&6y1BwBMT zg5!)dT&*cKL={`rG|FgF2ofdE!0&20lEJ%i_u&|6WcTn!bIrzcFQ4vQwKhbN(o&mi z&TqUPO?fmjj|>y4bfUmJNtmj=Nt+XBs__+pnlS-XQJzj>s!;Of;F^G#A$pUdU?sth zf0@3;#fmhfc#E23RoSdXD`;1f?n?+mVb6X-^D#NIw=UDF&dxBg!#u#xoqeuiu%8ed z7!!htR~@$asaf;v0#q#RG9I(cJ+PuA!=ee*WmJdxIl(roJ}%RyPEbS=(_dWEylVF= z!~0$zJ^T)rO+&qPEMs9nh%PA&?2H8W5_3S!+LNfy!SSutMJ7J|)W$7h6&DR^t=ojA ztjLtY7*kJx{jEbvSf=WZ($iqw5hqLCIEILiBZ%3(; zXXv_g7SkYReH@j>1eI*p#y&;Z(xazdWJwu=|2I&jmr&{|3R8B%;K{Noy;AHQ(<^B@ z8K{?-Iw4grsZ~L<8ndg}v09N5lBiE+t0zFEUMg25u4zoI@WGGlC`rYG+b2d-m@~N=Kj=|LEtL{4ZLBAm>08?qaEcP0 zibFLlG!OwwSRI2L>)Vn9t(l`P&rZlGZ=@K@e`2)Z5Y%U?fX@k|P-tI;0?B2vBtu6! zd7Z^FX<|x@BoM1=P>>%RxLEql`~)GowqzCeltp+MwK0{&sfaMFt!YVN8i{jF`zq%^ zWtKVC+OVUwC_caUP*rY1wn;ig^N}XXNhftN#JUPtV+(NW)3p@iX+H4q|BRc zQPL2_>XmH>W4jBrTx#$9cD9!r(hHw-3{^#Y;m%D;D}h@}U46M~fuq=cDZjI|boaVu ze7__$qTngd0&E0jZr9$HjW50Xi$DJUKQ8>~zyISmUwqWHYQ)pabGA#QV{Em3`o$RM zAuN7T*27T$7*Eaj^4Z6E&b0(-|Wnlckf zDRqhv74N2sSSI8E3pHL>q0=b}Q^iG^iWVf%&?^A-OQs4{U%~|`{BjUWB$tMebBpYQ z?vF1C36>d2{0E=*0K!O>&Dp~bU;|NAlq(aQ^h$fm;+k_Mq+zg7Y)h+B3@2h3l!XBS zo(_-|o0Ulwkgj%*^mj~4{rrnx{qX`@U&QTc;uI-?_4G&6)b6B05+B%^AF`od zqLzn?1kKMhAXV9;Qe*S=_V$FefnH1H5^%-n4rCb>o;h7ZY zOIcV1r@+n$e3JM>?+~vLJw<7#`x?eV0=ojfjj$L5j4eG0Z) zPyKa?_e7Y|F2$V$=LDKwYMM?|dIfnp0o2J%^`4y2>+jz| zb#U<#@7A&P)eNhO2M3Rm*f>MHA5ni?Mv#+mYDAZ73_h|lkP==0z2Xj0 zw!W~@<&kHWeD_FRRdbJ883SlBb`fDg($nyvkD7Xh6Ko}LR4@m%?_!52Tey#Z^jD|8 z^N)Mq`16)cuUhNrdTwQKh%^R4bk=Q};AjoYP>EM`c5-aa3LLGDbn);X8CgZ>AR)kl zN7@#n&&_w~;tICV#J|5#g&umF%2zc|J!yohQ;Mtf$*t>ye(vAg^FJ<(f0AOw8?Au7Hh_cluJf*7?Y8C{`Arwf~$gyqr@XW$1X z0Gl*AB3Ts#7ifw$y$Dp~>4XbORHzfjMKp?l zq!O!+T+SL-Q|%Tk%IuhXaa3=R`!I$}u%CDzEL{br&}B-Ztbaoz3-L`oo?FrDtp<;3tZy3blr{vi=`Etwr^e4UO;J=s}O5J z6VZJ!p>E_5WfWBwRyX&r-Ar3LFE5=gwKO`cJvRi1l9y|@I6XCQ8Jq8r`~UM>PX&1| zV^oG@#~+`nP^eT`!FfK&@xtB%L|#mhruP6u@1QC73K=Tm^L}WK&J=PpL*o>G>b4T} zI!g2w@M#y34=h9?QzL~pluxN8w&esh zr28Q{iI?L6aj^!=tt-d3JvPgc;ZY}dKfVa0t5zRlM1-cPAxRYzuk`YC4fb`WDB3V~ zIzt~;og?4TrM>Z!pZa&vrdp|sC{Moxs#x-k_u!zUDFQMg$dyHyun_kUDHF7u*-XwA z#(0B*-P(4+x?<_vj=T^_xPPoR6^PbkNiRaQNe*;5SdC5!qgP}i4&H>~wbaQyJU!?i zo3hKbW$WbnOw7Oln}+nR*Zyqvk|`Ir%jqYyk_nsu^?K9CsCZ1t&0-f0=p6%1SjPC2-rCQ_4EeD@X%1T9}inS+{MMRwdyMiugE|r;=7kcx+2vv{~UrIh21D zvM?HuJZ)cpe@^aGC*>6HDF8JZpbFhnk*Q!Z(tA!?{L+X37iGZ+v$L+t=OeO7Fn;pc zxq+b(SFZ=3zi5fsq~&VBKO~$8U*48cf-EMKC^JZB#|*TtiNjTya_EvmV$8Z}1(jYB zQ)y}>_vbg#mX6k>68?VVh4U?&Uo%v$XSXPg*ph~xib6|n7i&RTYPM@|Y!h~^gYW(& z&CVBhH`5=*DgElt{++EpC)VeY617-b$rS(|sJLK9LX=$H+}PGakFz*ko{^DKov+o! z2hks8D**XQs=|?DAN-|fgf=Q@#o?9OLQ~NBAN)T?V#w~`6Y=zL@rlw=8-TS%*#<&9 zLVX;I^=^W)zZpkw%UH`yCR^^7rRZuUIvJeTgXk4KRJ(Y+D=7WC5cF~-dV3l3b$GOg z9KFQRjU7guu8g=4&KDdZ;RKpnRwr^r)U12^bexDAi!`Mrc`PVh>=jEva^W&}7I(XQ z3Tr0mUxL`a;_xq%Y1!XdA)!bsj9N|{qyhm>bf?Hp>Y{WU(~BDlERpc9DA^zA5L2~o?LlfePR>TG{QJAv{-gEJ^BF)2xy_|&A%ojVtZdbl`D zMky=MB>_uUEMG`(mA7c5`eGWC0MTXz_1^RAjA(SW@vN*;(C;LPf&n2!o>t~Xn;iaYx=POsApqyKpsbJ=WZ7p(DLSxUG>XGLe z`$^6$UAgbwthOBsCFLhyIIfP59N70EL!$E>T?70)+(Q#mQZ2R=Gm*UM8L7G?Es7a; zuD7Sl`@7R$+iYbhmR)SPkait8nclLaqIIyXt#OItvL()*I-^PWL~MP>KmDi7jsq5h z0)ny*c5HN*8+I{zv0#2_7wkPy$i1@x3s+l;CYN)s=Qgqzd%q%2?>!08+g-@Lm{=qz z(OUx^`9!z)2>0=if6X~+A8YB}Z^PiD_kK2cMW(If>Cu@JVrD~qGm>LSJBkWiK4T)z_y@adEou5F+Q9TLX>e+j zw2lsoNwi?O8!-!9VLbNulWgLg{P=2#8%mmXDWbEazMIKiu3&&D)4GH-k;nV;dh&!> zfo^I}b0>?xDm6qM8*pHyF}Y@wGRj>Nyn?ty?uNsQOhkEXnDEZed1C0$XFFd0)z))g z^zVHij#B%jwaH>NHj+~Qts6bnvF&x1bwl6Aj_#(;?(Xfc@~)Pr$5>68(o9u`A)>#% zBsI-KgIU=1ZA^%j1QB76?+J^whhH$&h4jKomJLw6Wtb-n#|F`YQ->WFS8+F}D&C#^xZMhx0*wRc>&15!i z=}OK_^c*e=Dag_rv~iWCSyqLcYl!OUXP#X*(%s*X!f-vkPpK}iDOW2t zHN>48(+dz?Z)Ak@6{7h!nT6rYf|2Emo_=Gi?agf|Z*EUB%3S%PrgVInlQVBleEu+N zM~nInH5Mlw`}prZ_}zuKetBWntG})sIc+qX+KXcOEZ84#YK@_5=i7(h|Lftgar{Tm ztyJ|4kFvKF@6xt&KRy40e`;>3s%YvW;UPOGGb=e-t(1~zfeiKc_Z!)?hwXT5FQ8&9 zeww<9_54z%SqvI!LVV(I;~z4y?o&l`6)8;k7FB>w-s7c~P zO^EUK^LFF@5R_P-O~dt0fr{|3AcMl6>{))cw_HvlV0nGZcaIc&yfp5YQ{XLpy`W+l*{WdI^X$zdSjXnj+> zm_=+~+RATaOo*>w$Co%sTYu5QrLqa_xD z0U`7#wcqvahF|^gjbrcqhGC?hN)4-B7#Q_QYAYEyj5Vn&J*F^CQCeP-V$mfkC8S&M zvovlM(Y_X&g-?OiKscX=4}G}y`1kPulgv<+C1aUER{Ne`{_BM|zW7uBo_FZQvT1;4 zo0XlhYJ3ZFe2NgY-|eQN^XfZ%-DD_Cy#YRjZ>^pIS-*}1oi;?TAm|kU7AIS-Gv6{r z3f{)MeHB2x_fUFw#3+$|^xkl_oLG}wJ9gG5FpN5(DYJx`ld2*UnYttjnd^7$=+vN@ zQVCK|N+*|xFUCZN5wO6NVU*g&Ca+|q@Y!@sCcHc=EIr;+bb>(F$F@WcH%DPw~6FRxF|fir^+AP#fpR zl+LOOsaVk!%DERIYPz&fP1uUlpXW`jJ1j~{Oe2Qgjm`1r#*L>(jhosulz9vLkFGuT z{e5r#ZpX{Nri+~4dzc+Kr1etNCGZG;5EWp$r!{L%(g9^~h=|8^{bhf9;ldyO>jLq) z@9a#+rDZf3ux=^j5(>G?mpg=p1|`b;H0oH=j4A3?W-B53D;v%1fjK>90^|vnytd6R zldSaFA1=K0^M4Qb(BsQqPLNt_l^vmY$Lj{ z480~zf#}u84F&5xOwc9!PIIOpr$HCwT;;!3T}lGYdL=0%itZhO6;_rQ3oJ|jh2lAjXnvn)N) z&mwoBw^~@$0HugBm>Cpj@Kd?n2bsFz2eXodY$maq{rD44g$Fn-S-g;%ZIJg;UOrn^ z*mh!!b)GkG?!viGq1RdLiUy@jN_MVU9cVNqpBYUeLy@Z)u4&M4uWp)v=w@Lt4upoF z9PCaZkB|y2vK7rr$@g`Z3T#V#c}r$dU02hFm+QyR15``>wsp;#Bdd}cbD{`wJiS)O zC5wymQp&}v%A?7OO4UbIjl57leufh6i8Uq?cw@&)KO;wX-S|++z#(hHc9I;(nbMYx zxhFJoL6F%lY}&cOagWq;XAtIh(;vB&n(YlxYOm#9^9Db7O^({XcsWqNz66~HM6VE? zlbL!|LHHJdcjtcmZlUyR$0IfK_tR5A`Y8u5h%#sXBJc@L;0HJ8m2v|; zO5_c5oORjJ+d2}+(Y0ik3DP#gQ(v*Jx+GOC^@@xPrKcDh6PcJGkI|+Q7FcWzGu3V` zS#^A%QqjEOtUe*Sbk%c0<#}UjZh3u9P8tR0U;o7)hz9Jg(9~9BF|bIQU42eWktJ*f zP@M6PpqPzu?mDen72(8Hh1fovH*Y?%??l=HOCih9!;jQ>;tZdB>S_Ly&Zydwx3;^W z!WN937@aMO(akMNiUDFp*Dgjyh>}>#`m^G?PI{<76mbb18B4|gm8g<#+5fyPHN|R( zXQ4VukspU)=f(}($g67S8ptQ9l?O~u^kL~KKShlfLSqA#MR@e?dW+zTWL03i#M{Sh zNuZYlZD~_>#lYAOzHUrXkk*TjiON6u^-az7FMjtQw)LmwcJ3i}u(rLQkEX1?gI5$0 z9wb!b(+f$22)Ffep-{T&==BH+KE-bd9KG9qqC2~@<<50O?d9C-qV!rybTU>aLG)`) z&}l>Th7Hj>2fvv-@_)Z=x#E~)T)Oi#y~j9ucZ#}M9S1@}0uZC`?Mh44OLlj}CB+9s zru7Z4+nm$BYjsuh{=P&aZvbs_&E_+sdXp`cv3gFFz?D!1VL~*@i=h+&qFN_Y?N)Rc z_~ic7b@`W=8|FZet<{-PmFbZzaw)cive%l)PFZXeTU_E}!_-pG?;R-r^wBI|`|MC2nK+f{5kEU!^}QqcpB~6ES&S>IRpum_v3lcY2eb37(RmdOKmDf* z>1HK^E{wbIG;Zmbls+*Pvihu;zjXO>rbSIkKVC2I6)(KZ8XOzuMzxk1O0GzJ1H%Y7 zL=i&Sr=ET$B*@#6l2X$#lvCa$SfY}Hh;|aiD6=jE_it-gix5pu@Dw2`aumr+as~H< zwcKI;f`we86xk$9m#R$Jlxmq)f{tu@vNHexGt5auK~x|XQHy3hH?FTpkNVW!y9pG?!s=3DL#LGNO~!o3X9OHI>zo1k~NkbBXc`yX$br{XOV@p-L#&V+E&H{#y> zx7d+6`N1c1^jg344%75rLg`)LD6&Q;bzbJ=BqY8DE!*FtXfKZE49G+TK1|kqFq*mc z_~+g}o-EPibRVxyfDN3)8J`G}86zWtNxr34$)G3bN>&Gp`!B%>>XX~ddw|#w_gR#A z$kSvh z4yfb&Cq?l+*w+k-7=fkBn5^)lYE83{vNH)mixw?d;k=BMHORYynvRhM4O~Qw;u~T% zly&92x8&%OkN_r`ieZQag8D`q;$%{yEfQ_{Xug-$86YC7RGxhL8Ga)Nv52^WpIzt- zYk35!?yIX~SC&a6F|i_pX^!&sY^^so-Oc^E)S}IrFe&oUVb51!WfxNE0Fp}nUSzQa;>%zl>OB=e#zR;Dg z!wlTB`~8&0t*nTFookws=)PYQq8G*JG&y=}-OxKOL+>0!Z(Pe2jYU&AW*A*N#eBY7 zzuTP|481Bl_h#-~yZXF;%C<7tIUP>lNtAxgIGR{C&Uv47g(cpyBmF8)odA-J&HO6~ zb|HUtU276<5h7AMi(&yJQiB$0SiBjCTGKMzeFC-R>(E;vK|b_5yWdM;y&~drLkoy~tK3!}I#LLR$B@ZQR zZQEu=T?xlF8~=&MVzak4DJfgMY_M9%Zp(x3`~|L5Mm~rb)W!MpQ2Dl4hIZ}_M6o5K zJJIEHo_#{9NpW;sOm5$-h0aenhOo`8CL=sDwJ$-NhyyEL9up&1$YfIVC?OS?s@R9a zMSw~ko|0e5s?kC-92HXg;pmoD6?Q5r1m?PJSc;Y{b#QZ9XjOP1bIIe4(dUJF%=Qb8 zOsZH{)OS#qUXfnf!R#y*)c6ROb&ZPAdie+hEthl^guzttfS|}zVliI&@xSd~X{6st zSOmd@LzU8=qKMA?u-2U5^!TOjPV>mSU_zHAYkVR`eFA!vN3?jM z`cQuYlZZ?*&|MpEkk^c!+4b6Q-}%jj$bdxH^4%#MG*iJRy;3Tl1niASe{8EApV}q916e|WQ<{(Go0 z=FIw(YgWatN!FXvbS4n}a_iZBEJJVJ5PdL|=v{-Ty`0Mp@tCYQuhj&dAw+KrGH?1I z0e&rk(l_AcL}}N0GoW4rr5E0@+K;J}zOQkguM%uHYnxfa65^W_=S9G* ztK+l6m4w72F4D`Q^bQX2qPmOml}iLWN4aQdO!p75bmI)-(HP9trW6tpRgoEM(qn^N zLGVREVGcSN#IiAsw}L9JJa9g{LOlZ_zSN)_lh-xIk2l0a(6zO3ge|PDib>P>kyO=R z8r5AG-jNsDk`+{!>Nj}kQ$8JQ{EG65VuqAj(mdor3y8eHXVkL!^+WId^@qQ|z)b4C zH~*YVD?Tqe!Cd!bB!zSoL=lt3rOZI7q^B&NCFK1jQT#6WJyIh?G>Zq_&}#zqrtB2& zFcX44C^Gcs5WQh7cd~K!-W8*Fi=baBQ9D5=-4L3flWMtFvh&hB=*6#347YrFpPSO| z?%d&K$h_VKfq+uLX~&@m(HRo--rJ#eC;FoYRvKD*hcYzY_8l+ydT@#|6!`K+^U)!L zzG8hw+aAUz2KIl{yXXCi)i0nwUK|s;YfMelWQ3(@d}T>lR8t$)zjXdb|32`$6=5JJ)Pc7vHYP$Dwsc#&Dz$mn$A595Xy917F^0}1ubRTCP3Js%gyK<3uK~smx6lM2nxb^g)_M_& z%YN?+#Zm}On*3;893mB@p;HGdq!fGM9EDs6N-MNB)epQe&P1(#-n@C#28cCg3wiA5@1uggqYR`1Q7#?!_a&TMop^juT~OUl)^UPX+uqRv z+QY0pUfSlyLX|}?EABri`iW)?(ffj+cdnLu%MiV{tGIW?OfA;55JhHHZbEO3;fvE1$w_kDJt!U^iu051rp8trnB2iRcT1P4a^wa2 zf&*m|ZskOSQ$^zc8d2SLRtuQc@eV(5z_Kx z(%>v(WUM5RouJIN;^Ogex(HD?YL0hL(*`j%%1|k<1^3oOe>8+{s4Un4%N6>P+=(D> z$LEKWItJI%{)~?ar3i0{bx5=oKmrZJzs58skXfvZ?_jJev zf(lDsMS@17LB&>ROLkCQn!m_4Mt&14Ip2EZ@o=S$L}GTXWgElw#-!q!=FIGjq46zT zDsdDIJV$|7TQ+`lFzLln1D-p7`6y>e#oj!<5~=E5Cd1hkLVl)zl}h zfT$=gzZ9uAvlrbL5WSW0&>R2kt-FdQ3(yJwk@Vh@q<2w<3QBZ}5WRsUg-M3AS-H8730eam-4|Q;FHSan`5!?jHM;mh>{h) z`pOO5hY}ygQEjxdh&o&2j)>G=ZXi0x>*JW{Z_br8l&A0Sl8JW+@K{up8k&-kMfuTn z`NGK%6>k?=LT)=XCqH0{HHpDWYko~_YiE4kY7{d)Kf>9aSFqgFHAWJ2WTl2;DKZ@c zGrk^++8>&}^{Wee-uPYJ_<72n=tX*^@k*sS#)mefAF|;Y;LhRaLzN2Apu)9p6e}>QztNImt)YK?-tF* zP(BDgIHrKOQbGM=3^vPM8ED}>zev!siy9Pyw&jHIK?s^S(W%fH)zgr*!qpY)Q?U0^ zGL^iU0#;giE#LUoW4NQgb13%*$BQ_=eJFQgAk{`By*NvAY9#Tw0p)O=n$0}jrE!Sz z*T4AB!s?a}_X@UZdo6b|N2gfAy^jjHU!@G4LPPXwh~7gSy}Jax9z?H{q1Pkm-3Q@q z{EauD=@t0A4Yk}WEYJ@kN8jI_LD{Wh@F;T{EcLAI9Pw~oAdhfM)rKTzmP~NeLhRg% zV6`kh9v#L=KGxGPkJ%-b5C$_SEux}S;Y(SKX-x=7ka`jpe|R8)009EiMM#Jog$-=p z#vD|eCBZer4=!6W$6@{xd`sx9N?iskBzTwXKSC4K&KO2f*(E|GFT`5zWYvsHDdVBA77y%wr)$-SpYt=$i=SlNh>HmhaUiv{ zzMaAYm4K|Iz!O6WETaXMEOl{P`b=N7j^e*6KI+t{g>7z=d!o}~r~S_Ng$%vNA$ryH zixi076CAzk1idCiuS?KNqoVhR?z{rG$k2<&JAxjyAOHQ1l|uyTHQ9NIpxoiM+IJr; zj*@Axr74;zh4FTC`QUR}y*?z!tH9uk$%vR%wseu9L(+{R(rxx4mw1f&(?4#{3uXN(Tez_(uc?V$TPq_JkQfTqqG33S3HKCYY&RrF zsjd9mUm4Fvfz7GjTI5wDw2DPQ74ptJq8;$FyuQ;;1 zFrp(rv?V+Eq6WP*6zdVL@$e1y3l7)l^rEerAbW;EWwID7W=-8Ig>j>8!mLr6P0t2( zjWsVqB4yHvA(;%tvP|VN5tbO5CeoB_6fKHVqGROo`8@}|6r(pQ+uoj_`5XF)?nGGb z9VO_^8=_NCqSu4ySI^OVAELKW2;S+3!i)PQDX&FP5uf6HZcNaLTCTkgeEU#(4{-Fh z6m=PduO2zox^iP$K}Ey5bDZ@gA+CwBUh^H@M5itTh47M1(R&8W?wY1$u0G9qF_QEF z7JAUP>n@6=P|;OL;KSfW{6$EzjqU&Y+9W^e;z}SD6sKXgG-R=u_vBnPiJRdh$7N` z9abzMLWmZ!?Y-TZkdO8-nf^un^bWV3T5EFfiKCGj;=h8$HMn8Xsn>fGkcPamscLV; zIJM0^ z&DQRbL^pLK_~aA8M$}srF)_^&N}YhKpDS$4xjl!q8o5y!fP^KDp>f@dm8(zYmDjcO zt@-#57hd0*Hj(IS-qfPn*rL+M`z0i5Vx-}cVApiTQpRIMOvXjH5tWQL8_OQRoDzmhKLS3%IJD$)C;>p6*A#fFK9RK|^RR1TE!qCkFY2GV)Luba|fd z>`499xf(|lwLhD1jNs;qeeL z3@VJWAd2NgB%sOFB+rCa=@RWHKEWWgUIhbKButY{P zA?)r>)P70hN`GTJ`?oo)Ib{h^Y&;zzq26A_#m}Sz(2vDdx@i0 z5>$lf-R9_5M9`}tdhJ>+aH5ur1@}(N$J_GwSEc6ODnYM;sHjSBlO%mmI0`SVDz6Rg z2Bs-imP-SJ{5ga3MRTo?P(zv>-M+Y-!K8`}>f%w7jPPD!Nwp7^PUfh9($Yw~juda) z02Pz(dCj}o?*K@28hK4-6!pxA@L*ziCm?!PIm)kQ7aPwr!h2pyVI74{_>`HV!&U=X z>G*O7GH+QM$G5mB0i`q!As^OO%HT}Glv{&PY)G^`z0Zv=BUq)vh%HG^$#Qp_(v!;$ ztjkOXRi=hShq^If!vv9D?v26=2=MjrbcfTFi%Gp8)1MHihU^G`_eJ<`33(8lM-%uI zJw*E08^PNS)EC$4Oj#vd5O7&Q;ei;3rGD`kl2w{SXv)E*46lWSsd?3%a2Gf7na}^o z>tz>dT8pr#j>`*rr59~P6XoKWL3D<#(7QexdPfO*TWYyi7;)|DbMlS54biWTpjSZj zCf(4h2{#$5_D!O<1%$WqAh#W&*S8=&Kb>(_hd?yoPi*pW$GB;tdd$TDR?O4a)Kq73N!Htz@Aikn{2 z^5UifNw~kS>jJ(g%N_)EH+TX|7d*)pIX2<=IzPkROsW7>DJUg>nB&|~J(``W-Z2grAFxoGve@oOiH(9vPBtD7qr#(#v{ zmV&=D#1#Xo?Lg^Qtw(RYIm+-!-`)?Jvx2YrP~N&0rtcM|!m^O11?=dLd+NKVa znX%a5U&T~xNeE;*1uO5uh4WEtgwZeXlo2wFLY@2$(0HCd>(ThwP=;tp9h&vjx7Z^0 z=(qkCqzv(KG{w6MG?gzUqY;`SRqY(*2HfTTU{BDU1>qt)QOS(Ha8I5I|2dUQhj^80 z)w*4bc$#x6Et*hL7@Ib}f}~zw8!i@X#Y5PL-nJ8e6LUE9Yq@`R`_51IXI%rIcbT9M zoD97a5S^&&Ugpld+vVJ^l%SK9=#6CP6$HHkpLd9wJnR+J6ghfBWM2K?)7A=z5Hvx^Y!j|FF^Ea zATf5r@Tf^0Y)}PDL*0lYAm=Yq8iT1=TeeP@Qa}uXudjD_;EKwW5Q@@}Z$q=v{x}Kd zoFAPi?W)g8wC0gO1eoz3F|Q)5`~Jow+#rV!tC#4Tr9{lixksLO_OYjCdw6=Xi;Zmh zWs7GcUi1xfqA8+8(*-P*Um-9NgGjRMuPgDkmB9PU$KUJdh_KX3j#xHuVXgia*I`K+mlX)A~sdG5R051-*j7R-8-Lll}z{p0{L zF4%!8@qz{OmpFN*tKF9^bBKtR(Ho5l_tVFD@dRRn9Dpu%S@FRkC`_FeLAf)Mmn(qk zwPzUD;fZDHLs+IJfIP_ud`hDNahX|iD>3VSx<4EJy=wmlBV~bfv=&)|9wp@VYIaUVk4_Pd)4JRBI67Tm%=rGiGpUI|9?R#rtXL5nFfXH| zu_-4?BXODhfak{aZ)~xZ44%l7~B5`098vQ1QP?rGd z08hsVuQ`-+VK6+N;>%>cjM|jV3fR^437Dk5eK427(5&*-3}ZBlcXZ|JfhhAc%sz30 zlw+Rl3v2Zq+umfQ553;Dt*@sxZT*s?Gm@b*BkP9J5vEwbcm}m%0sN9vLlS4*t(n;f&fu$9BBHE zq8L)?*_1+jKV!8H3$HA+26-WZ8c;5PcA3=yV}^`5cQd z)^dfV=&NC;y`p=+Ky+qfEmuJFzotJMbIXO?+b=_}VE@ffdViO8?*vELB7za7Q0F3o zQ&l*EL3g@hv`FX7AtH0~?OTK>KYoLvuK0^)c1(pd_WK-Ll`vctO~e7&xw<&tAXBFZ zQGBXozH_5BCnQE1L71O^NVvb$aAvKJBs^v}Qxbf;cD;9?TW)_S5)0fMF9*;U5>No+PBN^D>r-&;nD&tX?iz?jMSyK^=MR5@P z{01)Gtgp^P?z4AwDP%7CnD!qYo)rqqn~J3$Qo8s;|B* z2^rItvbds^gJ_!e@bnn75bZhnE|R!VqLiS@9T4(;|8$)SL>&v{$~$j+Hyg?%L$x7F z*y%7h-KRkbNA)18&qCF#rxko^v6Eg8e=Jv;5Y_rmgS{wqF0RWDNXf}jy-nCSs>Gxc zP6AP?b!?P_h^Ch0XQymxSyWpze{I8}wzWM0N5IYb<@t%Q1%{)7bSuyZJv#|$`j4EQ z{#c+KNj9d=d=e@a7jX;}J<%R}=+|iRv$|grB*_|T0vb?MC6zZ$KX#cG-Dym+$(Dv53bLF#MIvh$6yY;dJ7it z%4tJe@(;XnYtHN$I4xRLn1CoQ`T@+Fb^n;V#o^4d26!~4H|>RwZu{OJSFb$-8$DU4#nLT56 zNe?>+xo0{@(1?ml1TD;V{uEeLx6}59L*6MPNW4SDWT*Gj# znQ9{o9CZ$&BaE7odm5VS~D31t5X~$kG;J$zHId|xZiP*m@a_>1Ki{{ zG^ZlP2pb@{*B;)Oo9s(ZPnv_ytZ?0fFVdEVIXGwX%fF5uc;z?CdQN|It{H~9h!U3+ z=d9ZE(uUqW8@iU`{0Vxlt!OCS?$1D3b?wG8IN*ytQwx`(lN!>i8yn_>j*UeswZYuf zlrH2WD8JGCWR{_!v0Pahk*sZtV<>eWK{X+27M7~>wFoM;P%spr<_#9c2`WN{GAdEF zGccaysIx&`7Lcf-(bF6S^AO8rdGD%oUg#^>_2S1x88K+@if-FA8-`0ek0vaPO)IW{ z_@N)pjZgMvX2ZBRxo+3)efw9f+kEpvD;#=JyX5cQvSVGXf7eA=2tS96>|CT^ z8|%ujkAKgr*MI+YO-Tx3xj5)~+qZ8=t}9Xs1Sl;69Q3{!6rSqQlY|%a;a2hKadltD0Psd+#nGO z(U21_!XL?|4N*x1Wm&QI#7{r{8cnUy;H=)i9tl)5_}q2y6g23J>C@gDTGG*6i0HA1W`&PA#aN_ITWZjU|Wx!w3I&uROJTP44zn@BQ|r z*0|VN58d}Yw0*5BnyYU{Zw0FyN>s$b(6ACT4B1dov0Nwhs9OnYBSb|J)TyFeX}mYe zQF}S65!4k+7sgmFoo3UC7qM?jYd1t(tC~8{VH@?X=%iMiJLj$kXY{Si1UOqO?Dkr(^2$YWT6rK}>CTZ!@$G;#yEAgE0c9b;;UYp#vj z)I$&zB11I^3SsIg8EPsmYUUuR_d>hj;VAh!MiSHx*ofk&9nWUC=e2<}G7M*8!pPZW zyAM4NU;9AU@#c>H3!iKoIF?#imzADalpZtqbQVAe8H$3V;y|Wz_+)RzFNPaF{^#hs zfBfdi8=tKjc)g?fb2%L*I{ zbsotqS%b$zCru#NEi%-+Wv;TB=;S1*iW0RKq9zII1{rELEy|42C`UuusFBm6EQByS z$BHe3vqeVqoth%3?DIiIE|RQGrE_yv>~Guka(z)O$cHv(I4yc~a{-EVYc`x-H+UUg z&){wQ_GkY&{Q9RW_x`xD`y^_2QAPx#qRY>fUfx#>h~h+PV(l|%KH9UgHK^<}+4)pbf&b9LtV+ak;l}XsxyEIA z)6n<(cu(FtC#u{0PhCH{1iWl}=F-j=Mozu;rxVw{*gEvH=HBz=YmODPAA}v!^}&j3 zhsrNMSKQZ@1j8x#_rl~BhJ2a6c>MO+HR*`)B4~^-ui>AAMX(ZxMhQw{u%gC05SoUA z;e3mtylA46s9hX&JwfG4)Lw|XPli&}NJy!3?u8>Q%6tGO%F&=Cwel@&wvvd;m-KvuSk5J_>*nZnU^KJGmI`)y53y?_F7w2#Bumx1qr*Du#NuZ+QE(f9=7m zUHh-J?6_F{^w1lJs^2+LgE<>p76GEK?<>LqRAtG^tk))x#RJvcji?#4;&eW zDLhJ$Fn)Eh1y}`KfBt+e3U}W+T2WJ7ik_gGnii1#!QjWH-n--M2x^P$_>*bvsRL1d zg6h^2ML-~zsieq4LUi1u-k$QJC`3cbi(D*2wPU^98ygqQuk4MFc?cjxr*5<(MR&9Nr#=CW zR+MC-JsASFI5UdyY}JygjM8Pep683LFP_`mmL%H~PJwp3cMgJj@nC4!WT@Q`MRl%t z0ZKe_Jwnh4B`QRQy8LV?i}X|t>M|~5oEGJ%A%i;>&%_|5M&z}{K^bXwANrjho}jKO zKE<-?#@|MNG&GRuTiD?5>fXBR=B?j<>pOSm=cYf?nLTo*4)}xyegAar@og1oSz1tB zoSL2q+gs>Yv5#SDH@gD4j>=F+V!44ZtZH(UCm}jU&;j z=owB}7}s8#TvN0VB|;b|Qgq2g+1(Z(DE9NeZ4CZl9%qvXdb|Mm2K@=gRlKMrgRI0CK-bpa#4JX zj^F#bGWK-%o|rzRWnF*IinNxh75IoT2=sA2i8 zaZxURLR1b>DM#P666W<3K?6!OvSp|#s)c{D*Ewn!nB|@zHk@k*KBaq7l$yPfEPiWt zIp(t?3Nr`%aRZ%;aP+f$&G8*)Kj=PixwY@y($>|FJ~215tSNTR%>K?au+vwx6wOL8 zzj^i6`SW5yTrBZ5^v|u>-nQ7Fw~VRh;gFtExbj0(w<6c>dZMt&&@d}e;$B2jq<|SjB->7+F&>r&0z%PL^lLsRbI9i`~sa%8QZ zUoH`{1jD8VBSb9`)ai=c$d2V|LDX24dX}I9AZp5Mo`ps_N|a@}OrDxu;_Un=N5NE2 z<5TP5flnQRhSU~;zHE}$%CrX`d;rVgkqa(f*i&B8apbMnPUNRP-v3nGlqplP7dIi0 z3uF4BExGMW62MXT{2lKpSl)NBqb~Kse~iAdzeJyod=Mpj8luz^L>=`faved1Ruw^y z8bVZ4m_{M0M5#1v%T6X$g0e4HYE!SsQ2OLij_N=(kRlyZc=Uz)iA(UwNKisk>6?P7 zg8F;309uskE?#?bVfBuaTk>J%2S&mga9c}!L3L|J`Eu|NF#f_NI^1je$-^1k_Sb+w~*qKgP;M9N(|)%Ke>dji@T2J`wvh} znOj(*N<>`z^6Hvvhsv~mE4wZuD1Ic|mC}@5dfGrxs};F2g0j<;1%5*2FcDOAESE)z z%1^v_pP-f?s$WkO88CD9T?mt;-sEU7aytgm;200*3g!wgEM<=&V(8c> zp>-FF>?F(e3CbR}RnD|TP&)&;`aq>&UPkx{nPxvh)eZktAxe!Gq#86>UNp%es#8hi z9+XDLlSDZxN2!}2s)|n?4XV#kA-q&#Qif0bNRdfpsO=EtQlA1&g&J8a2$!K0tI|ZN z5IQn$VmCx74rwZs$EYY$2+FBM4Ue@rOE2%16h-wYV@lP!cC@&I7CTuAaWy%rRfsz# zyV1*xD|pUe!IYL& zL#cUdz%bV9atcjpQLe^on`EeTTSj)8A}CNQ`)08z6{>{jWF@G|nU-)8lrmKaCiOS5 z0#T+&Y*3iWBf67ThMHEQvafq7M@^By`eYeIt#9a|9U_&ZgkBW7vL9tIwws_7pQdi4 zQ+zA?75%~@yZ6v`p8ye@lcCR1Q(IICPw#W*<0`=0}nq zrJ_@n5ULz?9FW!@Kt@pdqxGGYJJ6#nl(p7@YEwCGl%RZSl@fGDg8Zll#FL0nQ>jO#0bZ08 z34bH@;?r6!ZUhrl7S1L3;p3%jRZw4!@lyI)U6_v5+|t2KP31zF7!8>axdgSUMESn@ zqpQSz0s<`8!MnQTPeUCrM>-V43Jt)s(?Gw#9PQg{%$4A_cLo z8WRxJNr=*;ERz#aUU}E9jqB2H?GXtw4e=RVRXMYBY)ENJt|-Tqy*{wh6ZoW`2|GtE zmhW0&r``VYZV2SsNl+C5s-%v7Tvr}2LMJ8u_n_kH*Ke((K$Sjw*sNnR}?eeLinuOF7aK3C+8 zRb+1*k^TA(p#9zn$=h?h$3}RM-^H!HJn)2PCIpY};r{ZV_&3L)w~s@w9+v)mpWvx+ z{>sxppA{b4!+U;8^v((Sn@3k44jx-%d0YTx<$QJ2qcYI1$T8VlMW7Xy$B=;|;Ju$p zZy!-VJZXM*ob}Wg@5wR#*E~HgcxsIQ#3=t4`vh;F05{5>nG`-b$_Lk9o{>B|33~FL z8WVv2pbwDy;;xAKa5v9P2*K+D=boDszA!BUn!v9wOmd!`R=hYRd~SlX z(ivO_`asY3Pb%J>mw&_ZxRjOQSFXM{uPAa-0lKd6!AbesC$+ba>4v%z*Y=Z7PGcRd zNq7B#JKd4WX0MGRFHUivofJMdDF8dsYG(;Pizl5#Z%%?)(7W(3G9(^R0FgysC=l6@ie7$x^{K^5|3sVAM&#Q;TPfjR8 z^=-O9n>pBcpvQiDM*Q+Y5dZ}7CyT0&&wK~v$7ht3-!W=Ou(P2#7r1pmp9!cf2H9|&b#mA`)D@pD==<6uFHB2*c|i2i0rATR1h*!X z7xo%no{_$EP<4GG zf4QXm<9YbAbI3BFu?ppD1waJg4}f#4fKFdtQciR_)CNMU;_+Bj2EyXW_T#}8f7`6g zQJ_i;@k}n&F;03y>A2_lgYviL_@{;~{#dfUXHsHLJIwOtq^Y+(Jlqish64m?_BBt& zJEz^z3~4px8naIv4Saq{^Z5n%PZyB8p{$5lmWh0J9{Jj{6*j)g zWc36Qv&Wh0GR1m@i21)CD5zp92H*}MhOFi=`qY2l;?k0c4sWQ7`u0(4j9)0f|`PF6k&zIESa8XTJ)p3{D&o3aKUj(TC zd=dHLA@uD9vbWhyM*;#{hmuT+5qziAvz;bgw}bhUwd*UkJg~7^Lh8jI%!}Wg6TWd+ z^t*XM%qE}-VB8g}Yu%kpMfV&ymKs{r`kL*e&WNzAcGB*$M`9r&m=Cz|-=D?)dPNNe zx*H0xZdr$VS;rlgwJ%*$y?R0)tZOy9f<^-@Qj>;YyIifa2J6H+A4f@01+Yy^_Zetc z`guQ}RzE+BzBs3Q{s>+Oi?UuZf*J5YW2SG;6;9h6Hf^9oZwn~Y8jUj(cA;i9!)i6% zm?FNqs{ZN<`j^Y!g0d>*lKOw|@WmydUHzBK>dzm-Cc9lqGJ&`naH~ryS9qhzXfk2< zg*~yXGu|RX?YJX&^TQDL5+1uIoX*Az6W08+%9iyfa_&Hc!)4opsm6>q)zBh0`WcAd?5hg~9IqZj zXPTw38pdF*Sfw33ar4-Xx9owK*_#YTLOpfb*N>`}9z~WO*8J_7=Kof>`VEwC)Lcft zyyGNr6-?qMXJp5EGToy|%`TJ3n+ng}a3itg*$ytz%%1(AvVT=2>rj zuiiv>UAW!jetH_dIxLf8R;^wibwCS~v0U1RSzL+czPg5HoG=4r3!~)!UDthe8BC() zZx3tlh61FlssR&x1^8LyZ`ZUS1-*V){Lr9$yww+)EjOh|8a*m)9F zUDrgYcY%y|ID+wbCR=EZC!M0|nrbdgy6pNrDJ~*oh#;lOYKwS{E?lfbrNKld(bQx2 zcxe*7*G;^1So7Yz90*vtfh|3({TfO!)>hSMfNH?f!=RJq{gd*SL49&m^2sUDQwOoJ zf~_eV^n@Z>jZz?iYAQCenKiIAF0gf(oqnqs@t8z0KW;NA1L2_6X0EJdayX1NKfdR_ zAN@!q7GQcENDOibEAGQQI4|V4I%18$*Y-N%&Ev{19zvFGVoNu)MRC`)0LqG#m7pum z?ltre=du62to!Jc{QY^wYjg5rw!1T3kg!+x+E?c^XVQ_Dtak}5S3 z204a8fq0$6>y;aQ5|l&1lM3rXG2 z_d{j?Tm^B5f*1z@xb(E@^r$Nr#b^6m*@!;x6aDHqwy({Y zPDlLtehqFBiUhSt#OzJb6iyx%A_HlTA)~M)1X>>+=?q6hLf9lj&EPe_o(__rT*|I3 zFJ&>R)@`kB9iADSoYm=2!bAHaxWdW1EyoUXD z!MwM_b7jWU)f`ZmBRsjbf(_TO#U|1c3VB^dUOt47xJsj7>Fi-5)SMld!z>;lq*90X zu*lvjW3SlJL0AkXvypIz-T5&`B#WS^PC>)fTqUd!OC{YiS9-^$NtXv?#zfTh!XeGu z$0e^Hk$!p>{`4ID+F=Q(PC-mB-PBQlrlm*J#|N$1`lvOOhqP9W$ri{IB(Q-eQE&x9 zu?)IAg3Pojby@|R&CuC`%{j0eMg1*PbuB$0_E{>&PPh(~I$c?k&#q?Bb_HVzZ@S&= z^a=TN8jHu1D($|I->KbLBjbsr;b=IWZ}Pazm-eVXoR|FegzT;3vUh$ef8$88u>Rnb zV(Aee>l!c({p}fDDrhiT-5M>T(Hm5-k}rlfQk9!_(md#n7iW}Vm)hl6Fc(~UB|3^w~S7M-Zx3%T7^uSr1Y6-_{jFMJH(R=iet6CV%<$tZ zoFw(JA)(4pURhZ~rLC=o>zw@Y3?DVQ4Dmr-sEdU+iWC}xBuIzTtY#Wv+TNTpAHmWN zKDeEywribfkf&Y#aI9+dD(jwO?L_LDl{h*d~gyK$u_G{^7Fe&3X9Z9t}co~I9JK3kN2b{1NC8e6)hp)5Uy z{`oSN2wBhW(dX)Xp@zO-U5gGkiEIUw@Da`cc!t|y%;gf=$N=sN%WMr=v#plNUr*DZ zsKSf$#e5o_&GEPhu=G&9(HC$BTgH8zKMiyqOAee0cb{-H&l2gq)4ap}=sn)ovrL=2N|@)~HIP zapszuCi_B^tNTn2Qk!b-Rw(5>J|_}(BjR03-qtOf*Kb*W|HhIZ{MUbck43L2gvH)y zif{)VCdg(G;<(O6>K!Jz29e@wPHVl(o$kajsQ@AMbu(ms%2c-xPmix)NR8{0qi&Z4 zRYPqNdCIVH)Aq^@yZD`n~3bM{&WL?m1K+<_3~Pgf0XNkfBQ#^y>!cK{@Rt5J#tyX3)9Q|?fH>ei9RejiNcn!0+=J^xwH?A3VhyfrtW ziH&lIf+o6`V;>M$nn0&^W>s%ef+{M^_Uf1&(mW=l3W<;j7ncEgnOB*x7ZV z{m6@lANzFv)`uf!U(fche!ADK0X6IGe^j^W}`;z za^QsBE|Nhyqk+X{fpjF5%QvnsxqnR=jk-&%(<>kW0hA`q){^svM0OGKTN z3ti01yP1y+&?lQz6M4z?A%1^@N$TnWp+nOo8IYNwv@zK1idx{Aef`$Td+)vXzW@B5 z0jfAq&@T=fZ%rGXoH1V-(Yh4tsM~%-`F_ckZ95oj?k+mlmu$*(jv7fDW;BpGp+F)9 zPl%@K(lMJ+x{Xt{cIS>wVD&|eyGCNQ5rP9YQnt`CbM9t?x| z9SK;7`Nen)_hqPZI~<)5S@NXAL3kpmd=skEK`>gqy#x_#RU@*VI?eTQY;m_ZLzLI- z+6rs+_uTiuzy07|u=tf)gFy@7CL^e)EhMhttl@B3mS_R@=R#q>T4x|}*x~W2bc9|D zoocC>Z(~O7vW$b>oU(j!UQM|*RJ*6y1S+aj)PWIpkngsrxhD{l+eWCHT5>#*1jCS^i511G z<3z0&t8!s9J&xlB#NbJz&WzgZ+QpJGC1{OMQ&KKuNVI)(H!i;PM`ti4s9oztw`p|x zt}Jo1fr@DrZX?f#DHey&PcERZ9Flx=76zZ`t`D+*eH@}ZHbgtxsnY4-h~KPGLS_vo z5b_N-;!zW|w;nrlWZ>vT(`=8WIRxo26^Ze!s&dx$dy+&|gNqTtYl4OvJH`TE05ZF0 z9O*tfy@py_#YS9wvQ6u25!pM;=`mw^f1vF^#3ts^Hm9wOLruJe4(9$kYSb#|PeIp) zgzuh&7CIOY?Pe`@&@Xf|7dsi0>;3e_KKW!bye}tl7zChL04v<7tyZd_-3jS)vzkZ7 zlm}WAdQ1u4&nn;GR9C1uC1&Zm1W_F~*LXA)4vgVG(xWr&h)TwZ+Qg?jxMvHrvmNv^?X+_p)KhKL)9v)Los83Mv@`AWGX(&H za;2Yrt)KbG5c8p4&TJ!hFtp2|SRd4ELLr7g$WJ*0NuowAt!2|I`0OgFi0yDWTv#n3 z{4vHWMS1JA!cCZHqm;8lB;tzrbi0;8;>zu8EgLexW?#$r>2O1Dt&CLbjdd;|gD;co z?CmMT+4k!5-OO{Hj1?U~7VrtMP@n_b7CRV}tNrX1uJyB@7-5X&5yA*tF;019)wYcf z2&n6TKDCT0pl^0~0}9NFN~irP5|*f8DWi7Bj<39{86wyQako}iZZ@MFKOt}{N=@Rmq!n)p$vuP= zd=uD{V1anL(EX3C`mU_y2xC1u%s$vG9j_NXHq3r}ggud{080j}Tacr`rt-)zcQjgI z60UJVYaK;Oozfp$kZQG@<*?JQL5rVX zh{`W?Q9*$J!|4N>zL9nJR046=2bed9*q3^ky}lhbS!s)HD_}Uh^NCU3jUg_ef!Iul zOPunx01#dQ?RKxG+zUVGLpC_HR0XOt7&N)A5pP{5__t_A*-og$39a#~N?p)TI-Q&T zQKYX%)puomN7>C`&R}RKDFw@|)FLTyE6QfGH6xLV6HQd$93ZaSV3mT9Ukmhkm1}o< zx1|jmJc`mFy1{2;m{3kfcUL~+2V1UBPhIiVCN1@<$`ZN_GxgPHyBL2T=_{JP<<{Ln zRy1so158foH<02Imwc^Tu{MZ2XjyK1lx20sjjgsVpaDb|99swcI7OXY!TjH)FdliHn^rmh&^L}j&rOT}fm^HM2G|b|azG^w0{nOrn1WI; zBrpuf0)#c|!1A81t6E-7%xCutTYz+^)T1f`(tU6lh{CyS704>*J86pr>bWlF`Oe~= z4nhiO`uj)+_JG*9eOS8mv~lT4<2xr6lxqX*B6qn3+8}El&eix-WrKn8qm8w|0MG`q zRtTvd1o+{yFuD#jjx^MO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mouse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp new file mode 100644 index 0000000..afa2bbc --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.cpp @@ -0,0 +1,413 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "pch.h" +#include "DirectXBase.h" +#include +#include + +using namespace Microsoft::WRL; +using namespace Windows::UI::Core; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::Foundation; +using namespace Windows::Graphics::Display; +using namespace D2D1; + +// Constructor. +DirectXBase::DirectXBase() : + m_dpi(-1.0f) +{ +} + +// Initialize the DirectX resources required to run. +void DirectXBase::Initialize(CoreWindow^ window, SwapChainBackgroundPanel^ panel, float dpi) +{ + m_window = window; + m_panel = panel; + + CreateDeviceIndependentResources(); + CreateDeviceResources(); + SetDpi(dpi); +} + +// These are the resources required independent of the device. +void DirectXBase::CreateDeviceIndependentResources() +{ + D2D1_FACTORY_OPTIONS options; + ZeroMemory(&options, sizeof(D2D1_FACTORY_OPTIONS)); + +#if defined(_DEBUG) + // If the project is in a debug build, enable Direct2D debugging via SDK Layers + // TODO: investigate resource leaks reported by a debug version of a device. + // options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION; +#endif + + DX::ThrowIfFailed( + D2D1CreateFactory( + D2D1_FACTORY_TYPE_SINGLE_THREADED, + __uuidof(ID2D1Factory1), + &options, + &m_d2dFactory + ) + ); + + DX::ThrowIfFailed( + DWriteCreateFactory( + DWRITE_FACTORY_TYPE_SHARED, + __uuidof(IDWriteFactory), + &m_dwriteFactory + ) + ); + + DX::ThrowIfFailed( + CoCreateInstance( + CLSID_WICImagingFactory, + nullptr, + CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&m_wicFactory) + ) + ); +} + +// These are the resources that depend on the device. +void DirectXBase::CreateDeviceResources() +{ + // This flag adds support for surfaces with a different color channel ordering than the API default. + // It is recommended usage, and is required for compatibility with Direct2D. + UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; + ComPtr dxgiDevice; + +#if defined(_DEBUG) + // If the project is in a debug build, enable debugging via SDK Layers with this flag. + creationFlags |= D3D11_CREATE_DEVICE_DEBUG; +#endif + + // This array defines the set of DirectX hardware feature levels this app will support. + // Note the ordering should be preserved. + // Don't forget to declare your application's minimum required feature level in its + // description. All applications are assumed to support 9.1 unless otherwise stated. + D3D_FEATURE_LEVEL featureLevels[] = + { + D3D_FEATURE_LEVEL_11_1, + D3D_FEATURE_LEVEL_11_0, + D3D_FEATURE_LEVEL_10_1, + D3D_FEATURE_LEVEL_10_0, + D3D_FEATURE_LEVEL_9_3, + D3D_FEATURE_LEVEL_9_2, + D3D_FEATURE_LEVEL_9_1 + }; + + // Create the DX11 API device object, and get a corresponding context. + ComPtr device; + ComPtr context; + DX::ThrowIfFailed( + D3D11CreateDevice( + nullptr, // specify null to use the default adapter + D3D_DRIVER_TYPE_HARDWARE, + 0, // leave as 0 unless software device + creationFlags, // optionally set debug and Direct2D compatibility flags + featureLevels, // list of feature levels this app can support + ARRAYSIZE(featureLevels), // number of entries in above list + D3D11_SDK_VERSION, // always set this to D3D11_SDK_VERSION for Metro style apps + &device, // returns the Direct3D device created + &m_featureLevel, // returns feature level of device created + &context // returns the device immediate context + ) + ); + // Get the DirectX11.1 device by QI off the DirectX11 one. + DX::ThrowIfFailed( + device.As(&m_d3dDevice) + ); + + // And get the corresponding device context in the same way. + DX::ThrowIfFailed( + context.As(&m_d3dContext) + ); + + // Obtain the underlying DXGI device of the Direct3D11.1 device. + DX::ThrowIfFailed( + m_d3dDevice.As(&dxgiDevice) + ); + + // Obtain the Direct2D device for 2-D rendering. + DX::ThrowIfFailed( + m_d2dFactory->CreateDevice(dxgiDevice.Get(), &m_d2dDevice) + ); + + // And get its corresponding device context object. + DX::ThrowIfFailed( + m_d2dDevice->CreateDeviceContext( + D2D1_DEVICE_CONTEXT_OPTIONS_NONE, + &m_d2dContext + ) + ); + + // Release the swap chain (if it exists) as it will be incompatible with the new device. + m_swapChain = nullptr; +} + +// Helps track the DPI in the helper class. +// This is called in the dpiChanged event handler in the view class. +void DirectXBase::SetDpi(float dpi) +{ + if (dpi != m_dpi) + { + // Save the DPI of this display in our class. + m_dpi = dpi; + + // Update Direct2D's stored DPI. + m_d2dContext->SetDpi(m_dpi, m_dpi); + + // Often a DPI change implies a window size change. In some cases Windows will issues + // both a size changed event and a DPI changed event. In this case, the resulting bounds + // will not change, and the window resize code will only be executed once. + UpdateForWindowSizeChange(); + } +} + +// This routine is called in the event handler for the view SizeChanged event. +void DirectXBase::UpdateForWindowSizeChange() +{ + // Only handle window size changed if there is no pending DPI change. + if (m_dpi != DisplayProperties::LogicalDpi) + return; + + if (m_window->Bounds.Width != m_windowBounds.Width || + m_window->Bounds.Height != m_windowBounds.Height) + { + m_d2dContext->SetTarget(nullptr); + m_d2dTargetBitmap = nullptr; + m_renderTargetView = nullptr; + m_depthStencilView = nullptr; + CreateWindowSizeDependentResources(); + } +} + +// Allocate all memory resources that change on a window SizeChanged event. +void DirectXBase::CreateWindowSizeDependentResources() +{ + // Store the window bounds so the next time we get a SizeChanged event we can + // avoid rebuilding everything if the size is identical. + m_windowBounds = m_window->Bounds; + + // Calculate the necessary swap chain and render target size in pixels. + m_renderTargetSize.Width = ConvertDipsToPixels(m_windowBounds.Width); + m_renderTargetSize.Height = ConvertDipsToPixels(m_windowBounds.Height); + + // If the swap chain already exists, resize it. + if (m_swapChain != nullptr) + { + DX::ThrowIfFailed( + m_swapChain->ResizeBuffers( + 2, + static_cast(m_renderTargetSize.Width), + static_cast(m_renderTargetSize.Height), + DXGI_FORMAT_B8G8R8A8_UNORM, + 0 + ) + ); + } + // Otherwise, create a new one. + else + { + // Allocate a descriptor. + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0}; + swapChainDesc.Width = static_cast(m_renderTargetSize.Width); // Match the size of the windowm. + swapChainDesc.Height = static_cast(m_renderTargetSize.Height); + swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swapchain format. + swapChainDesc.Stereo = false; + swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling. + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = 2; // Use double buffering to enable flip. + swapChainDesc.Scaling = DXGI_SCALING_STRETCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Metro style apps must use this SwapEffect. + swapChainDesc.Flags = 0; + + // Once the desired swap chain description is configured, it must be created on the same adapter as our D3D Device. + + // First, retrieve the underlying DXGI Device from the D3D Device. + ComPtr dxgiDevice; + DX::ThrowIfFailed( + m_d3dDevice.As(&dxgiDevice) + ); + + // Identify the physical adapter (GPU or card) this device is running on. + ComPtr dxgiAdapter; + DX::ThrowIfFailed( + dxgiDevice->GetAdapter(&dxgiAdapter) + ); + + // And obtain the factory object that created it. + ComPtr dxgiFactory; + DX::ThrowIfFailed( + dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)) + ); + + // Create the swap chain and then associate it with the SwapChainBackgroundPanel. + DX::ThrowIfFailed( + dxgiFactory->CreateSwapChainForComposition( + m_d3dDevice.Get(), + &swapChainDesc, + nullptr, + &m_swapChain + ) + ); + + ComPtr panelNative; + DX::ThrowIfFailed( + reinterpret_cast(m_panel)->QueryInterface(IID_PPV_ARGS(&panelNative)) + ); + + DX::ThrowIfFailed( + panelNative->SetSwapChain(m_swapChain.Get()) + ); + + // Ensure that DXGI does not queue more than one frame at a time. This both reduces + // latency and ensures that the application will only render after each VSync, minimizing + // power consumption. + DX::ThrowIfFailed( + dxgiDevice->SetMaximumFrameLatency(1) + ); + } + + // Obtain the backbuffer for this window which will be the final 3D rendertarget. + ComPtr backBuffer; + DX::ThrowIfFailed( + m_swapChain->GetBuffer(0, IID_PPV_ARGS(&backBuffer)) + ); + + // Create a view interface on the rendertarget to use on bind. + DX::ThrowIfFailed( + m_d3dDevice->CreateRenderTargetView( + backBuffer.Get(), + nullptr, + &m_renderTargetView + ) + ); + + // Create a descriptor for the depth/stencil buffer. + CD3D11_TEXTURE2D_DESC depthStencilDesc( + DXGI_FORMAT_D24_UNORM_S8_UINT, + static_cast(m_renderTargetSize.Width), + static_cast(m_renderTargetSize.Height), + 1, + 1, + D3D11_BIND_DEPTH_STENCIL + ); + + // Allocate a 2-D surface as the depth/stencil buffer. + ComPtr depthStencil; + DX::ThrowIfFailed( + m_d3dDevice->CreateTexture2D( + &depthStencilDesc, + nullptr, + &depthStencil + ) + ); + + // Create a DepthStencil view on this surface to use on bind. + CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(D3D11_DSV_DIMENSION_TEXTURE2D); + DX::ThrowIfFailed( + m_d3dDevice->CreateDepthStencilView( + depthStencil.Get(), + &depthStencilViewDesc, + &m_depthStencilView + ) + ); + + // Create a viewport descriptor of the full window size. + CD3D11_VIEWPORT viewport( + 0.0f, + 0.0f, + m_renderTargetSize.Width, + m_renderTargetSize.Height + ); + + // Set the current viewport using the descriptor. + m_d3dContext->RSSetViewports(1, &viewport); + + // Now we set up the Direct2D render target bitmap linked to the swapchain. + // Whenever we render to this bitmap, it will be directly rendered to the + // swapchain associated with the window. + D2D1_BITMAP_PROPERTIES1 bitmapProperties = + BitmapProperties1( + D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW, + PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED), + m_dpi, + m_dpi + ); + + // Direct2D needs the DXGI version of the backbuffer surface pointer. + ComPtr dxgiBackBuffer; + DX::ThrowIfFailed( + m_swapChain->GetBuffer(0, IID_PPV_ARGS(&dxgiBackBuffer)) + ); + + // Get a D2D surface from the DXGI back buffer to use as the D2D render target. + DX::ThrowIfFailed( + m_d2dContext->CreateBitmapFromDxgiSurface( + dxgiBackBuffer.Get(), + &bitmapProperties, + &m_d2dTargetBitmap + ) + ); + + // So now we can set the Direct2D render target. + m_d2dContext->SetTarget(m_d2dTargetBitmap.Get()); + + // Set D2D text anti-alias mode to Grayscale to ensure proper rendering of text on intermediate surfaces. + m_d2dContext->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE); +} + +// Method to deliver the final image to the display. +void DirectXBase::Present() +{ + // The application may optionally specify "dirty" or "scroll" rects to improve efficiency + // in certain scenarios. + DXGI_PRESENT_PARAMETERS parameters = {0}; + parameters.DirtyRectsCount = 0; + parameters.pDirtyRects = nullptr; + parameters.pScrollRect = nullptr; + parameters.pScrollOffset = nullptr; + + // The first argument instructs DXGI to block until VSync, putting the application + // to sleep until the next VSync. This ensures we don't waste any cycles rendering + // frames that will never be displayed to the screen. + HRESULT hr = m_swapChain->Present1(1, 0, ¶meters); + + // If the device was removed either by a disconnect or a driver upgrade, we + // must completely reinitialize the renderer. + if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET) + { + Initialize(m_window.Get(), m_panel, m_dpi); + } + else + { + DX::ThrowIfFailed(hr); + } +} + +// Method to convert a length in device-independent pixels (DIPs) to a length in physical pixels. +float DirectXBase::ConvertDipsToPixels(float dips) +{ + static const float dipsPerInch = 96.0f; + return floor(dips * m_dpi / dipsPerInch + 0.5f); // Round to nearest integer. +} diff --git a/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h new file mode 100644 index 0000000..d03e08a --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/win8ui/DirectXBase.h @@ -0,0 +1,92 @@ +/* + Copyright (c) 2005-2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include "App.xaml.h" +#include + +#pragma warning (disable: 4449) + +// Helper utilities to make DirectX APIs work with exceptions +namespace DX +{ + inline void ThrowIfFailed(HRESULT hr) + { + if (FAILED(hr)) + { + // Set a breakpoint on this line to catch DirectX API errors + throw Platform::Exception::CreateException(hr); + } + } +} + +// Helper class that initializes DirectX APIs +ref class DirectXBase abstract +{ +internal: + DirectXBase(); + +public: + virtual void Initialize(Windows::UI::Core::CoreWindow^ window, Windows::UI::Xaml::Controls::SwapChainBackgroundPanel^ panel, float dpi); + virtual void CreateDeviceIndependentResources(); + virtual void CreateDeviceResources(); + virtual void SetDpi(float dpi); + virtual void CreateWindowSizeDependentResources(); + virtual void UpdateForWindowSizeChange(); + virtual void Render() = 0; + virtual void Present(); + virtual float ConvertDipsToPixels(float dips); + +protected private: + + Platform::Agile m_window; + Windows::UI::Xaml::Controls::SwapChainBackgroundPanel^ m_panel; + + // Direct2D Objects + Microsoft::WRL::ComPtr m_d2dFactory; + Microsoft::WRL::ComPtr m_d2dDevice; + Microsoft::WRL::ComPtr m_d2dContext; + Microsoft::WRL::ComPtr m_d2dTargetBitmap; + + // DirectWrite & Windows Imaging Component Objects + Microsoft::WRL::ComPtr m_dwriteFactory; + Microsoft::WRL::ComPtr m_wicFactory; + + // Direct3D Objects + Microsoft::WRL::ComPtr m_d3dDevice; + Microsoft::WRL::ComPtr m_d3dContext; + Microsoft::WRL::ComPtr m_swapChain; + Microsoft::WRL::ComPtr m_renderTargetView; + Microsoft::WRL::ComPtr m_depthStencilView; + + D3D_FEATURE_LEVEL m_featureLevel; + Windows::Foundation::Size m_renderTargetSize; + Windows::Foundation::Rect m_windowBounds; + float m_dpi; +}; + +#pragma warning (default: 4449) diff --git a/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml b/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml new file mode 100644 index 0000000..a255074 --- /dev/null +++ b/examples/parallel_for/tachyon/msvs/win8ui/DirectXPage.xaml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + +