Commit 6aae8d37 by Tom Laudeman

Merging tom into master, getting IR as well

parents 728ec78d 8d4dc47a
...@@ -2,3 +2,21 @@ ...@@ -2,3 +2,21 @@
These documents describe the functionality desired of the system. These should be high-level requirements, geared toward the policy side, of the form "The system should do X." These documents describe the functionality desired of the system. These should be high-level requirements, geared toward the policy side, of the form "The system should do X."
## Table of Contents (evolving)
* [Overview of data](Requirements/Data Overview.md)
* [Serialized CPF output](Requirements/EAC-CPF Output.md)
* [List of and Types of documents generated](Requirements/Generated Documents.md)
* [Identity Reconciliation engine](Requirements/Identity Reconciliation.md)
* [Broad overview of storage implementation](Requirements/Internal Data Storage.md)
* [Licenses for code and documentation](Requirements/Licensing.md)
* [Prose from the Mellon Proposal](Requirements/Mellon Proposal.md)
* [What the name parser needs to do](Requirements/Name Parser.md)
* [Overview of necessary new software sub-systems](Requirements/New Features.md)
* [Guidelines for development](Requirements/Software Development Process.md)
* [Guidlines for user documentation](Requirements/User Documentation.md)
* [Broad notes about user interface philosophy](Requirements/User Interface.md)
* [Authentication, Authorization, roles](Requirements/User Management.md)
* [Application behavior ecapsulated in a workflow manager](Requirements/Workflow Engine.md)
# Identity Reconciliation Engine
![Engine Diagram](http://gitlab.iath.virginia.edu/snac/Documentation/raw/ir/Specifications/Originals/IR_Engine.svg)
The identity reconciliation engine will operate on SNAC Identity Constellations, as defined in [this specification](/Specifications/Server API/Constellation.md) and depicted in [this figure](/Specifications/Originals/IC_Overview.pdf). The engine will take a partial constellation as input (called the _query constellation_) and find appropriate candidate matches from the SNAC database (called _candidate constellations_).
The engine is architected as an independent multi-stage process, with a coalescing weighting function to produce the final results. Specifically, the engine will consist of multiple independent stages, which may run in parallel, to produce independent lists of resulting candidate constellations, together with a numeric score for the stage, from the query constellation. The coalescer will then combine each set of resulting candidate constellations into one list of candidates by combining the scores for each constellation across the executed stages.
Within the sorted list of resulting candidate constellations, each will report its score among the stages. The coalescer's weighting function may be modified, either by hand or programmatically, to enhance the resulting set of candidate constellations. A human must verify and accept that the top candidate(s) is the same as the query constellation before any merging may take place. **Therefore, this engine does not and can not guarantee 100% accuracy in its matching.**
## Implementation Notes
* The identity reconciliation engine may be used as a search engine within SNAC by limiting the stages performed and providing a query constellation with only the parts interested in finding. For example, to search for a name, a query constellation with that name may be passed to the reconciliation engine. The process would be the same to search for an entity that is associated with a given place, occupation, or exist dates.
* Based on the highly parallelizable nature of the independent stages followed by the coalescer, the identity reconciliation engine maybe implemented (or enhanced) using the [Map-Reduce Framework](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) on a large cluster.
# Stage Designs
The following stages are proposed for the Identity Reconciliation Engine:
* **Candidate Constellation producing stages** *These stages produce lists of candidate constellations.*
* Elastic Search Name Entry (Heading) : *Search the entire name entry from the query constellation against all constructed name entry strings from SNAC identity constellations. Return the top N constellations based on Elastic Search's search algorithm with Elastic Search native scores as the stage score for each candidate constellation.*
* Elastic Search Name (Name-only) : *Search the name portion of the name entry from the query constellation against all constructed name-only strings from SNAC identity constellations. Return the top N constellations based on Elastic Search's search algorithm with Elastic Search native scores as the stage score for each candidate constellation.*
* Elastic Search Surname : *Search the surname component from the query constellation against all surnames from SNAC identity constellations. Return the top N constellations based on Elastic Search's search algorithm with Elastic Search native scores as the stage score for each candidate constellation.*
* Elastic Search Forenames : *Search the forenames component from the query constellation against all forenames from SNAC identity constellations. Return the top N constellations based on Elastic Search's search algorithm with Elastic Search native scores as the stage score for each candidate constellation.*
* Exist Dates : *Search the exist dates from the query constellation against all identity constellations in SNAC. Return all constellations that contain the exact exist dates as the query constellation.*
* Fuzzy Exist Dates : *Search the exist dates from the query constellation against all identity constellations in SNAC. Return all constellations that contain exist dates within a range of X from those in the query. Stage score is defined as the distance from the query's dates, lower is better.*
* Occupation : *Search the list of occupations from the query constellation against all identity constellations in SNAC. Return all constellations that match all occupations in the query constellation. (The candidates must have the entire list of occupations from the query as a subset of their occupation list.)*
* Place : *Search the list of places from the query constellation against all identity constellations in SNAC. Return all constellations that match all places in the query constellation. (The candidates' list of places must be a superset of the query constellation's places.)*
* **Candidate Constellation list modifying stages** *These stages take lists of candidate constellations and modify or replace the scores for the input results.*
* Name Entry Length : *Compute the difference in length between the candidate constellation's constructed name entry string and the query constellation's constructed name entry string. Replace the original stage score with the log of the difference. Lower scores are better.*
* SNAC Degree Sort : *Replace the original stage score with the number of constellation relations (constellation out-degree) in the candidate constellation. Constellations that are more connected with other SNAC identity constellations will get better scores.*
* SNAC Resource Count Sort : *Replace the original stage score with the number of resource relations (resource out-degree) in the candidate constellation. Constellations with higher resource relations will get better scores.*
* **Multi-Stage** *This stage allows the execution engine to run multiple stages in sequence, feeding the results of one stage as the input to the next. It results in one final list of candidate constellations from all independent stages it ran.*
,jrhott,Caspian,25.01.2016 17:22,file:///home/jrhott/.config/libreoffice/4;
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.2" baseProfile="tiny" width="279.4mm" height="215.9mm" viewBox="0 0 27940 21590" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="27940" height="21590"/>
</clipPath>
</defs>
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="450"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="…" horiz-adv-x="1509" d="M 1576,0 L 1576,219 1770,219 1770,0 1576,0 Z M 929,0 L 929,219 1121,219 1121,0 929,0 Z M 278,0 L 278,219 473,219 473,0 278,0 Z"/>
<glyph unicode="y" horiz-adv-x="1033" d="M 604,1 C 579,-64 553,-123 527,-175 500,-227 471,-272 438,-309 405,-346 369,-374 329,-394 289,-413 243,-423 191,-423 168,-423 147,-423 128,-423 109,-423 88,-420 67,-414 L 67,-279 C 80,-282 94,-284 110,-284 126,-284 140,-284 151,-284 204,-284 253,-264 298,-225 343,-186 383,-123 417,-37 L 434,6 5,1082 197,1082 425,484 C 432,466 440,442 451,412 461,382 471,352 482,322 492,292 501,265 509,241 517,217 522,202 523,196 525,203 530,218 538,240 545,261 554,285 564,312 573,339 583,366 593,393 603,420 611,444 618,464 L 830,1082 1020,1082 604,1 Z"/>
<glyph unicode="x" horiz-adv-x="1006" d="M 801,0 L 510,444 217,0 23,0 408,556 41,1082 240,1082 510,661 778,1082 979,1082 612,558 1002,0 801,0 Z"/>
<glyph unicode="u" horiz-adv-x="874" d="M 314,1082 L 314,396 C 314,343 318,299 326,264 333,229 346,200 363,179 380,157 403,142 432,133 460,124 495,119 537,119 580,119 618,127 653,142 687,157 716,178 741,207 765,235 784,270 797,312 810,353 817,401 817,455 L 817,1082 997,1082 997,231 C 997,208 997,185 998,160 998,135 998,111 999,89 1000,66 1000,47 1001,31 1002,15 1002,5 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 827,116 826,136 825,155 825,172 825,185 L 822,185 C 805,154 786,125 765,100 744,75 720,53 693,36 666,18 634,4 599,-6 564,-15 523,-20 476,-20 416,-20 364,-13 321,2 278,17 242,39 214,70 186,101 166,140 153,188 140,236 133,294 133,361 L 133,1082 314,1082 Z"/>
<glyph unicode="t" horiz-adv-x="531" d="M 554,8 C 527,1 499,-5 471,-10 442,-14 409,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 467,127 484,128 501,131 517,134 535,137 554,141 L 554,8 Z"/>
<glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,248 940,203 921,164 901,124 872,91 835,64 798,37 752,16 698,2 643,-13 581,-20 511,-20 448,-20 392,-15 342,-6 291,4 247,20 209,41 171,62 139,91 114,126 88,161 69,203 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 550,117 585,120 618,125 650,130 678,140 701,153 724,166 743,183 756,205 769,226 775,253 775,285 775,318 767,345 752,366 737,387 715,404 688,418 661,432 628,444 589,455 550,465 507,476 460,489 417,500 374,513 331,527 288,541 250,560 216,583 181,606 153,634 132,668 111,702 100,745 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 763,842 752,866 736,885 720,904 701,919 678,931 655,942 630,951 602,956 573,961 544,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,785 282,761 297,742 311,723 331,707 357,694 382,681 413,669 449,660 485,650 525,640 568,629 597,622 626,614 656,606 686,597 715,587 744,576 772,564 799,550 824,535 849,519 870,500 889,478 908,456 923,430 934,401 945,372 950,338 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="530" d="M 142,0 L 142,830 C 142,853 142,876 142,900 141,923 141,946 140,968 139,990 139,1011 138,1030 137,1049 137,1067 136,1082 L 306,1082 C 307,1067 308,1049 309,1030 310,1010 311,990 312,969 313,948 313,929 314,910 314,891 314,874 314,861 L 318,861 C 331,902 344,938 359,969 373,999 390,1024 409,1044 428,1063 451,1078 478,1088 505,1097 537,1102 575,1102 590,1102 604,1101 617,1099 630,1096 641,1094 648,1092 L 648,927 C 636,930 622,933 606,935 590,936 572,937 552,937 511,937 476,928 447,909 418,890 394,865 376,832 357,799 344,759 335,714 326,668 322,618 322,564 L 322,0 142,0 Z"/>
<glyph unicode="p" horiz-adv-x="953" d="M 1053,546 C 1053,464 1046,388 1033,319 1020,250 998,190 967,140 936,90 895,51 844,23 793,-6 730,-20 655,-20 578,-20 510,-5 452,24 394,53 350,101 319,168 L 314,168 C 315,167 315,161 316,150 316,139 316,126 317,110 317,94 317,76 318,57 318,37 318,17 318,-2 L 318,-425 138,-425 138,861 C 138,887 138,912 138,936 137,960 137,982 136,1002 135,1021 135,1038 134,1052 133,1066 133,1076 132,1082 L 306,1082 C 307,1080 308,1073 309,1061 310,1049 311,1035 312,1018 313,1001 314,982 315,963 316,944 316,925 316,908 L 320,908 C 337,943 356,972 377,997 398,1021 423,1041 450,1057 477,1072 508,1084 542,1091 575,1098 613,1101 655,1101 730,1101 793,1088 844,1061 895,1034 936,997 967,949 998,900 1020,842 1033,774 1046,705 1053,629 1053,546 Z M 864,542 C 864,609 860,668 852,720 844,772 830,816 811,852 791,888 765,915 732,934 699,953 658,962 609,962 569,962 531,956 496,945 461,934 430,912 404,880 377,848 356,804 341,748 326,691 318,618 318,528 318,451 324,387 337,334 350,281 368,238 393,205 417,172 447,149 483,135 519,120 560,113 607,113 657,113 699,123 732,142 765,161 791,189 811,226 830,263 844,308 852,361 860,414 864,474 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="980" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 490,-20 422,-9 363,14 304,37 254,71 213,118 172,165 140,223 119,294 97,364 86,447 86,542 86,915 248,1102 571,1102 655,1102 728,1090 789,1067 850,1044 900,1009 939,962 978,915 1006,857 1025,787 1044,717 1053,635 1053,542 Z M 864,542 C 864,626 858,695 845,750 832,805 813,848 788,881 763,914 732,937 696,950 660,963 619,969 574,969 528,969 487,962 450,949 413,935 381,912 355,879 329,846 309,802 296,747 282,692 275,624 275,542 275,458 282,389 297,334 312,279 332,235 358,202 383,169 414,146 449,133 484,120 522,113 563,113 609,113 651,120 688,133 725,146 757,168 783,201 809,234 829,278 843,333 857,388 864,458 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="874" d="M 825,0 L 825,686 C 825,739 821,783 814,818 806,853 793,882 776,904 759,925 736,941 708,950 679,959 644,963 602,963 559,963 521,956 487,941 452,926 423,904 399,876 374,847 355,812 342,771 329,729 322,681 322,627 L 322,0 142,0 142,851 C 142,874 142,898 142,923 141,948 141,971 140,994 139,1016 139,1035 138,1051 137,1067 137,1077 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 312,966 313,947 314,927 314,910 314,897 L 317,897 C 334,928 353,957 374,982 395,1007 419,1029 446,1047 473,1064 505,1078 540,1088 575,1097 616,1102 663,1102 723,1102 775,1095 818,1080 861,1065 897,1043 925,1012 953,981 974,942 987,894 1000,845 1006,788 1006,721 L 1006,0 825,0 Z"/>
<glyph unicode="m" horiz-adv-x="1457" d="M 768,0 L 768,686 C 768,739 765,783 758,818 751,853 740,882 725,904 709,925 688,941 663,950 638,959 607,963 570,963 532,963 498,956 467,941 436,926 410,904 389,876 367,847 350,812 339,771 327,729 321,681 321,627 L 321,0 142,0 142,851 C 142,874 142,898 142,923 141,948 141,971 140,994 139,1016 139,1035 138,1051 137,1067 137,1077 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 312,966 313,947 314,927 314,910 314,897 L 317,897 C 333,928 350,957 369,982 388,1007 410,1029 435,1047 460,1064 488,1078 521,1088 553,1097 590,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 946,928 964,957 984,982 1004,1007 1027,1029 1054,1047 1081,1064 1111,1078 1144,1088 1177,1097 1215,1102 1258,1102 1313,1102 1360,1095 1400,1080 1439,1065 1472,1043 1497,1012 1522,981 1541,942 1553,894 1565,845 1571,788 1571,721 L 1571,0 1393,0 1393,686 C 1393,739 1390,783 1383,818 1376,853 1365,882 1350,904 1334,925 1313,941 1288,950 1263,959 1232,963 1195,963 1157,963 1123,956 1092,942 1061,927 1035,906 1014,878 992,850 975,815 964,773 952,731 946,682 946,627 L 946,0 768,0 Z"/>
<glyph unicode="l" horiz-adv-x="187" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
<glyph unicode="i" horiz-adv-x="187" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
<glyph unicode="h" horiz-adv-x="874" d="M 317,897 C 337,934 359,965 382,991 405,1016 431,1037 459,1054 487,1071 518,1083 551,1091 584,1098 622,1102 663,1102 732,1102 789,1093 834,1074 878,1055 913,1029 939,996 964,962 982,922 992,875 1001,828 1006,777 1006,721 L 1006,0 825,0 825,686 C 825,732 822,772 817,807 811,842 800,871 784,894 768,917 745,934 716,946 687,957 649,963 602,963 559,963 521,955 487,940 452,925 423,903 399,875 374,847 355,813 342,773 329,733 322,688 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1076 322,1054 321,1032 320,1010 320,990 319,971 318,952 317,937 316,924 315,911 315,902 314,897 L 317,897 Z"/>
<glyph unicode="g" horiz-adv-x="927" d="M 548,-425 C 486,-425 431,-419 383,-406 335,-393 294,-375 260,-352 226,-328 198,-300 177,-267 156,-234 140,-198 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 594,-288 631,-282 664,-271 697,-260 726,-241 749,-217 772,-191 790,-159 803,-119 816,-79 822,-30 822,27 L 822,201 820,201 C 807,174 790,148 771,123 751,98 727,75 699,56 670,37 637,21 600,10 563,-2 520,-8 472,-8 403,-8 345,4 296,27 247,50 207,84 176,130 145,176 122,233 108,302 93,370 86,449 86,539 86,626 93,704 108,773 122,842 145,901 178,950 210,998 252,1035 304,1061 355,1086 418,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,914 825,932 826,953 827,974 828,993 829,1012 830,1030 831,1046 832,1059 833,1072 835,1080 836,1082 L 1007,1082 C 1006,1076 1006,1066 1005,1052 1004,1037 1004,1020 1003,1000 1002,980 1002,958 1002,934 1001,909 1001,884 1001,858 L 1001,31 C 1001,-120 964,-234 890,-311 815,-387 701,-425 548,-425 Z M 822,541 C 822,616 814,681 798,735 781,788 760,832 733,866 706,900 676,925 642,941 607,957 572,965 536,965 490,965 451,957 418,941 385,925 357,900 336,866 314,831 298,787 288,734 277,680 272,616 272,541 272,463 277,398 288,345 298,292 314,249 335,216 356,183 383,160 416,146 449,132 488,125 533,125 569,125 604,133 639,148 673,163 704,188 731,221 758,254 780,297 797,350 814,403 822,466 822,541 Z"/>
<glyph unicode="e" horiz-adv-x="980" d="M 276,503 C 276,446 282,394 294,347 305,299 323,258 348,224 372,189 403,163 441,144 479,125 525,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 1008,206 992,176 972,146 951,115 924,88 890,64 856,39 814,19 763,4 712,-12 650,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,649 100,735 125,806 150,876 185,933 229,977 273,1021 324,1053 383,1073 442,1092 504,1102 571,1102 662,1102 738,1087 799,1058 860,1029 909,988 946,937 983,885 1009,824 1025,754 1040,684 1048,608 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 538,969 507,964 474,955 441,945 410,928 382,903 354,878 330,845 311,803 292,760 281,706 278,641 L 862,641 Z"/>
<glyph unicode="d" horiz-adv-x="927" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 C 823,921 823,931 823,946 822,960 822,975 822,991 821,1006 821,1021 821,1035 821,1049 821,1059 821,1065 L 821,1484 1001,1484 1001,223 C 1001,197 1001,172 1002,148 1002,124 1002,102 1003,82 1004,62 1004,45 1005,31 1006,16 1006,6 1007,0 L 835,0 C 834,7 833,16 832,29 831,41 830,55 829,71 828,87 827,104 826,122 825,139 825,157 825,174 L 821,174 Z M 275,542 C 275,467 280,403 289,350 298,297 313,253 334,219 355,184 381,159 413,143 445,127 484,119 530,119 577,119 619,127 656,142 692,157 722,182 747,217 771,251 789,296 802,351 815,406 821,474 821,554 821,631 815,696 802,749 789,802 771,844 746,877 721,910 691,933 656,948 620,962 579,969 532,969 488,969 450,961 418,946 386,931 359,906 338,872 317,838 301,794 291,740 280,685 275,619 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="901" d="M 275,546 C 275,484 280,427 289,375 298,323 313,278 334,241 355,203 384,174 419,153 454,132 497,122 548,122 612,122 666,139 709,173 752,206 778,258 788,328 L 970,328 C 964,283 951,239 931,197 911,155 884,118 850,86 815,54 773,28 724,9 675,-10 618,-20 553,-20 468,-20 396,-6 337,23 278,52 230,91 193,142 156,192 129,251 112,320 95,388 87,462 87,542 87,615 93,679 105,735 117,790 134,839 156,881 177,922 203,957 232,986 261,1014 293,1037 328,1054 362,1071 398,1083 436,1091 474,1098 512,1102 551,1102 612,1102 666,1094 713,1077 760,1060 801,1038 836,1009 870,980 898,945 919,906 940,867 955,824 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 495,961 452,953 418,936 383,919 355,893 334,859 313,824 298,781 289,729 280,677 275,616 275,546 Z"/>
<glyph unicode="a" horiz-adv-x="1060" d="M 414,-20 C 305,-20 224,9 169,66 114,124 87,203 87,303 87,375 101,434 128,480 155,526 190,562 234,588 277,614 327,632 383,642 439,652 496,657 554,657 L 797,657 797,717 C 797,762 792,800 783,832 774,863 759,889 740,908 721,928 697,942 668,951 639,960 604,965 565,965 530,965 499,963 471,958 443,953 419,944 398,931 377,918 361,900 348,878 335,855 327,827 323,793 L 135,810 C 142,853 154,892 173,928 192,963 218,994 253,1020 287,1046 330,1066 382,1081 433,1095 496,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1090,111 1100,112 1110,113 1120,114 1130,116 1139,118 L 1139,6 C 1116,1 1094,-3 1072,-6 1049,-9 1025,-10 1000,-10 966,-10 937,-5 913,4 888,13 868,26 853,45 838,63 826,86 818,113 810,140 805,171 803,207 L 797,207 C 778,172 757,141 734,113 711,85 684,61 653,42 622,22 588,7 549,-4 510,-15 465,-20 414,-20 Z M 455,115 C 512,115 563,125 606,146 649,167 684,194 713,226 741,259 762,294 776,332 790,371 797,408 797,443 L 797,531 600,531 C 556,531 514,528 475,522 435,517 400,506 370,489 340,472 316,449 299,418 281,388 272,349 272,300 272,241 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="W" horiz-adv-x="1932" d="M 1511,0 L 1283,0 1039,895 C 1032,920 1024,950 1016,985 1007,1020 1000,1053 993,1084 985,1121 977,1158 969,1196 960,1157 952,1120 944,1083 937,1051 929,1018 921,984 913,950 905,920 898,895 L 652,0 424,0 9,1409 208,1409 461,514 C 472,472 483,430 494,389 504,348 513,311 520,278 529,239 537,203 544,168 554,214 564,259 575,304 580,323 584,342 589,363 594,384 599,404 604,424 609,444 614,463 619,482 624,500 628,517 632,532 L 877,1409 1060,1409 1305,532 C 1309,517 1314,500 1319,482 1324,463 1329,444 1334,425 1339,405 1343,385 1348,364 1353,343 1357,324 1362,305 1373,260 1383,215 1393,168 1394,168 1397,180 1402,203 1407,226 1414,254 1422,289 1430,324 1439,361 1449,402 1458,442 1468,479 1478,514 L 1727,1409 1926,1409 1511,0 Z"/>
<glyph unicode="S" horiz-adv-x="1192" d="M 1272,389 C 1272,330 1261,275 1238,225 1215,175 1179,132 1131,96 1083,59 1023,31 950,11 877,-10 790,-20 690,-20 515,-20 378,11 280,72 182,133 120,222 93,338 L 278,375 C 287,338 302,305 321,275 340,245 367,219 400,198 433,176 473,159 522,147 571,135 629,129 697,129 754,129 806,134 853,144 900,153 941,168 975,188 1009,208 1036,234 1055,266 1074,297 1083,335 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 613,659 573,668 534,679 494,689 456,701 420,716 383,730 349,747 317,766 285,785 257,809 234,836 211,863 192,894 179,930 166,965 159,1006 159,1053 159,1120 173,1177 200,1225 227,1272 264,1311 312,1342 360,1373 417,1395 482,1409 547,1423 618,1430 694,1430 781,1430 856,1423 918,1410 980,1396 1032,1375 1075,1348 1118,1321 1152,1287 1178,1247 1203,1206 1224,1159 1239,1106 L 1051,1073 C 1042,1107 1028,1137 1011,1164 993,1191 970,1213 941,1231 912,1249 878,1263 837,1272 796,1281 747,1286 692,1286 627,1286 572,1280 528,1269 483,1257 448,1241 421,1221 394,1201 374,1178 363,1151 351,1124 345,1094 345,1063 345,1021 356,987 377,960 398,933 426,910 462,892 498,874 540,859 587,847 634,835 685,823 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="R" horiz-adv-x="1244" d="M 1164,0 L 798,585 359,585 359,0 168,0 168,1409 831,1409 C 911,1409 982,1400 1044,1382 1105,1363 1157,1337 1199,1302 1241,1267 1273,1225 1295,1175 1317,1125 1328,1069 1328,1006 1328,961 1322,917 1309,874 1296,831 1275,791 1247,755 1219,719 1183,688 1140,662 1097,636 1045,618 984,607 L 1384,0 1164,0 Z M 1136,1004 C 1136,1047 1129,1084 1114,1115 1099,1146 1078,1173 1050,1194 1022,1215 988,1230 948,1241 908,1251 863,1256 812,1256 L 359,1256 359,736 820,736 C 875,736 922,743 962,757 1002,770 1035,789 1061,813 1086,837 1105,865 1118,898 1130,931 1136,966 1136,1004 Z"/>
<glyph unicode="Q" horiz-adv-x="1430" d="M 1495,711 C 1495,612 1482,521 1457,439 1431,356 1394,284 1346,222 1297,160 1238,110 1168,71 1097,32 1017,6 928,-6 942,-49 958,-85 976,-115 993,-145 1013,-169 1036,-189 1059,-207 1084,-221 1112,-231 1139,-239 1170,-244 1204,-244 1223,-244 1243,-243 1264,-240 1285,-237 1304,-234 1319,-231 L 1319,-365 C 1294,-371 1266,-376 1236,-381 1205,-385 1174,-387 1141,-387 1084,-387 1034,-378 991,-361 948,-344 911,-319 879,-287 846,-255 818,-216 795,-170 772,-123 751,-71 733,-12 628,-12 535,7 456,46 376,84 310,136 257,200 204,265 164,340 137,427 110,513 97,607 97,709 97,819 112,919 143,1008 174,1097 219,1172 278,1235 337,1297 411,1346 498,1379 585,1413 684,1430 797,1430 909,1430 1009,1413 1096,1379 1183,1345 1256,1297 1315,1234 1374,1171 1418,1096 1449,1007 1480,918 1495,820 1495,711 Z M 1300,711 C 1300,796 1289,873 1268,942 1246,1011 1214,1071 1172,1120 1129,1169 1077,1207 1014,1234 951,1261 879,1274 797,1274 713,1274 639,1261 576,1234 513,1207 460,1169 418,1120 375,1071 344,1011 323,942 302,873 291,796 291,711 291,626 302,549 324,479 345,408 377,348 420,297 462,246 515,206 578,178 641,149 713,135 795,135 883,135 959,149 1023,178 1086,207 1139,247 1180,298 1221,349 1251,409 1271,480 1290,551 1300,628 1300,711 Z"/>
<glyph unicode="O" horiz-adv-x="1430" d="M 1495,711 C 1495,601 1479,501 1448,411 1416,321 1370,244 1310,180 1250,116 1177,67 1090,32 1003,-3 905,-20 795,-20 679,-20 577,-2 490,35 403,71 330,122 272,187 214,252 170,329 141,418 112,507 97,605 97,711 97,821 112,920 143,1009 174,1098 219,1173 278,1236 337,1298 411,1346 498,1380 585,1413 684,1430 797,1430 909,1430 1009,1413 1096,1379 1183,1345 1256,1297 1315,1234 1374,1171 1418,1096 1449,1007 1480,918 1495,820 1495,711 Z M 1300,711 C 1300,796 1289,873 1268,942 1246,1011 1214,1071 1172,1120 1129,1169 1077,1207 1014,1234 951,1261 879,1274 797,1274 713,1274 639,1261 576,1234 513,1207 460,1169 418,1120 375,1071 344,1011 323,942 302,873 291,796 291,711 291,626 302,549 324,479 345,408 377,348 420,297 462,246 515,206 578,178 641,149 713,135 795,135 883,135 959,149 1023,178 1086,207 1139,247 1180,298 1221,349 1251,409 1271,480 1290,551 1300,628 1300,711 Z"/>
<glyph unicode="N" horiz-adv-x="1165" d="M 1082,0 L 328,1200 C 329,1167 331,1135 333,1103 334,1076 336,1047 337,1017 338,986 338,959 338,936 L 338,0 168,0 168,1409 390,1409 1152,201 C 1150,234 1148,266 1146,299 1145,327 1143,358 1142,391 1141,424 1140,455 1140,485 L 1140,1409 1312,1409 1312,0 1082,0 Z"/>
<glyph unicode="M" horiz-adv-x="1377" d="M 1366,0 L 1366,940 C 1366,974 1366,1009 1367,1044 1368,1079 1369,1112 1370,1141 1371,1175 1373,1208 1375,1240 1366,1206 1356,1172 1346,1139 1337,1110 1328,1080 1318,1048 1307,1015 1297,986 1287,960 L 923,0 789,0 420,960 C 416,970 412,982 408,995 403,1008 399,1023 394,1038 389,1053 384,1068 379,1084 374,1099 369,1115 364,1130 353,1165 342,1202 331,1240 332,1203 333,1166 334,1129 335,1098 336,1065 337,1031 338,996 338,966 338,940 L 338,0 168,0 168,1409 419,1409 794,432 C 799,419 804,402 811,381 818,360 824,338 830,316 836,294 842,273 847,254 852,234 855,219 857,208 859,219 863,234 868,254 873,274 880,295 887,317 894,339 900,360 907,381 914,402 920,419 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
<glyph unicode="L" horiz-adv-x="927" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 168,0 Z"/>
<glyph unicode="I" horiz-adv-x="213" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
<glyph unicode="F" horiz-adv-x="1006" d="M 359,1253 L 359,729 1145,729 1145,571 359,571 359,0 168,0 168,1409 1169,1409 1169,1253 359,1253 Z"/>
<glyph unicode="E" horiz-adv-x="1138" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 168,0 Z"/>
<glyph unicode="D" horiz-adv-x="1218" d="M 1381,719 C 1381,602 1363,498 1328,409 1293,319 1244,244 1183,184 1122,123 1049,78 966,47 882,16 792,0 695,0 L 168,0 168,1409 634,1409 C 743,1409 843,1396 935,1369 1026,1342 1105,1300 1171,1244 1237,1187 1289,1116 1326,1029 1363,942 1381,839 1381,719 Z M 1189,719 C 1189,814 1175,896 1148,964 1121,1031 1082,1087 1033,1130 984,1173 925,1205 856,1226 787,1246 712,1256 630,1256 L 359,1256 359,153 673,153 C 747,153 816,165 879,189 942,213 996,249 1042,296 1088,343 1124,402 1150,473 1176,544 1189,626 1189,719 Z"/>
<glyph unicode="C" horiz-adv-x="1324" d="M 792,1274 C 712,1274 641,1261 580,1234 518,1207 466,1169 425,1120 383,1071 351,1011 330,942 309,873 298,796 298,711 298,626 310,549 333,479 356,408 389,348 432,297 475,246 527,207 590,179 652,151 722,137 800,137 855,137 905,144 950,159 995,173 1035,193 1072,219 1108,245 1140,276 1169,312 1198,347 1223,387 1245,430 L 1401,352 C 1376,299 1344,250 1307,205 1270,160 1226,120 1176,87 1125,54 1068,28 1005,9 941,-10 870,-20 791,-20 677,-20 577,-2 492,35 406,71 334,122 277,187 219,252 176,329 147,418 118,507 104,605 104,711 104,821 119,920 150,1009 180,1098 224,1173 283,1236 341,1298 413,1346 498,1380 583,1413 681,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1194,1054 1176,1086 1153,1117 1130,1147 1102,1174 1068,1197 1034,1220 994,1239 949,1253 903,1267 851,1274 792,1274 Z"/>
<glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 768,1026 C 757,1053 747,1080 738,1107 728,1134 719,1159 712,1182 705,1204 699,1223 694,1238 689,1253 686,1262 685,1265 684,1262 681,1252 676,1237 671,1222 665,1203 658,1180 650,1157 641,1132 632,1105 622,1078 612,1051 602,1024 L 422,561 949,561 768,1026 Z"/>
<glyph unicode=":" horiz-adv-x="213" d="M 187,875 L 187,1082 382,1082 382,875 187,875 Z M 187,0 L 187,207 382,207 382,0 187,0 Z"/>
<glyph unicode="4" horiz-adv-x="1060" d="M 881,319 L 881,0 711,0 711,319 47,319 47,459 692,1409 881,1409 881,461 1079,461 1079,319 881,319 Z M 711,1206 C 710,1203 706,1196 701,1187 696,1177 690,1166 683,1154 676,1142 670,1130 663,1118 656,1105 649,1095 644,1087 L 283,555 C 280,550 275,543 269,534 262,525 256,517 249,508 242,499 236,490 229,481 222,472 217,466 213,461 L 711,461 711,1206 Z"/>
<glyph unicode="3" horiz-adv-x="1006" d="M 1049,389 C 1049,324 1039,267 1018,216 997,165 966,123 926,88 885,53 835,26 776,8 716,-11 648,-20 571,-20 484,-20 410,-9 351,13 291,34 242,63 203,99 164,134 135,175 116,221 97,266 84,313 78,362 L 264,379 C 269,342 279,308 294,277 308,246 327,220 352,198 377,176 407,159 443,147 479,135 522,129 571,129 662,129 733,151 785,196 836,241 862,307 862,395 862,447 851,489 828,521 805,552 776,577 742,595 707,612 670,624 630,630 589,636 552,639 518,639 L 416,639 416,795 514,795 C 548,795 583,799 620,806 657,813 690,825 721,844 751,862 776,887 796,918 815,949 825,989 825,1038 825,1113 803,1173 759,1217 714,1260 648,1282 561,1282 482,1282 418,1262 369,1221 320,1180 291,1123 283,1049 L 102,1063 C 109,1125 126,1179 153,1225 180,1271 214,1309 255,1340 296,1370 342,1393 395,1408 448,1423 504,1430 563,1430 642,1430 709,1420 766,1401 823,1381 869,1354 905,1321 941,1287 968,1247 985,1202 1002,1157 1010,1108 1010,1057 1010,1016 1004,977 993,941 982,905 964,873 940,844 916,815 886,791 849,770 812,749 767,734 715,723 L 715,719 C 772,713 821,700 863,681 905,661 940,636 967,607 994,578 1015,544 1029,507 1042,470 1049,430 1049,389 Z"/>
<glyph unicode="2" horiz-adv-x="954" d="M 103,0 L 103,127 C 137,205 179,274 228,334 277,393 328,447 382,496 436,544 490,589 543,630 596,671 643,713 686,754 729,795 763,839 790,884 816,929 829,981 829,1038 829,1078 823,1113 811,1144 799,1174 782,1199 759,1220 736,1241 709,1256 678,1267 646,1277 611,1282 572,1282 536,1282 502,1277 471,1267 439,1257 411,1242 386,1222 361,1202 341,1177 326,1148 310,1118 300,1083 295,1044 L 111,1061 C 117,1112 131,1159 153,1204 175,1249 205,1288 244,1322 283,1355 329,1382 384,1401 438,1420 501,1430 572,1430 642,1430 704,1422 759,1405 814,1388 860,1364 898,1331 935,1298 964,1258 984,1210 1004,1162 1014,1107 1014,1044 1014,997 1006,952 989,909 972,866 949,826 921,787 892,748 859,711 822,675 785,639 746,604 705,570 664,535 623,501 582,468 541,434 502,400 466,366 429,332 397,298 368,263 339,228 317,191 301,153 L 1036,153 1036,0 103,0 Z"/>
<glyph unicode="1" horiz-adv-x="927" d="M 156,0 L 156,153 515,153 515,1237 197,1010 197,1180 530,1409 696,1409 696,153 1039,153 1039,0 156,0 Z"/>
<glyph unicode="." horiz-adv-x="213" d="M 187,0 L 187,219 382,219 382,0 187,0 Z"/>
<glyph unicode="-" horiz-adv-x="531" d="M 91,464 L 91,624 591,624 591,464 91,464 Z"/>
<glyph unicode=")" horiz-adv-x="557" d="M 555,528 C 555,435 548,346 534,262 520,177 498,96 468,18 438,-60 400,-136 353,-209 306,-282 251,-354 186,-424 L 12,-424 C 75,-354 129,-282 175,-209 220,-136 258,-60 287,19 316,98 338,179 353,264 367,349 374,437 374,530 374,623 367,711 353,796 338,881 316,962 287,1041 258,1119 220,1195 175,1269 129,1342 75,1414 12,1484 L 186,1484 C 251,1414 306,1342 353,1269 400,1196 438,1120 468,1042 498,964 520,883 534,798 548,713 555,625 555,532 L 555,528 Z"/>
<glyph unicode="(" horiz-adv-x="583" d="M 127,532 C 127,625 134,713 148,798 162,883 184,964 214,1042 244,1120 282,1196 329,1269 376,1342 431,1414 496,1484 L 670,1484 C 607,1414 553,1342 508,1269 462,1195 424,1119 395,1041 366,962 344,881 330,796 315,711 308,623 308,530 308,437 315,349 330,264 344,179 366,98 395,19 424,-60 462,-136 508,-209 553,-282 607,-354 670,-424 L 496,-424 C 431,-354 376,-282 329,-209 282,-136 244,-60 214,18 184,96 162,177 148,262 134,346 127,435 127,528 L 127,532 Z"/>
<glyph unicode=" " horiz-adv-x="556"/>
</font>
</defs>
<defs>
<font id="EmbeddedFont_2" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="italic" ascent="1852" descent="450"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="x" horiz-adv-x="1192" d="M 706,0 L 497,444 117,0 -82,0 410,556 146,1082 335,1082 528,661 878,1082 1084,1082 615,558 896,0 706,0 Z"/>
<glyph unicode="N" horiz-adv-x="1430" d="M 987,0 L 456,1210 C 452,1179 448,1148 443,1116 439,1089 435,1060 430,1029 425,998 419,969 414,943 L 233,0 63,0 336,1409 548,1409 1082,194 C 1086,223 1090,253 1095,285 1099,312 1104,343 1109,377 1114,410 1120,444 1127,478 L 1308,1409 1480,1409 1207,0 987,0 Z"/>
</font>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 id32 id33 id34"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
</defs>
<defs class="TextEmbeddedBitmaps"/>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="com.sun.star.drawing.CustomShape">
<g id="id3">
<path fill="rgb(102,153,204)" stroke="none" d="M 23567,3509 C 23313,3509 23059,3763 23059,4017 L 23059,6049 C 23059,6303 23313,6558 23567,6558 L 26869,6558 C 27123,6558 27378,6303 27378,6049 L 27378,4017 C 27378,3763 27123,3509 26869,3509 L 23567,3509 Z M 23059,3509 L 23059,3509 Z M 27378,6558 L 27378,6558 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23567,3509 C 23313,3509 23059,3763 23059,4017 L 23059,6049 C 23059,6303 23313,6558 23567,6558 L 26869,6558 C 27123,6558 27378,6303 27378,6049 L 27378,4017 C 27378,3763 27123,3509 26869,3509 L 23567,3509 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23059,3509 L 23059,3509 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 27378,6558 L 27378,6558 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="24418" y="6472"/><tspan class="TextPosition" x="24418" y="6472"><tspan fill="rgb(0,0,0)" stroke="none">score: </tspan></tspan><tspan class="TextPosition" x="25790" y="6472"><tspan font-style="italic" fill="rgb(0,0,0)" stroke="none">x</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id4">
<path fill="rgb(204,204,204)" stroke="none" d="M 15593,18703 L 8989,18703 8989,3971 22197,3971 22197,18703 15593,18703 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 15593,18703 L 8989,18703 8989,3971 22197,3971 22197,18703 15593,18703 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="11440" y="4803"/><tspan class="TextPosition" x="11440" y="4803"><tspan fill="rgb(0,0,0)" stroke="none">Identity Reconciliation Engine</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id5">
<path fill="rgb(153,0,0)" stroke="none" d="M 8143,10938 L 8802,10938 8802,10623 9160,11131 8802,11640 8802,11324 8143,11324 8143,10938 Z M 8143,10623 L 8143,10623 Z M 9160,11640 L 9160,11640 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8143,10938 L 8802,10938 8802,10623 9160,11131 8802,11640 8802,11324 8143,11324 8143,10938 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8143,10623 L 8143,10623 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 9160,11640 L 9160,11640 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id6">
<path fill="rgb(102,102,102)" stroke="none" d="M 10047,6303 C 9899,6303 9751,6451 9751,6599 L 9751,15659 C 9751,15807 9899,15956 10047,15956 L 18345,15956 C 18493,15956 18642,15807 18642,15659 L 18642,6599 C 18642,6451 18493,6303 18345,6303 L 10047,6303 Z M 9751,6303 L 9751,6303 Z M 18642,15956 L 18642,15956 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10047,6303 C 9899,6303 9751,6451 9751,6599 L 9751,15659 C 9751,15807 9899,15956 10047,15956 L 18345,15956 C 18493,15956 18642,15807 18642,15659 L 18642,6599 C 18642,6451 18493,6303 18345,6303 L 10047,6303 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 9751,6303 L 9751,6303 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18642,15956 L 18642,15956 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="11889" y="7084"/><tspan class="TextPosition" x="11889" y="7084"><tspan fill="rgb(255,255,255)" stroke="none">Stage Execution</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id7">
<path fill="rgb(51,51,51)" stroke="none" d="M 19490,16985 C 19490,17129 19633,17272 19777,17272 L 21489,17272 C 21633,17272 21777,17129 21777,16985 L 21777,5494 C 21777,5351 21633,5207 21489,5207 L 19777,5207 C 19633,5207 19490,5351 19490,5494 L 19490,16985 Z M 19490,17272 L 19490,17272 Z M 21777,5206 L 21777,5206 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 19490,16985 C 19490,17129 19633,17272 19777,17272 L 21489,17272 C 21633,17272 21777,17129 21777,16985 L 21777,5494 C 21777,5351 21633,5207 21489,5207 L 19777,5207 C 19633,5207 19490,5351 19490,5494 L 19490,16985 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 19490,17272 L 19490,17272 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 21777,5206 L 21777,5206 Z"/>
<text class="TextShape" transform="translate(20853,16852) rotate(-90) translate(-20853,-16852)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="20853" y="16852"/><tspan class="TextPosition" x="20853" y="16852"><tspan fill="rgb(255,255,255)" stroke="none">Coalescer (Custom Weighting Function)</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id8">
<path fill="rgb(204,153,204)" stroke="none" d="M 10241,11635 C 10123,11635 10005,11753 10005,11871 L 10005,13940 C 10005,14058 10123,14177 10241,14177 L 18152,14177 C 18270,14177 18388,14058 18388,13940 L 18388,11871 C 18388,11753 18270,11635 18152,11635 L 10241,11635 Z M 10005,11635 L 10005,11635 Z M 18388,14177 L 18388,14177 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10241,11635 C 10123,11635 10005,11753 10005,11871 L 10005,13940 C 10005,14058 10123,14177 10241,14177 L 18152,14177 C 18270,14177 18388,14058 18388,13940 L 18388,11871 C 18388,11753 18270,11635 18152,11635 L 10241,11635 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10005,11635 L 10005,11635 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18388,14177 L 18388,14177 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="12594" y="12415"/><tspan class="TextPosition" x="12594" y="12415"><tspan fill="rgb(0,0,0)" stroke="none">Multi-Stage</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id9">
<path fill="rgb(114,159,207)" stroke="none" d="M 10174,9096 C 10089,9096 10005,9180 10005,9265 L 10005,9944 C 10005,10029 10089,10114 10174,10114 L 18218,10114 C 18303,10114 18388,10029 18388,9944 L 18388,9265 C 18388,9180 18303,9096 18218,9096 L 10174,9096 Z M 10005,9096 L 10005,9096 Z M 18388,10114 L 18388,10114 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10174,9096 C 10089,9096 10005,9180 10005,9265 L 10005,9944 C 10005,10029 10089,10114 10174,10114 L 18218,10114 C 18303,10114 18388,10029 18388,9944 L 18388,9265 C 18388,9180 18303,9096 18218,9096 L 10174,9096 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10005,9096 L 10005,9096 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18388,10114 L 18388,10114 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="10407" y="9825"/><tspan class="TextPosition" x="10407" y="9825"><tspan fill="rgb(0,0,0)" stroke="none">Elastic Search Name Entry</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id10">
<path fill="rgb(153,204,204)" stroke="none" d="M 10174,7826 C 10089,7826 10005,7910 10005,7995 L 10005,8674 C 10005,8759 10089,8844 10174,8844 L 18218,8844 C 18303,8844 18388,8759 18388,8674 L 18388,7995 C 18388,7910 18303,7826 18218,7826 L 10174,7826 Z M 10005,7826 L 10005,7826 Z M 18388,8844 L 18388,8844 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10174,7826 C 10089,7826 10005,7910 10005,7995 L 10005,8674 C 10005,8759 10089,8844 10174,8844 L 18218,8844 C 18303,8844 18388,8759 18388,8674 L 18388,7995 C 18388,7910 18303,7826 18218,7826 L 10174,7826 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10005,7826 L 10005,7826 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18388,8844 L 18388,8844 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="11466" y="8555"/><tspan class="TextPosition" x="11466" y="8555"><tspan fill="rgb(0,0,0)" stroke="none">Name Entry Length</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id11">
<path fill="rgb(114,159,207)" stroke="none" d="M 10174,10366 C 10089,10366 10005,10450 10005,10535 L 10005,11214 C 10005,11299 10089,11384 10174,11384 L 18218,11384 C 18303,11384 18388,11299 18388,11214 L 18388,10535 C 18388,10450 18303,10366 18218,10366 L 10174,10366 Z M 10005,10366 L 10005,10366 Z M 18388,11384 L 18388,11384 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10174,10366 C 10089,10366 10005,10450 10005,10535 L 10005,11214 C 10005,11299 10089,11384 10174,11384 L 18218,11384 C 18303,11384 18388,11299 18388,11214 L 18388,10535 C 18388,10450 18303,10366 18218,10366 L 10174,10366 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10005,10366 L 10005,10366 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18388,11384 L 18388,11384 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="11237" y="11095"/><tspan class="TextPosition" x="11237" y="11095"><tspan fill="rgb(0,0,0)" stroke="none">Elastic Search Name</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id12">
<path fill="rgb(255,204,153)" stroke="none" d="M 10641,13307 C 10573,13307 10505,13375 10505,13443 L 10505,13987 C 10505,14055 10573,14124 10641,14124 L 17735,14124 C 17803,14124 17872,14055 17872,13987 L 17872,13443 C 17872,13375 17803,13307 17735,13307 L 10641,13307 Z M 10505,13307 L 10505,13307 Z M 17872,14124 L 17872,14124 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10641,13307 C 10573,13307 10505,13375 10505,13443 L 10505,13987 C 10505,14055 10573,14124 10641,14124 L 17735,14124 C 17803,14124 17872,14055 17872,13987 L 17872,13443 C 17872,13375 17803,13307 17735,13307 L 10641,13307 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10505,13307 L 10505,13307 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 17872,14124 L 17872,14124 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="11949" y="13900"/><tspan class="TextPosition" x="11949" y="13900"><tspan fill="rgb(0,0,0)" stroke="none">SNAC Degree Sort</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id13">
<path fill="rgb(255,255,255)" stroke="none" d="M 10174,14431 C 10089,14431 10005,14515 10005,14600 L 10005,15278 C 10005,15363 10089,15448 10174,15448 L 18218,15448 C 18303,15448 18388,15363 18388,15278 L 18388,14600 C 18388,14515 18303,14431 18218,14431 L 10174,14431 Z M 10005,14431 L 10005,14431 Z M 18388,15448 L 18388,15448 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10174,14431 C 10089,14431 10005,14515 10005,14600 L 10005,15278 C 10005,15363 10089,15448 10174,15448 L 18218,15448 C 18303,15448 18388,15363 18388,15278 L 18388,14600 C 18388,14515 18303,14431 18218,14431 L 10174,14431 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10005,14431 L 10005,14431 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18388,15448 L 18388,15448 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="12926" y="15160"/><tspan class="TextPosition" x="12926" y="15160"><tspan fill="rgb(0,0,0)" stroke="none">Others…</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id14">
<path fill="rgb(255,255,204)" stroke="none" d="M 1086,10186 C 942,9495 1616,8843 2289,8843 2502,8838 2722,8905 2902,9006 3075,8693 3396,8502 3756,8502 3995,8512 4250,8605 4430,8773 4559,8496 4833,8334 5129,8334 5377,8334 5604,8453 5749,8634 5914,8447 6163,8334 6422,8334 6844,8334 7201,8626 7276,9035 7683,9148 7979,9518 7979,9943 7979,10072 7957,10196 7896,10315 8069,10522 8174,10778 8174,11040 8174,11632 7709,12131 7111,12217 7111,12783 6649,13228 6073,13228 5875,13228 5687,13174 5522,13070 5370,13570 4891,13922 4354,13922 3954,13922 3576,13712 3349,13381 3136,13508 3248,13583 2639,13583 2138,13583 1677,13321 1435,12897 859,12887 563,12550 563,12126 563,11929 639,11751 776,11604 527,11479 391,11234 391,10952 391,10556 693,10230 1086,10186 L 1086,10186 Z M 391,8334 L 391,8334 Z M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1086,10186 C 942,9495 1616,8843 2289,8843 2502,8838 2722,8905 2902,9006 3075,8693 3396,8502 3756,8502 3995,8512 4250,8605 4430,8773 4559,8496 4833,8334 5129,8334 5377,8334 5604,8453 5749,8634 5914,8447 6163,8334 6422,8334 6844,8334 7201,8626 7276,9035 7683,9148 7979,9518 7979,9943 7979,10072 7957,10196 7896,10315 8069,10522 8174,10778 8174,11040 8174,11632 7709,12131 7111,12217 7111,12783 6649,13228 6073,13228 5875,13228 5687,13174 5522,13070 5370,13570 4891,13922 4354,13922 3954,13922 3576,13712 3349,13381 3136,13508 3248,13583 2639,13583 2138,13583 1677,13321 1435,12897 859,12887 563,12550 563,12126 563,11929 639,11751 776,11604 527,11479 391,11234 391,10952 391,10556 693,10230 1086,10186 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1086,10186 C 1093,10250 1126,10323 1144,10382"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 2902,9006 C 2985,9055 3086,9123 3154,9190"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4430,8773 C 4401,8828 4383,8892 4365,8954"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 5749,8634 C 5694,8696 5666,8778 5630,8853"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 7276,9035 C 7283,9081 7320,9185 7305,9208"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 7896,10315 C 7835,10447 7752,10564 7637,10659"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 7114,12217 C 7143,12007 6977,11490 6516,11296"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 5522,13070 C 5550,12985 5561,12907 5568,12825"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 3352,13381 C 3295,13314 3259,13236 3223,13156"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1435,12897 C 1504,12887 1572,12871 1637,12848"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 776,11604 C 895,11671 1032,11730 1230,11707"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 391,8334 L 391,8334 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 8174,13922 L 8174,13922 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="1232" y="9803"/><tspan class="TextPosition" x="1232" y="9803"><tspan fill="rgb(0,0,0)" stroke="none">Query Constellation</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id15">
<path fill="rgb(114,159,207)" stroke="none" d="M 1488,10230 C 1438,10230 1388,10280 1388,10330 L 1388,10730 C 1388,10780 1438,10830 1488,10830 L 4082,10830 C 4132,10830 4182,10780 4182,10730 L 4182,10330 C 4182,10280 4132,10230 4082,10230 L 1488,10230 Z M 1388,10230 L 1388,10230 Z M 4182,10830 L 4182,10830 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1488,10230 C 1438,10230 1388,10280 1388,10330 L 1388,10730 C 1388,10780 1438,10830 1488,10830 L 4082,10830 C 4132,10830 4182,10780 4182,10730 L 4182,10330 C 4182,10280 4132,10230 4082,10230 L 1488,10230 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1388,10230 L 1388,10230 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4182,10830 L 4182,10830 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="1383" y="10714"/><tspan class="TextPosition" x="1383" y="10714"><tspan fill="rgb(0,0,0)" stroke="none">Name Entry</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id16">
<path fill="rgb(114,159,207)" stroke="none" d="M 1488,11028 C 1438,11028 1388,11078 1388,11128 L 1388,11528 C 1388,11578 1438,11628 1488,11628 L 4082,11628 C 4132,11628 4182,11578 4182,11528 L 4182,11128 C 4182,11078 4132,11028 4082,11028 L 1488,11028 Z M 1388,11028 L 1388,11028 Z M 4182,11628 L 4182,11628 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1488,11028 C 1438,11028 1388,11078 1388,11128 L 1388,11528 C 1388,11578 1438,11628 1488,11628 L 4082,11628 C 4132,11628 4182,11578 4182,11528 L 4182,11128 C 4182,11078 4132,11028 4082,11028 L 1488,11028 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1388,11028 L 1388,11028 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4182,11628 L 4182,11628 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="1383" y="11512"/><tspan class="TextPosition" x="1383" y="11512"><tspan fill="rgb(0,0,0)" stroke="none">Name Entry</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id17">
<path fill="rgb(114,159,207)" stroke="none" d="M 1487,11828 C 1437,11828 1388,11877 1388,11927 L 1388,12327 C 1388,12377 1437,12427 1487,12427 L 4082,12427 C 4132,12427 4182,12377 4182,12327 L 4182,11927 C 4182,11877 4132,11828 4082,11828 L 1487,11828 Z M 1388,11828 L 1388,11828 Z M 4182,12427 L 4182,12427 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1487,11828 C 1437,11828 1388,11877 1388,11927 L 1388,12327 C 1388,12377 1437,12427 1487,12427 L 4082,12427 C 4132,12427 4182,12377 4182,12327 L 4182,11927 C 4182,11877 4132,11828 4082,11828 L 1487,11828 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 1388,11828 L 1388,11828 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4182,12427 L 4182,12427 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="1383" y="12312"/><tspan class="TextPosition" x="1383" y="12312"><tspan fill="rgb(0,0,0)" stroke="none">Name Entry</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id18">
<path fill="rgb(204,102,153)" stroke="none" d="M 4482,10230 C 4432,10230 4382,10280 4382,10330 L 4382,10730 C 4382,10780 4432,10830 4482,10830 L 5879,10830 C 5929,10830 5979,10780 5979,10730 L 5979,10330 C 5979,10280 5929,10230 5879,10230 L 4482,10230 Z M 4382,10230 L 4382,10230 Z M 5979,10830 L 5979,10830 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4482,10230 C 4432,10230 4382,10280 4382,10330 L 4382,10730 C 4382,10780 4432,10830 4482,10830 L 5879,10830 C 5929,10830 5979,10780 5979,10730 L 5979,10330 C 5979,10280 5929,10230 5879,10230 L 4482,10230 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4382,10230 L 4382,10230 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 5979,10830 L 5979,10830 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="4485" y="10714"/><tspan class="TextPosition" x="4485" y="10714"><tspan fill="rgb(0,0,0)" stroke="none">Dates</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id19">
<path fill="rgb(204,153,102)" stroke="none" d="M 4481,11028 C 4431,11028 4381,11078 4381,11128 L 4381,11528 C 4381,11578 4431,11628 4481,11628 L 6866,11628 C 6916,11628 6967,11578 6967,11528 L 6967,11128 C 6967,11078 6916,11028 6866,11028 L 4481,11028 Z M 4381,11028 L 4381,11028 Z M 6967,11628 L 6967,11628 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4481,11028 C 4431,11028 4381,11078 4381,11128 L 4381,11528 C 4381,11578 4431,11628 4481,11628 L 6866,11628 C 6916,11628 6967,11578 6967,11528 L 6967,11128 C 6967,11078 6916,11028 6866,11028 L 4481,11028 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4381,11028 L 4381,11028 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 6967,11628 L 6967,11628 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="4327" y="11512"/><tspan class="TextPosition" x="4327" y="11512"><tspan fill="rgb(0,0,0)" stroke="none">Occupation</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id20">
<path fill="rgb(204,153,102)" stroke="none" d="M 4480,11828 C 4430,11828 4381,11877 4381,11927 L 4381,12327 C 4381,12377 4430,12427 4480,12427 L 6867,12427 C 6917,12427 6967,12377 6967,12327 L 6967,11927 C 6967,11877 6917,11828 6867,11828 L 4480,11828 Z M 4381,11828 L 4381,11828 Z M 6967,12427 L 6967,12427 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4480,11828 C 4430,11828 4381,11877 4381,11927 L 4381,12327 C 4381,12377 4430,12427 4480,12427 L 6867,12427 C 6917,12427 6967,12377 6967,12327 L 6967,11927 C 6967,11877 6917,11828 6867,11828 L 4480,11828 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 4381,11828 L 4381,11828 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 6967,12427 L 6967,12427 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="4327" y="12312"/><tspan class="TextPosition" x="4327" y="12312"><tspan fill="rgb(0,0,0)" stroke="none">Occupation</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id21">
<path fill="rgb(114,159,207)" stroke="none" d="M 10631,12599 C 10572,12599 10513,12658 10513,12717 L 10513,13189 C 10513,13248 10572,13308 10631,13308 L 17761,13308 C 17820,13308 17879,13248 17879,13189 L 17879,12717 C 17879,12658 17820,12599 17761,12599 L 10631,12599 Z M 10513,12599 L 10513,12599 Z M 17880,13308 L 17880,13308 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10631,12599 C 10572,12599 10513,12658 10513,12717 L 10513,13189 C 10513,13248 10572,13308 10631,13308 L 17761,13308 C 17820,13308 17879,13248 17879,13189 L 17879,12717 C 17879,12658 17820,12599 17761,12599 L 10631,12599 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 10513,12599 L 10513,12599 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 17880,13308 L 17880,13308 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="11021" y="13138"/><tspan class="TextPosition" x="11021" y="13138"><tspan fill="rgb(0,0,0)" stroke="none">Elastic Search Name Entry</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id22">
<path fill="rgb(153,0,0)" stroke="none" d="M 18641,10936 L 19300,10936 19300,10621 19658,11129 19300,11638 19300,11322 18641,11322 18641,10936 Z M 18641,10621 L 18641,10621 Z M 19658,11638 L 19658,11638 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18641,10936 L 19300,10936 19300,10621 19658,11129 19300,11638 19300,11322 18641,11322 18641,10936 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 18641,10621 L 18641,10621 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 19658,11638 L 19658,11638 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id23">
<path fill="rgb(153,0,0)" stroke="none" d="M 21942,10937 L 22601,10937 22601,10622 22959,11130 22601,11639 22601,11323 21942,11323 21942,10937 Z M 21942,10622 L 21942,10622 Z M 22959,11639 L 22959,11639 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 21942,10937 L 22601,10937 22601,10622 22959,11130 22601,11639 22601,11323 21942,11323 21942,10937 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 21942,10622 L 21942,10622 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 22959,11639 L 22959,11639 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id24">
<path fill="rgb(153,204,204)" stroke="none" d="M 24158,4487 C 24108,4245 24339,4017 24570,4017 24643,4015 24719,4039 24780,4074 24840,3964 24950,3897 25073,3897 25155,3901 25242,3934 25304,3992 25349,3896 25442,3839 25544,3839 25629,3839 25707,3880 25756,3944 25813,3878 25898,3839 25987,3839 26132,3839 26254,3941 26280,4084 26420,4124 26521,4253 26521,4402 26521,4447 26513,4491 26492,4532 26552,4605 26588,4694 26588,4786 26588,4993 26428,5168 26223,5198 26223,5396 26065,5552 25867,5552 25799,5552 25735,5533 25678,5497 25627,5671 25462,5795 25278,5795 25141,5795 25011,5721 24934,5605 24861,5650 24899,5676 24690,5676 24519,5676 24360,5584 24278,5436 24080,5432 23979,5315 23979,5166 23979,5097 24005,5035 24052,4983 23966,4940 23920,4854 23920,4755 23920,4616 24023,4502 24158,4487 L 24158,4487 Z M 23920,3839 L 23920,3839 Z M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24158,4487 C 24108,4245 24339,4017 24570,4017 24643,4015 24719,4039 24780,4074 24840,3964 24950,3897 25073,3897 25155,3901 25242,3934 25304,3992 25349,3896 25442,3839 25544,3839 25629,3839 25707,3880 25756,3944 25813,3878 25898,3839 25987,3839 26132,3839 26254,3941 26280,4084 26420,4124 26521,4253 26521,4402 26521,4447 26513,4491 26492,4532 26552,4605 26588,4694 26588,4786 26588,4993 26428,5168 26223,5198 26223,5396 26065,5552 25867,5552 25799,5552 25735,5533 25678,5497 25627,5671 25462,5795 25278,5795 25141,5795 25011,5721 24934,5605 24861,5650 24899,5676 24690,5676 24519,5676 24360,5584 24278,5436 24080,5432 23979,5315 23979,5166 23979,5097 24005,5035 24052,4983 23966,4940 23920,4854 23920,4755 23920,4616 24023,4502 24158,4487 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24158,4487 C 24160,4510 24171,4535 24178,4556"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24780,4074 C 24809,4091 24843,4115 24867,4138"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25304,3992 C 25294,4011 25288,4034 25282,4056"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25756,3944 C 25738,3965 25728,3994 25715,4021"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26280,4084 C 26282,4100 26295,4136 26290,4145"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26492,4532 C 26471,4578 26443,4619 26403,4653"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26224,5198 C 26234,5124 26177,4943 26019,4875"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25678,5497 C 25688,5467 25692,5440 25694,5411"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24935,5605 C 24915,5582 24903,5555 24890,5526"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24278,5436 C 24301,5432 24325,5427 24347,5419"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24052,4983 C 24092,5007 24139,5027 24207,5019"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23920,3839 L 23920,3839 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26588,5795 L 26588,5795 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="24580" y="4994"/><tspan class="TextPosition" x="24580" y="4994"><tspan fill="rgb(0,0,0)" stroke="none">IC 1</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TextShape">
<g id="id25">
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="24987" y="16656"/><tspan class="TextPosition" x="24987" y="16656"><tspan fill="rgb(0,0,0)" stroke="none">...</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id26">
<path fill="rgb(102,153,204)" stroke="none" d="M 23568,6710 C 23314,6710 23060,6964 23060,7218 L 23060,9250 C 23060,9504 23314,9759 23568,9759 L 26870,9759 C 27124,9759 27379,9504 27379,9250 L 27379,7218 C 27379,6964 27124,6710 26870,6710 L 23568,6710 Z M 23060,6710 L 23060,6710 Z M 27379,9759 L 27379,9759 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23568,6710 C 23314,6710 23060,6964 23060,7218 L 23060,9250 C 23060,9504 23314,9759 23568,9759 L 26870,9759 C 27124,9759 27379,9504 27379,9250 L 27379,7218 C 27379,6964 27124,6710 26870,6710 L 23568,6710 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23060,6710 L 23060,6710 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 27379,9759 L 27379,9759 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="24419" y="9673"/><tspan class="TextPosition" x="24419" y="9673"><tspan fill="rgb(0,0,0)" stroke="none">score: </tspan></tspan><tspan class="TextPosition" x="25791" y="9673"><tspan font-style="italic" fill="rgb(0,0,0)" stroke="none">x</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id27">
<path fill="rgb(153,204,204)" stroke="none" d="M 24159,7688 C 24109,7446 24340,7218 24571,7218 24644,7216 24720,7240 24781,7275 24841,7165 24951,7098 25074,7098 25156,7102 25243,7135 25305,7193 25350,7097 25443,7040 25545,7040 25630,7040 25708,7081 25757,7145 25814,7079 25899,7040 25988,7040 26133,7040 26255,7142 26281,7285 26421,7325 26522,7454 26522,7603 26522,7648 26514,7692 26493,7733 26553,7806 26589,7895 26589,7987 26589,8194 26429,8369 26224,8399 26224,8597 26066,8753 25868,8753 25800,8753 25736,8734 25679,8698 25628,8872 25463,8996 25279,8996 25142,8996 25012,8922 24935,8806 24862,8851 24900,8877 24691,8877 24520,8877 24361,8785 24279,8637 24081,8633 23980,8516 23980,8367 23980,8298 24006,8236 24053,8184 23967,8141 23921,8055 23921,7956 23921,7817 24024,7703 24159,7688 L 24159,7688 Z M 23921,7040 L 23921,7040 Z M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,7688 C 24109,7446 24340,7218 24571,7218 24644,7216 24720,7240 24781,7275 24841,7165 24951,7098 25074,7098 25156,7102 25243,7135 25305,7193 25350,7097 25443,7040 25545,7040 25630,7040 25708,7081 25757,7145 25814,7079 25899,7040 25988,7040 26133,7040 26255,7142 26281,7285 26421,7325 26522,7454 26522,7603 26522,7648 26514,7692 26493,7733 26553,7806 26589,7895 26589,7987 26589,8194 26429,8369 26224,8399 26224,8597 26066,8753 25868,8753 25800,8753 25736,8734 25679,8698 25628,8872 25463,8996 25279,8996 25142,8996 25012,8922 24935,8806 24862,8851 24900,8877 24691,8877 24520,8877 24361,8785 24279,8637 24081,8633 23980,8516 23980,8367 23980,8298 24006,8236 24053,8184 23967,8141 23921,8055 23921,7956 23921,7817 24024,7703 24159,7688 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,7688 C 24161,7711 24172,7736 24179,7757"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24781,7275 C 24810,7292 24844,7316 24868,7339"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25305,7193 C 25295,7212 25289,7235 25283,7257"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25757,7145 C 25739,7166 25729,7195 25716,7222"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26281,7285 C 26283,7301 26296,7337 26291,7346"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26493,7733 C 26472,7779 26444,7820 26404,7854"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26225,8399 C 26235,8325 26178,8144 26020,8076"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25679,8698 C 25689,8668 25693,8641 25695,8612"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24936,8806 C 24916,8783 24904,8756 24891,8727"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24279,8637 C 24302,8633 24326,8628 24348,8620"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24053,8184 C 24093,8208 24140,8228 24208,8220"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,7040 L 23921,7040 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,8996 L 26589,8996 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="24581" y="8195"/><tspan class="TextPosition" x="24581" y="8195"><tspan fill="rgb(0,0,0)" stroke="none">IC 2</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id28">
<path fill="rgb(102,153,204)" stroke="none" d="M 23568,9910 C 23314,9910 23060,10164 23060,10418 L 23060,12450 C 23060,12704 23314,12959 23568,12959 L 26870,12959 C 27124,12959 27379,12704 27379,12450 L 27379,10418 C 27379,10164 27124,9910 26870,9910 L 23568,9910 Z M 23060,9910 L 23060,9910 Z M 27379,12959 L 27379,12959 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23568,9910 C 23314,9910 23060,10164 23060,10418 L 23060,12450 C 23060,12704 23314,12959 23568,12959 L 26870,12959 C 27124,12959 27379,12704 27379,12450 L 27379,10418 C 27379,10164 27124,9910 26870,9910 L 23568,9910 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23060,9910 L 23060,9910 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 27379,12959 L 27379,12959 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="24419" y="12873"/><tspan class="TextPosition" x="24419" y="12873"><tspan fill="rgb(0,0,0)" stroke="none">score: </tspan></tspan><tspan class="TextPosition" x="25791" y="12873"><tspan font-style="italic" fill="rgb(0,0,0)" stroke="none">x</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id29">
<path fill="rgb(153,204,204)" stroke="none" d="M 24159,10888 C 24109,10646 24340,10418 24571,10418 24644,10416 24720,10440 24781,10475 24841,10365 24951,10298 25074,10298 25156,10302 25243,10335 25305,10393 25350,10297 25443,10240 25545,10240 25630,10240 25708,10281 25757,10345 25814,10279 25899,10240 25988,10240 26133,10240 26255,10342 26281,10485 26421,10525 26522,10654 26522,10803 26522,10848 26514,10892 26493,10933 26553,11006 26589,11095 26589,11187 26589,11394 26429,11569 26224,11599 26224,11797 26066,11953 25868,11953 25800,11953 25736,11934 25679,11898 25628,12072 25463,12196 25279,12196 25142,12196 25012,12122 24935,12006 24862,12051 24900,12077 24691,12077 24520,12077 24361,11985 24279,11837 24081,11833 23980,11716 23980,11567 23980,11498 24006,11436 24053,11384 23967,11341 23921,11255 23921,11156 23921,11017 24024,10903 24159,10888 L 24159,10888 Z M 23921,10240 L 23921,10240 Z M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,10888 C 24109,10646 24340,10418 24571,10418 24644,10416 24720,10440 24781,10475 24841,10365 24951,10298 25074,10298 25156,10302 25243,10335 25305,10393 25350,10297 25443,10240 25545,10240 25630,10240 25708,10281 25757,10345 25814,10279 25899,10240 25988,10240 26133,10240 26255,10342 26281,10485 26421,10525 26522,10654 26522,10803 26522,10848 26514,10892 26493,10933 26553,11006 26589,11095 26589,11187 26589,11394 26429,11569 26224,11599 26224,11797 26066,11953 25868,11953 25800,11953 25736,11934 25679,11898 25628,12072 25463,12196 25279,12196 25142,12196 25012,12122 24935,12006 24862,12051 24900,12077 24691,12077 24520,12077 24361,11985 24279,11837 24081,11833 23980,11716 23980,11567 23980,11498 24006,11436 24053,11384 23967,11341 23921,11255 23921,11156 23921,11017 24024,10903 24159,10888 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,10888 C 24161,10911 24172,10936 24179,10957"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24781,10475 C 24810,10492 24844,10516 24868,10539"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25305,10393 C 25295,10412 25289,10435 25283,10457"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25757,10345 C 25739,10366 25729,10395 25716,10422"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26281,10485 C 26283,10501 26296,10537 26291,10546"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26493,10933 C 26472,10979 26444,11020 26404,11054"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26225,11599 C 26235,11525 26178,11344 26020,11276"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25679,11898 C 25689,11868 25693,11841 25695,11812"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24936,12006 C 24916,11983 24904,11956 24891,11927"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24279,11837 C 24302,11833 24326,11828 24348,11820"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24053,11384 C 24093,11408 24140,11428 24208,11420"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,10240 L 23921,10240 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,12196 L 26589,12196 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="24581" y="11395"/><tspan class="TextPosition" x="24581" y="11395"><tspan fill="rgb(0,0,0)" stroke="none">IC 3</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id30">
<path fill="rgb(102,153,204)" stroke="none" d="M 23568,13110 C 23314,13110 23060,13364 23060,13618 L 23060,15650 C 23060,15904 23314,16159 23568,16159 L 26870,16159 C 27124,16159 27379,15904 27379,15650 L 27379,13618 C 27379,13364 27124,13110 26870,13110 L 23568,13110 Z M 23060,13110 L 23060,13110 Z M 27379,16159 L 27379,16159 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23568,13110 C 23314,13110 23060,13364 23060,13618 L 23060,15650 C 23060,15904 23314,16159 23568,16159 L 26870,16159 C 27124,16159 27379,15904 27379,15650 L 27379,13618 C 27379,13364 27124,13110 26870,13110 L 23568,13110 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23060,13110 L 23060,13110 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 27379,16159 L 27379,16159 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="24419" y="16073"/><tspan class="TextPosition" x="24419" y="16073"><tspan fill="rgb(0,0,0)" stroke="none">score: </tspan></tspan><tspan class="TextPosition" x="25791" y="16073"><tspan font-style="italic" fill="rgb(0,0,0)" stroke="none">x</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id31">
<path fill="rgb(153,204,204)" stroke="none" d="M 24159,14088 C 24109,13846 24340,13618 24571,13618 24644,13616 24720,13640 24781,13675 24841,13565 24951,13498 25074,13498 25156,13502 25243,13535 25305,13593 25350,13497 25443,13440 25545,13440 25630,13440 25708,13481 25757,13545 25814,13479 25899,13440 25988,13440 26133,13440 26255,13542 26281,13685 26421,13725 26522,13854 26522,14003 26522,14048 26514,14092 26493,14133 26553,14206 26589,14295 26589,14387 26589,14594 26429,14769 26224,14799 26224,14997 26066,15153 25868,15153 25800,15153 25736,15134 25679,15098 25628,15272 25463,15396 25279,15396 25142,15396 25012,15322 24935,15206 24862,15251 24900,15277 24691,15277 24520,15277 24361,15185 24279,15037 24081,15033 23980,14916 23980,14767 23980,14698 24006,14636 24053,14584 23967,14541 23921,14455 23921,14356 23921,14217 24024,14103 24159,14088 L 24159,14088 Z M 23921,13440 L 23921,13440 Z M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,14088 C 24109,13846 24340,13618 24571,13618 24644,13616 24720,13640 24781,13675 24841,13565 24951,13498 25074,13498 25156,13502 25243,13535 25305,13593 25350,13497 25443,13440 25545,13440 25630,13440 25708,13481 25757,13545 25814,13479 25899,13440 25988,13440 26133,13440 26255,13542 26281,13685 26421,13725 26522,13854 26522,14003 26522,14048 26514,14092 26493,14133 26553,14206 26589,14295 26589,14387 26589,14594 26429,14769 26224,14799 26224,14997 26066,15153 25868,15153 25800,15153 25736,15134 25679,15098 25628,15272 25463,15396 25279,15396 25142,15396 25012,15322 24935,15206 24862,15251 24900,15277 24691,15277 24520,15277 24361,15185 24279,15037 24081,15033 23980,14916 23980,14767 23980,14698 24006,14636 24053,14584 23967,14541 23921,14455 23921,14356 23921,14217 24024,14103 24159,14088 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,14088 C 24161,14111 24172,14136 24179,14157"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24781,13675 C 24810,13692 24844,13716 24868,13739"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25305,13593 C 25295,13612 25289,13635 25283,13657"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25757,13545 C 25739,13566 25729,13595 25716,13622"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26281,13685 C 26283,13701 26296,13737 26291,13746"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26493,14133 C 26472,14179 26444,14220 26404,14254"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26225,14799 C 26235,14725 26178,14544 26020,14476"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25679,15098 C 25689,15068 25693,15041 25695,15012"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24936,15206 C 24916,15183 24904,15156 24891,15127"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24279,15037 C 24302,15033 24326,15028 24348,15020"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24053,14584 C 24093,14608 24140,14628 24208,14620"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,13440 L 23921,13440 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,15396 L 26589,15396 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="24581" y="14595"/><tspan class="TextPosition" x="24581" y="14595"><tspan fill="rgb(0,0,0)" stroke="none">IC 4</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id32">
<path fill="rgb(102,153,204)" stroke="none" d="M 23568,17010 C 23314,17010 23060,17264 23060,17518 L 23060,19550 C 23060,19804 23314,20059 23568,20059 L 26870,20059 C 27124,20059 27379,19804 27379,19550 L 27379,17518 C 27379,17264 27124,17010 26870,17010 L 23568,17010 Z M 23060,17010 L 23060,17010 Z M 27379,20059 L 27379,20059 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23568,17010 C 23314,17010 23060,17264 23060,17518 L 23060,19550 C 23060,19804 23314,20059 23568,20059 L 26870,20059 C 27124,20059 27379,19804 27379,19550 L 27379,17518 C 27379,17264 27124,17010 26870,17010 L 23568,17010 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23060,17010 L 23060,17010 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 27379,20059 L 27379,20059 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="459px" font-weight="400"><tspan class="TextPosition" x="24419" y="19973"/><tspan class="TextPosition" x="24419" y="19973"><tspan fill="rgb(0,0,0)" stroke="none">score: </tspan></tspan><tspan class="TextPosition" x="25791" y="19973"><tspan font-style="italic" fill="rgb(0,0,0)" stroke="none">x</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id33">
<path fill="rgb(153,204,204)" stroke="none" d="M 24159,17988 C 24109,17746 24340,17518 24571,17518 24644,17516 24720,17540 24781,17575 24841,17465 24951,17398 25074,17398 25156,17402 25243,17435 25305,17493 25350,17397 25443,17340 25545,17340 25630,17340 25708,17381 25757,17445 25814,17379 25899,17340 25988,17340 26133,17340 26255,17442 26281,17585 26421,17625 26522,17754 26522,17903 26522,17948 26514,17992 26493,18033 26553,18106 26589,18195 26589,18287 26589,18494 26429,18669 26224,18699 26224,18897 26066,19053 25868,19053 25800,19053 25736,19034 25679,18998 25628,19172 25463,19296 25279,19296 25142,19296 25012,19222 24935,19106 24862,19151 24900,19177 24691,19177 24520,19177 24361,19085 24279,18937 24081,18933 23980,18816 23980,18667 23980,18598 24006,18536 24053,18484 23967,18441 23921,18355 23921,18256 23921,18117 24024,18003 24159,17988 L 24159,17988 Z M 23921,17340 L 23921,17340 Z M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,17988 C 24109,17746 24340,17518 24571,17518 24644,17516 24720,17540 24781,17575 24841,17465 24951,17398 25074,17398 25156,17402 25243,17435 25305,17493 25350,17397 25443,17340 25545,17340 25630,17340 25708,17381 25757,17445 25814,17379 25899,17340 25988,17340 26133,17340 26255,17442 26281,17585 26421,17625 26522,17754 26522,17903 26522,17948 26514,17992 26493,18033 26553,18106 26589,18195 26589,18287 26589,18494 26429,18669 26224,18699 26224,18897 26066,19053 25868,19053 25800,19053 25736,19034 25679,18998 25628,19172 25463,19296 25279,19296 25142,19296 25012,19222 24935,19106 24862,19151 24900,19177 24691,19177 24520,19177 24361,19085 24279,18937 24081,18933 23980,18816 23980,18667 23980,18598 24006,18536 24053,18484 23967,18441 23921,18355 23921,18256 23921,18117 24024,18003 24159,17988 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24159,17988 C 24161,18011 24172,18036 24179,18057"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24781,17575 C 24810,17592 24844,17616 24868,17639"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25305,17493 C 25295,17512 25289,17535 25283,17557"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25757,17445 C 25739,17466 25729,17495 25716,17522"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26281,17585 C 26283,17601 26296,17637 26291,17646"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26493,18033 C 26472,18079 26444,18120 26404,18154"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26225,18699 C 26235,18625 26178,18444 26020,18376"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 25679,18998 C 25689,18968 25693,18941 25695,18912"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24936,19106 C 24916,19083 24904,19056 24891,19027"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24279,18937 C 24302,18933 24326,18928 24348,18920"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 24053,18484 C 24093,18508 24140,18528 24208,18520"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 23921,17340 L 23921,17340 Z"/>
<path fill="none" stroke="rgb(52,101,164)" d="M 26589,19296 L 26589,19296 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="24527" y="18495"/><tspan class="TextPosition" x="24527" y="18495"><tspan fill="rgb(0,0,0)" stroke="none">IC </tspan></tspan><tspan class="TextPosition" x="25340" y="18495"><tspan font-style="italic" fill="rgb(0,0,0)" stroke="none">N</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TextShape">
<g id="id34">
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="23751" y="2341"/><tspan class="TextPosition" x="23751" y="2341"><tspan fill="rgb(0,0,0)" stroke="none">Candidate</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="23205" y="3052"/><tspan class="TextPosition" x="23205" y="3052"><tspan fill="rgb(0,0,0)" stroke="none">Constellations</tspan></tspan></tspan></text>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
### Database schema and SQL queries
### How versioning works.
```
create type icstatus as enum ('published', 'needs review', 'rejected', 'being edited', 'bulk ingest');
create table version_history (
id int default nextval('version_history_id_seq'),
main_id int default nextval('id_seq'), -- main constellation id, when inserting a new identity, allow this to default
is_locked boolean default false, -- boolean, true is locked by version_history.user_id
user_id int, -- fk to appuser.id
role_id int, -- fk to role.id, defaults to users primary role, but can be any role the user has
timestamp timestamp default now(), -- now()
status icstatus, -- enum icstatus note: an enum is a data type like int or text
is_current boolean, -- most current published, optional field to enhance performance
note text, -- checkin message
primary key (id, main_id)
);
```
The version_history table is the central table to a CPF constellation (aka record). The
version_history.main_id is the constellation id. By convention, all SNAC tables have a field id, which is the
record id. Field version_history.id is known by the alias "version" in all locations outside table
version_history. All first-order data tables have fields id,version, and main_id. It may help to understand
some of the following specification by knowing that the unique record key for nearly all tables is
(id,version). For all tables except nrd, the constellation id is main_id. Table nrd is 1:1 data fields, and is
special, therefore nrd.id is both record id and constellation id.
There are some basic traits of versioning
1) No record is ever deleted. Old versions of every record are left in the database.
2) The current published version is noted in table version_history, so we can select the published version of
every record from every table.
3) An update to part of a constellation might update a single table. That update will have a new version
number. This saves data copying and redundancy.
4) Due to (3), actual SQL to select a given record is based on selecting that record's version <= the current
version in table version_history.
The following SQL illustrates the some relationships between version_history and a typical table such as
"name" for a simplified scenario of a single version for a given fictional constellation id 1234.
First we want the maximum which is most recent version number for constellation id 7.
```
select max(id) as version, main_id
from
version_history
where
main_id=7
group by id,main_id;
```
That query returns a single record and tells us the "current version" for constellation 7. Imagine there have
been many changes to this constellation, each change only effecting some parts. Every time the database was
updated, the version number incremented. We can go back to any version, but when editing we always use the
most recent version of each record in each table. That is: <= max(version).
In the case of published, we use a similar query, but constrain by is_current or by status='published'. The
exact implementation has not been settled, and there are plusses and minuses. Nonetheless, this query
illustrates the concept for selecting the most recent version number of the most recently published
constellation id 7:
```
select max(id) as version, main_id
from
version_history
where
main_id=7 and
is_current and
group by id,main_id;
```
Note that max(id) is aliased as 'version'. To all the world outside the version_history.id is a version
number. In order to get the max() of one column relative to another, we must "group by", and since we need
both id and main_id, we group by both columns.
Remember that we're calling SQL from php, and php caches values from queries. This means that we can call
smaller SQL queries, capture returned values, then pass those values to other relatively small queries. The
non-php option would be larger stored procedures. It turns out that php+sql results in better performance, and
the more granular queries are individually easier to read. In some of the following queries you will see php
placeholders $1, $2, $3, etc. These are subsituted safely from php to avoid SQL injection issues.
Selecting records from data tables requires a subselect. It looks a bit daunting, but is very fast, and is
simple enough that we can treat it as a convention or idiom.
```
select
aa.is_deleted,aa.id,aa.version, aa.main_id, aa.original, aa.preference_score
from name as aa,
(select id,max(version) as version from name where version<=$1 and main_id=$2 group by id) as bb
where
aa.id = bb.id and
aa.version = bb.version and
not aa.is_deleted
order by preference_score,id
```
We join our table (name) to a subquery on the same table. Note that we alias the original table as aa, and the
subquery as bb. Conceptually we're doing this:
```
select aa.* from aa,bb where ...
```
This is a relational join that works just like any join between any two tables. It just so happens that table
bb is a subquery.
The subquery is aliased as bb:
```
(select id,max(version) as version from name where version<=$1 and main_id=$2 group by id) as bb
```
The sole purpose of the subquery is to get an record id and matching max() version. Joining these back to the
original table constrains returns records to only each most recent individual name, <= the supplied
version. For normal edits, we look up the current version via the first query above.
The where clause of the larger select should now start to look simpler, now that we understand the subquery as
simply another related table. With in-line comments the where clause is:
```
where
aa.id = bb.id and -- join and constrain id
aa.version = bb.version and -- join and constrain version
not aa.is_deleted -- only select non-deleted records
order by preference_score,id -- order the results
```
While there's some subtle behavior here, the where clause is a typical two table join.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment