From f7e3c57d7ee3f6de56edd1c0dd8130d18a28c4a6 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sun, 15 Mar 2026 12:06:03 +0100 Subject: [PATCH] added algorithm description --- docs/ayto-sat.pdf | 2114 +++++++++++++++++++++++++++++++++++++++++++++ docs/ayto-sat.typ | 72 ++ 2 files changed, 2186 insertions(+) create mode 100644 docs/ayto-sat.pdf create mode 100644 docs/ayto-sat.typ diff --git a/docs/ayto-sat.pdf b/docs/ayto-sat.pdf new file mode 100644 index 0000000..a71ae2b --- /dev/null +++ b/docs/ayto-sat.pdf @@ -0,0 +1,2114 @@ +%PDF-1.7 +% + +1 0 obj +<< + /Type /Pages + /Count 2 + /Kids [146 0 R 148 0 R] +>> +endobj + +2 0 obj +<< + /Type /Outlines + /First 3 0 R + /Last 8 0 R + /Count 4 +>> +endobj + +3 0 obj +<< + /Parent 2 0 R + /Next 4 0 R + /Title (1. Variables and Sets) + /Dest 140 0 R +>> +endobj + +4 0 obj +<< + /Parent 2 0 R + /Next 7 0 R + /Prev 3 0 R + /First 5 0 R + /Last 6 0 R + /Count -2 + /Title (2. Constraints) + /Dest 143 0 R +>> +endobj + +5 0 obj +<< + /Parent 4 0 R + /Next 6 0 R + /Title (2.1. Allowed Mappings (Truth Booths)) + /Dest 141 0 R +>> +endobj + +6 0 obj +<< + /Parent 4 0 R + /Prev 5 0 R + /Title (2.2. Ceremony Constraints) + /Dest 142 0 R +>> +endobj + +7 0 obj +<< + /Parent 2 0 R + /Next 8 0 R + /Prev 4 0 R + /Title (3. Search Space and Pruning) + /Dest 144 0 R +>> +endobj + +8 0 obj +<< + /Parent 2 0 R + /Prev 7 0 R + /Title (4. Objective) + /Dest 145 0 R +>> +endobj + +9 0 obj +<< + /Type /StructTreeRoot + /RoleMap << + /Datetime /Span + /Terms /Part + /Title /P + /Strong /Span + /Em /Span + >> + /K [12 0 R] + /ParentTree << + /Nums [0 10 0 R 1 11 0 R] + >> + /ParentTreeNextKey 2 +>> +endobj + +10 0 obj +[119 0 R 118 0 R 116 0 R 116 0 R 116 0 R 116 0 R 117 0 R 116 0 R 115 0 R 115 0 R 109 0 R 114 0 R 114 0 R 109 0 R 113 0 R 109 0 R 112 0 R 112 0 R 109 0 R 111 0 R 109 0 R 110 0 R 110 0 R 110 0 R 109 0 R 104 0 R 104 0 R 108 0 R 104 0 R 107 0 R 107 0 R 107 0 R 107 0 R 107 0 R 107 0 R 107 0 R 104 0 R 106 0 R 106 0 R 104 0 R 104 0 R 105 0 R 105 0 R 104 0 R 103 0 R 103 0 R 101 0 R 102 0 R 101 0 R 100 0 R 100 0 R 95 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 95 0 R 98 0 R 98 0 R 98 0 R 98 0 R 95 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 95 0 R 96 0 R 95 0 R 95 0 R 94 0 R 93 0 R 90 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 90 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 90 0 R 88 0 R 87 0 R 84 0 R 86 0 R 86 0 R 86 0 R 86 0 R 86 0 R 84 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 84 0 R 75 0 R 81 0 R 81 0 R 81 0 R 81 0 R 75 0 R 80 0 R 75 0 R 75 0 R 79 0 R 75 0 R 78 0 R 75 0 R 77 0 R 77 0 R 77 0 R 77 0 R 77 0 R 77 0 R 77 0 R 75 0 R 76 0 R 75 0 R 74 0 R 74 0 R 69 0 R 73 0 R 69 0 R 72 0 R 72 0 R 72 0 R 69 0 R 69 0 R 71 0 R 71 0 R 71 0 R 71 0 R 71 0 R 71 0 R 71 0 R 71 0 R 69 0 R 70 0 R 70 0 R 70 0 R 70 0 R 69 0 R 69 0 R 66 0 R 68 0 R 68 0 R 68 0 R 66 0 R 67 0 R 66 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 65 0 R 60 0 R 63 0 R 60 0 R 62 0 R 60 0 R 60 0 R 61 0 R 60 0 R] +endobj + +11 0 obj +[59 0 R 59 0 R 54 0 R 54 0 R 58 0 R 54 0 R 57 0 R 57 0 R 54 0 R 54 0 R 56 0 R 54 0 R 55 0 R 55 0 R 54 0 R 53 0 R 49 0 R 52 0 R 49 0 R 51 0 R 51 0 R 51 0 R 51 0 R 51 0 R 49 0 R 50 0 R 50 0 R 49 0 R 49 0 R 48 0 R 45 0 R 47 0 R 47 0 R 45 0 R 46 0 R 46 0 R 46 0 R 46 0 R 46 0 R 46 0 R 45 0 R 43 0 R 40 0 R 42 0 R 42 0 R 40 0 R 41 0 R 41 0 R 41 0 R 40 0 R 36 0 R 37 0 R 36 0 R 36 0 R 36 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 35 0 R 33 0 R 33 0 R 30 0 R 32 0 R 30 0 R 31 0 R 30 0 R 30 0 R 29 0 R 28 0 R 27 0 R 25 0 R 26 0 R 26 0 R 26 0 R 23 0 R 22 0 R 20 0 R 21 0 R 21 0 R 21 0 R 21 0 R 21 0 R 21 0 R 21 0 R 21 0 R 21 0 R 21 0 R 20 0 R 20 0 R 15 0 R 17 0 R 17 0 R 17 0 R 17 0 R 17 0 R 15 0 R 16 0 R 16 0 R 16 0 R 16 0 R 16 0 R 15 0 R 15 0 R 15 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R 14 0 R] +endobj + +12 0 obj +<< + /Type /StructElem + /S /Document + /P 9 0 R + /K [119 0 R 118 0 R 116 0 R 115 0 R 109 0 R 104 0 R 103 0 R 101 0 R 100 0 R 95 0 R 82 0 R 75 0 R 74 0 R 69 0 R 66 0 R 64 0 R 60 0 R 59 0 R 54 0 R 49 0 R 38 0 R 36 0 R 34 0 R 33 0 R 30 0 R 29 0 R 18 0 R 15 0 R 13 0 R] +>> +endobj + +13 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [14 0 R] +>> +endobj + +14 0 obj +<< + /Type /StructElem + /S /Formula + /P 13 0 R + /K [112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135] + /Pg 148 0 R +>> +endobj + +15 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [97 17 0 R 103 16 0 R 109 110 111] + /Pg 148 0 R +>> +endobj + +16 0 obj +<< + /Type /StructElem + /S /Formula + /P 15 0 R + /K [104 105 106 107 108] + /Pg 148 0 R +>> +endobj + +17 0 obj +<< + /Type /StructElem + /S /Formula + /P 15 0 R + /K [98 99 100 101 102] + /Pg 148 0 R +>> +endobj + +18 0 obj +<< + /Type /StructElem + /S /L + /P 12 0 R + /A [<< + /O /List + /ListNumbering /Decimal + >>] + /K [24 0 R 19 0 R] +>> +endobj + +19 0 obj +<< + /Type /StructElem + /S /LI + /P 18 0 R + /K [23 0 R 20 0 R] +>> +endobj + +20 0 obj +<< + /Type /StructElem + /S /LBody + /P 19 0 R + /K [22 0 R 84 21 0 R 95 96] + /Pg 148 0 R +>> +endobj + +21 0 obj +<< + /Type /StructElem + /S /Formula + /P 20 0 R + /K [85 86 87 88 89 90 91 92 93 94] + /Pg 148 0 R +>> +endobj + +22 0 obj +<< + /Type /StructElem + /S /Strong + /P 20 0 R + /K [83] + /Pg 148 0 R +>> +endobj + +23 0 obj +<< + /Type /StructElem + /S /Lbl + /P 19 0 R + /K [82] + /Pg 148 0 R +>> +endobj + +24 0 obj +<< + /Type /StructElem + /S /LI + /P 18 0 R + /K [28 0 R 25 0 R] +>> +endobj + +25 0 obj +<< + /Type /StructElem + /S /LBody + /P 24 0 R + /K [27 0 R 78 26 0 R] + /Pg 148 0 R +>> +endobj + +26 0 obj +<< + /Type /StructElem + /S /Formula + /P 25 0 R + /K [79 80 81] + /Pg 148 0 R +>> +endobj + +27 0 obj +<< + /Type /StructElem + /S /Strong + /P 25 0 R + /K [77] + /Pg 148 0 R +>> +endobj + +28 0 obj +<< + /Type /StructElem + /S /Lbl + /P 24 0 R + /K [76] + /Pg 148 0 R +>> +endobj + +29 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [75] + /Pg 148 0 R +>> +endobj + +30 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [69 32 0 R 71 31 0 R 73 74] + /Pg 148 0 R +>> +endobj + +31 0 obj +<< + /Type /StructElem + /S /Formula + /P 30 0 R + /K [72] + /Pg 148 0 R +>> +endobj + +32 0 obj +<< + /Type /StructElem + /S /Formula + /P 30 0 R + /K [70] + /Pg 148 0 R +>> +endobj + +33 0 obj +<< + /Type /StructElem + /S /H1 + /P 12 0 R + /T (Objective) + /K [67 68] + /Pg 148 0 R +>> +endobj + +34 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [35 0 R] +>> +endobj + +35 0 obj +<< + /Type /StructElem + /S /Formula + /P 34 0 R + /K [55 56 57 58 59 60 61 62 63 64 65 66] + /Pg 148 0 R +>> +endobj + +36 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [50 37 0 R 52 53 54] + /Pg 148 0 R +>> +endobj + +37 0 obj +<< + /Type /StructElem + /S /Formula + /P 36 0 R + /K [51] + /Pg 148 0 R +>> +endobj + +38 0 obj +<< + /Type /StructElem + /S /L + /P 12 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [44 0 R 39 0 R] +>> +endobj + +39 0 obj +<< + /Type /StructElem + /S /LI + /P 38 0 R + /K [43 0 R 40 0 R] +>> +endobj + +40 0 obj +<< + /Type /StructElem + /S /LBody + /P 39 0 R + /K [42 42 0 R 45 41 0 R 49] + /Pg 148 0 R +>> +endobj + +41 0 obj +<< + /Type /StructElem + /S /Formula + /P 40 0 R + /K [46 47 48] + /Pg 148 0 R +>> +endobj + +42 0 obj +<< + /Type /StructElem + /S /Formula + /P 40 0 R + /K [43 44] + /Pg 148 0 R +>> +endobj + +43 0 obj +<< + /Type /StructElem + /S /Lbl + /P 39 0 R + /K [41] + /Pg 148 0 R +>> +endobj + +44 0 obj +<< + /Type /StructElem + /S /LI + /P 38 0 R + /K [48 0 R 45 0 R] +>> +endobj + +45 0 obj +<< + /Type /StructElem + /S /LBody + /P 44 0 R + /K [30 47 0 R 33 46 0 R 40] + /Pg 148 0 R +>> +endobj + +46 0 obj +<< + /Type /StructElem + /S /Formula + /P 45 0 R + /K [34 35 36 37 38 39] + /Pg 148 0 R +>> +endobj + +47 0 obj +<< + /Type /StructElem + /S /Formula + /P 45 0 R + /K [31 32] + /Pg 148 0 R +>> +endobj + +48 0 obj +<< + /Type /StructElem + /S /Lbl + /P 44 0 R + /K [29] + /Pg 148 0 R +>> +endobj + +49 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [53 0 R 16 52 0 R 18 51 0 R 24 50 0 R 27 28] + /Pg 148 0 R +>> +endobj + +50 0 obj +<< + /Type /StructElem + /S /Formula + /P 49 0 R + /K [25 26] + /Pg 148 0 R +>> +endobj + +51 0 obj +<< + /Type /StructElem + /S /Formula + /P 49 0 R + /K [19 20 21 22 23] + /Pg 148 0 R +>> +endobj + +52 0 obj +<< + /Type /StructElem + /S /Formula + /P 49 0 R + /K [17] + /Pg 148 0 R +>> +endobj + +53 0 obj +<< + /Type /StructElem + /S /Strong + /P 49 0 R + /K [15] + /Pg 148 0 R +>> +endobj + +54 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [2 3 58 0 R 5 57 0 R 8 9 56 0 R 11 55 0 R 14] + /Pg 148 0 R +>> +endobj + +55 0 obj +<< + /Type /StructElem + /S /Formula + /P 54 0 R + /K [12 13] + /Pg 148 0 R +>> +endobj + +56 0 obj +<< + /Type /StructElem + /S /Formula + /P 54 0 R + /K [10] + /Pg 148 0 R +>> +endobj + +57 0 obj +<< + /Type /StructElem + /S /Formula + /P 54 0 R + /K [6 7] + /Pg 148 0 R +>> +endobj + +58 0 obj +<< + /Type /StructElem + /S /Formula + /P 54 0 R + /K [4] + /Pg 148 0 R +>> +endobj + +59 0 obj +<< + /Type /StructElem + /S /H1 + /P 12 0 R + /T (Search Space and Pruning) + /K [0 1] + /Pg 148 0 R +>> +endobj + +60 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [193 63 0 R 195 62 0 R 197 198 61 0 R 200] + /Pg 146 0 R +>> +endobj + +61 0 obj +<< + /Type /StructElem + /S /Formula + /P 60 0 R + /K [199] + /Pg 146 0 R +>> +endobj + +62 0 obj +<< + /Type /StructElem + /S /Formula + /P 60 0 R + /K [196] + /Pg 146 0 R +>> +endobj + +63 0 obj +<< + /Type /StructElem + /S /Formula + /P 60 0 R + /K [194] + /Pg 146 0 R +>> +endobj + +64 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [65 0 R] +>> +endobj + +65 0 obj +<< + /Type /StructElem + /S /Formula + /P 64 0 R + /K [172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192] + /Pg 146 0 R +>> +endobj + +66 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [165 68 0 R 169 67 0 R 171] + /Pg 146 0 R +>> +endobj + +67 0 obj +<< + /Type /StructElem + /S /Formula + /P 66 0 R + /K [170] + /Pg 146 0 R +>> +endobj + +68 0 obj +<< + /Type /StructElem + /S /Formula + /P 66 0 R + /K [166 167 168] + /Pg 146 0 R +>> +endobj + +69 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [142 73 0 R 144 72 0 R 148 149 71 0 R 158 70 0 R 163 164] + /Pg 146 0 R +>> +endobj + +70 0 obj +<< + /Type /StructElem + /S /Formula + /P 69 0 R + /K [159 160 161 162] + /Pg 146 0 R +>> +endobj + +71 0 obj +<< + /Type /StructElem + /S /Formula + /P 69 0 R + /K [150 151 152 153 154 155 156 157] + /Pg 146 0 R +>> +endobj + +72 0 obj +<< + /Type /StructElem + /S /Formula + /P 69 0 R + /K [145 146 147] + /Pg 146 0 R +>> +endobj + +73 0 obj +<< + /Type /StructElem + /S /Formula + /P 69 0 R + /K [143] + /Pg 146 0 R +>> +endobj + +74 0 obj +<< + /Type /StructElem + /S /H2 + /P 12 0 R + /T (Ceremony Constraints) + /K [140 141] + /Pg 146 0 R +>> +endobj + +75 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [117 81 0 R 122 80 0 R 124 125 79 0 R 127 78 0 R 129 77 0 R 137 76 0 R 139] + /Pg 146 0 R +>> +endobj + +76 0 obj +<< + /Type /StructElem + /S /Formula + /P 75 0 R + /K [138] + /Pg 146 0 R +>> +endobj + +77 0 obj +<< + /Type /StructElem + /S /Formula + /P 75 0 R + /K [130 131 132 133 134 135 136] + /Pg 146 0 R +>> +endobj + +78 0 obj +<< + /Type /StructElem + /S /Formula + /P 75 0 R + /K [128] + /Pg 146 0 R +>> +endobj + +79 0 obj +<< + /Type /StructElem + /S /Formula + /P 75 0 R + /K [126] + /Pg 146 0 R +>> +endobj + +80 0 obj +<< + /Type /StructElem + /S /Formula + /P 75 0 R + /K [123] + /Pg 146 0 R +>> +endobj + +81 0 obj +<< + /Type /StructElem + /S /Formula + /P 75 0 R + /K [118 119 120 121] + /Pg 146 0 R +>> +endobj + +82 0 obj +<< + /Type /StructElem + /S /L + /P 12 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [89 0 R 83 0 R] +>> +endobj + +83 0 obj +<< + /Type /StructElem + /S /LI + /P 82 0 R + /K [88 0 R 84 0 R] +>> +endobj + +84 0 obj +<< + /Type /StructElem + /S /LBody + /P 83 0 R + /K [87 0 R 96 86 0 R 102 85 0 R 116] + /Pg 146 0 R +>> +endobj + +85 0 obj +<< + /Type /StructElem + /S /Formula + /P 84 0 R + /K [103 104 105 106 107 108 109 110 111 112 113 114 115] + /Pg 146 0 R +>> +endobj + +86 0 obj +<< + /Type /StructElem + /S /Formula + /P 84 0 R + /K [97 98 99 100 101] + /Pg 146 0 R +>> +endobj + +87 0 obj +<< + /Type /StructElem + /S /Strong + /P 84 0 R + /K [95] + /Pg 146 0 R +>> +endobj + +88 0 obj +<< + /Type /StructElem + /S /Lbl + /P 83 0 R + /K [94] + /Pg 146 0 R +>> +endobj + +89 0 obj +<< + /Type /StructElem + /S /LI + /P 82 0 R + /K [94 0 R 90 0 R] +>> +endobj + +90 0 obj +<< + /Type /StructElem + /S /LBody + /P 89 0 R + /K [93 0 R 78 92 0 R 84 91 0 R 93] + /Pg 146 0 R +>> +endobj + +91 0 obj +<< + /Type /StructElem + /S /Formula + /P 90 0 R + /K [85 86 87 88 89 90 91 92] + /Pg 146 0 R +>> +endobj + +92 0 obj +<< + /Type /StructElem + /S /Formula + /P 90 0 R + /K [79 80 81 82 83] + /Pg 146 0 R +>> +endobj + +93 0 obj +<< + /Type /StructElem + /S /Strong + /P 90 0 R + /K [77] + /Pg 146 0 R +>> +endobj + +94 0 obj +<< + /Type /StructElem + /S /Lbl + /P 89 0 R + /K [76] + /Pg 146 0 R +>> +endobj + +95 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [51 99 0 R 59 98 0 R 64 97 0 R 72 96 0 R 74 75] + /Pg 146 0 R +>> +endobj + +96 0 obj +<< + /Type /StructElem + /S /Formula + /P 95 0 R + /K [73] + /Pg 146 0 R +>> +endobj + +97 0 obj +<< + /Type /StructElem + /S /Formula + /P 95 0 R + /K [65 66 67 68 69 70 71] + /Pg 146 0 R +>> +endobj + +98 0 obj +<< + /Type /StructElem + /S /Formula + /P 95 0 R + /K [60 61 62 63] + /Pg 146 0 R +>> +endobj + +99 0 obj +<< + /Type /StructElem + /S /Formula + /P 95 0 R + /K [52 53 54 55 56 57 58] + /Pg 146 0 R +>> +endobj + +100 0 obj +<< + /Type /StructElem + /S /H2 + /P 12 0 R + /T (Allowed Mappings (Truth Booths)) + /K [49 50] + /Pg 146 0 R +>> +endobj + +101 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [46 102 0 R 48] + /Pg 146 0 R +>> +endobj + +102 0 obj +<< + /Type /StructElem + /S /Formula + /P 101 0 R + /K [47] + /Pg 146 0 R +>> +endobj + +103 0 obj +<< + /Type /StructElem + /S /H1 + /P 12 0 R + /T (Constraints) + /K [44 45] + /Pg 146 0 R +>> +endobj + +104 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [25 26 108 0 R 28 107 0 R 36 106 0 R 39 40 105 0 R 43] + /Pg 146 0 R +>> +endobj + +105 0 obj +<< + /Type /StructElem + /S /Formula + /P 104 0 R + /K [41 42] + /Pg 146 0 R +>> +endobj + +106 0 obj +<< + /Type /StructElem + /S /Formula + /P 104 0 R + /K [37 38] + /Pg 146 0 R +>> +endobj + +107 0 obj +<< + /Type /StructElem + /S /Formula + /P 104 0 R + /K [29 30 31 32 33 34 35] + /Pg 146 0 R +>> +endobj + +108 0 obj +<< + /Type /StructElem + /S /Strong + /P 104 0 R + /K [27] + /Pg 146 0 R +>> +endobj + +109 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [10 114 0 R 13 113 0 R 15 112 0 R 18 111 0 R 20 110 0 R 24] + /Pg 146 0 R +>> +endobj + +110 0 obj +<< + /Type /StructElem + /S /Formula + /P 109 0 R + /K [21 22 23] + /Pg 146 0 R +>> +endobj + +111 0 obj +<< + /Type /StructElem + /S /Formula + /P 109 0 R + /K [19] + /Pg 146 0 R +>> +endobj + +112 0 obj +<< + /Type /StructElem + /S /Formula + /P 109 0 R + /K [16 17] + /Pg 146 0 R +>> +endobj + +113 0 obj +<< + /Type /StructElem + /S /Formula + /P 109 0 R + /K [14] + /Pg 146 0 R +>> +endobj + +114 0 obj +<< + /Type /StructElem + /S /Formula + /P 109 0 R + /K [11 12] + /Pg 146 0 R +>> +endobj + +115 0 obj +<< + /Type /StructElem + /S /H1 + /P 12 0 R + /T (Variables and Sets) + /K [8 9] + /Pg 146 0 R +>> +endobj + +116 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [2 3 4 5 117 0 R 7] + /Pg 146 0 R +>> +endobj + +117 0 obj +<< + /Type /StructElem + /S /Strong + /P 116 0 R + /K [6] + /Pg 146 0 R +>> +endobj + +118 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [1] + /Pg 146 0 R +>> +endobj + +119 0 obj +<< + /Type /StructElem + /S /P + /P 12 0 R + /K [0] + /Pg 146 0 R +>> +endobj + +120 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /MJEATF+FiraCodeNF-Bold + /Encoding /Identity-H + /DescendantFonts [121 0 R] + /ToUnicode 124 0 R +>> +endobj + +121 0 obj +<< + /Type /Font + /Subtype /CIDFontType2 + /BaseFont /MJEATF+FiraCodeNF-Bold + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 123 0 R + /DW 0 + /CIDToGIDMap /Identity + /W [0 47 615.38464] +>> +endobj + +122 0 obj +<< + /Length 11 + /Filter /FlateDecode +>> +stream +x +endstream +endobj + +123 0 obj +<< + /Type /FontDescriptor + /FontName /MJEATF+FiraCodeNF-Bold + /Flags 131076 + /FontBBox [-11.282051 -228.20512 627.69226 879.4871] + /ItalicAngle 0 + /Ascent 923.0769 + /Descent -307.69232 + /CapHeight 710.7692 + /StemV 168.6 + /CIDSet 122 0 R + /FontFile2 125 0 R +>> +endobj + +124 0 obj +<< + /Length 1264 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +47 beginbfchar +<0001> <004D> +<0002> <0061> +<0003> <0074> +<0004> <0068> +<0005> <0065> +<0006> <006D> +<0007> <0069> +<0008> <0063> +<0009> <006C> +<000A> <0020> +<000B> <0046> +<000C> <006F> +<000D> <0072> +<000E> <0075> +<000F> <006E> +<0010> <0066> +<0011> <0041> +<0012> <0059> +<0013> <0054> +<0014> <004F> +<0015> <0053> +<0016> <0076> +<0017> <003F> +<0018> <0031> +<0019> <002E> +<001A> <0056> +<001B> <0062> +<001C> <0073> +<001D> <0064> +<001E> <006A> +<001F> <0032> +<0020> <0043> +<0021> <0077> +<0022> <0070> +<0023> <0067> +<0024> <0028> +<0025> <0042> +<0026> <0029> +<0027> <0069> +<0028> <003A> +<0029> <004E> +<002A> <002D> +<002B> <0079> +<002C> <0033> +<002D> <0050> +<002E> <003A> +<002F> <0034> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +125 0 obj +<< + /Length 8963 + /Filter /FlateDecode +>> +stream +x{ |TZ3{2y39! 8$ H"/APbĖZU=Uk϶ֶ_VkZkNo33IwG:{9{^'@lߪ-}gzmpm[ ׿q_dpӞ}QvיM՟@[wd~#BXq' @n"c$m^ѷ?82e+| l% _/lpBFz`8o?n4OƏ4F\|lJO<*|Ӎ͉{ۮr6$ XjkZQ\&,ֆDST#5!@ +.4H'+`^ݥ|BjG<#E" bn%(XpM^;w1ƂpMsXfiH@ #!}{yOqS˝`sO4\BqW^r.hH!#.b&:+*:C&.!_ iѨ&R;C&4UKTm N"=#`eH@]"=l%DEfC!>zZꁰO^YՄ5V= R + E[(7f]ЈIu˧B4uK)AmTU݂E:ѕv5_q\K W؂1`S¦tM +~a6F ^'$LH\mw̖ lWpҼS )| +ztAyTRI +S[6颬3D盔Idr9uWx'1ƚEo'#&KaMw+CȖ{5-3G=F#'rmC1.}pxVVNWL8x795XNNP`4 r9܁Xf|]3# j.]`4A;M>Man9Y%";$"Te} +cI`P@"Jmy!yuHYd 5D""@$/ya ҵct-{cNoL4oBޘ%X +]gxc6zzBi[ҵJw3?ɼd&1˓&S|цiϘ{NޟU]˼1noӵS:еu7Bޘ^AZ- qD+xz3'.j ԪGtW%t˴4 fTk ]Λ$/T{/1SkqZf̦F.VyZ֠- F|b';`OO{c Zb`%=;)ꁱ:ļ>+ _݂%,V0Z ´Jy¢hMD(WpM՜GxZPM jD%xF(#PΐSDuM\o9ulԕoh{nWK0BPQTinZCĻ>ѐiB-BoEIH} ؘ!mƔաJAwh]qU[EY{\[:VL+B[NյJb(:+!!\X<984# }bIY*Q=V Z,r@':cDYC90K<>0D! .z|"=B5'#hAs!Q'K ''nzg'"N"N";!E% }!bajĀ\Qr]D uu\Q庈BMr]D {cАT~O\i=>.a$ Mb0Swr;MW{c2I6I\Acy; $ $ ~7q &IM7ycpay{坄l$ 8V$I6X,q9ƙ]NW8>uH$kXw*(` +Kk+Vj{XS,|lRPATPQPϻ)՜EYʭ9tK᲻vs-zi"lĚrbۚFWUyR];*?O:yOr36.6cNqVZ~g^QQRRAWրz1_\yiiég/lܚe|J<C ۟sZTM P)J2lsНOf (] ȅ\{~b+å7|EWJUq9\Nv+JKIUX\qAuClŦ|{{>:tzAq[fBdJ"+EZQƔ((epar@ +L`apaE8fYҲYVon~gfTyB& Iê5z%/7܋/޽襞>y_l/twF7nê7mK^+>̊=cQ3xq~ZşV*b{zcKMapDd +2pYRSqDadx8sUmnw4ܩ]W㶻.{nF63/Z^womdy3ϴL@? `9 ;0&xL D77 + ؊pY(%?n'k{~xų3o+?aOGڛθ7׍y+_Z+"Ղ +J9hQ@0U r3$%:JkN ]b+` H-XSS:Xj*g𺶟{;~R#w@ތ!|+V<_y'7o/uUwV(﵉ΐ?]+f iZaϑg(AUa ؊bY,Iag!Hb4Q,Nu>aBɴ‚|=3#5EP6[؀>a +4WiE5q8y"jCKÚ[y]}XW9lj+/ojY< uJH] رcl1o?y+L]TCapDP9IQNF1YO&IpM'B(L4=CkK}o-~ӛn;/_̫xGAKK峿rd-9;lZXJ<")usT Z>EqtUrx[*!v{k_nٞe47f㼌$}ӑIP9C\H֓L4"bzP dKLeaSP: qAY[ݡkzmk.Xϙ"r!^~fֲ5Oy+̘mx+8?UAr)ɽ@`2){Lli0TI,I&Lau;sJcn}WC|WgbP{I(/7d**)|'6P$5~p<@"f!$TzZ +0T>uڴ[ZolՍ׍W{Gy巿s3%{2RaTx\`M5Sfb."?G1[9=R\(*f cx;>fٵ~̳m0eG{Wwao~- 8 #YNTش +D-I:k+ ddpbqʭ=V(|͜/ 532DTP-czd{.wϹNNG^t%yiTZ%Gn2]5ՍJm4nymی=k[}ⓃmCCmK Gwhmˬy70X5AC}Opҥ?VޡA* >g +&Z^&$jS9 v%HM:r*暎u&.0~w3~ (McS]ĝǕx?d|1){>~\gB;\3K{ٰaQc_CC_ ]ԷhQߢ m8>C`d#W47>F2~KnReb1b q: 6$dC 9=;Ra (_QfKwNecbTȔ|\uTI`(ɢNdg؋ +%9%9R gz]ǙV"È^ZՁ?|!裑t6ܿzzR;M]7D7\#7Y7sȊǏJ +t^FvMy1,|'\lp +_S77^Xzp27|{?*^;g 3[('MŇLpܬ6Oy:$eTÕ7GWt>0?7r?g~Ͽ:*_ZQl6=.frHϥZ} +INjD&PN굱S8Ԗ7Kg{< 4:8qt?L]gjy鯲wθyfFPx'kP<ƕTDзluavp<RQV԰A{&[ &ʝ1VJqrx)=ω/y3dfج`GD$ӎ]GXrdQ[m\y+XނuWk/⭣3l\j(\Py34|/~OCkUC[hX!epj2bJ5 +VÖnX+xQkϙoM5e0W™4dZ[<5][Hx|"Q4͔Д,wQ%AO XM5_Po9ڿ^oׅ޾K; 7Ub-!\uKUt{+NYpݚCewx2^l{Ue)^7Ck99`9i*新ky*TK*2[yƣO\{Go~'Ga%nx܀9h8IT`)p3Yȓ>b"'mZU{Jt4 ~\nZ7}[ls2Lw]8% IyU8ш|Jްn}C ܲ?܄v^[eӛoW0r76FTS{P~eJNř1/73hǣ$$` t#{yǸxk#${hoL~ǎHǽp2C!gd2[=h͗'}ǽ;C]B׬Y{\}ƴ~:pɳe-&GZ&qʥs`8JCX6dF=>Sbgw +\]gz+^`=6v(;'uehtŮ +<WޣzۧҼ:#wrȄjRd0/QvfM:jҐd qTgx|is&mh|]6v[_>}mѯ9_eQnV=ɚ̆LT8jpPW_G-7*u0 FF f~@p3O+f쉼g&vD#ǃM"Qi~:|ߞ;^ѣ}5pv\[vݶ[>g@M_w;xl[yMѷ^ұ_غnʅ!H2I0&U7O=~d0qɏ:+>E?NFKwuDqڌz>dŧko}>r]ʣoS~+~<~\k'{^Ԝ8_I *gek!@=7v_Lğf#jOKeҸ(JTՉ"U`j׹|-3Mȥβi]UP^6'z0ݭ\f4E-` ݸޝW(&?s>6>>yv-` DEʙ\IS :[a1p~g|P `q rh+FxFO^G+D{܌?c웊_yW|?Wf Xe-X~ҞFmRS֦HL>"cG +bva쇲_Y󵸌&T`̯tJ)0J-|@y1N#qA +X4J̉*4?N[wi+ q:62m4(et$:5oq:A aaU0.jI +. V-0! ++:a3 AVa [@ +ܭ0[`́9 C%0\s`+ &N|S=Ѡ`3uܭaVK5P 0_ymAѠV><7u@ فa`P>ƶJͺ. a$MѬa6Ƥ6ÈWBP' O?^РY3˽ѻ7}/%pn4iKdW'WocB֫ζUr7'>)mIs)U +rOnZ*?S{VCT; +a\sSg-VHz+,-) S[GzሴJP)s`9@Pu9Wk.hڡ`%V(UP a(\C=4ŰAZXK! ܐN,a<[vo*gxm=v^[!hOX,lw^RRhUSC+RhPPz%3^l +ic`_X[}!mU0)ͤSr wXR^4Q{-K +endstream +endobj + +126 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /RUGNBQ+FiraCodeNF-Reg + /Encoding /Identity-H + /DescendantFonts [127 0 R] + /ToUnicode 130 0 R +>> +endobj + +127 0 obj +<< + /Type /Font + /Subtype /CIDFontType2 + /BaseFont /RUGNBQ+FiraCodeNF-Reg + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 129 0 R + /DW 0 + /CIDToGIDMap /Identity + /W [0 54 615.38464] +>> +endobj + +128 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x +endstream +endobj + +129 0 obj +<< + /Type /FontDescriptor + /FontName /RUGNBQ+FiraCodeNF-Reg + /Flags 131076 + /FontBBox [17.948719 -217.4359 597.4359 861.53845] + /ItalicAngle 0 + /Ascent 923.0769 + /Descent -307.69232 + /CapHeight 706.1539 + /StemV 95.4 + /CIDSet 128 0 R + /FontFile2 131 0 R +>> +endobj + +130 0 obj +<< + /Length 1362 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +54 beginbfchar +<0001> <0043> +<0002> <006F> +<0003> <006E> +<0004> <0073> +<0005> <0074> +<0006> <0072> +<0007> <0061> +<0008> <0069> +<0009> <0020> +<000A> <0053> +<000B> <0066> +<000C> <0063> +<000D> <0026> +<000E> <0075> +<000F> <006A> +<0010> <0065> +<0011> <0076> +<0012> <0042> +<0013> <0070> +<0014> <004D> +<0015> <0068> +<0016> <0067> +<0017> <0054> +<0018> <0064> +<0019> <006D> +<001A> <006C> +<001B> <00AD> +<001C> <007A> +<001D> <0079> +<001E> <0077> +<001F> <0028> +<0020> <0041> +<0021> <0059> +<0022> <004F> +<0023> <0029> +<0024> <002E> +<0025> <004C> +<0026> <0062> +<0027> <0069> +<0028> <002C> +<0029> <0031> +<002A> <0032> +<002B> <006B> +<002C> <003A> +<002D> <0049> +<002E> <201C> +<002F> <201D> +<0030> <2022> +<0031> <002D> +<0032> <0045> +<0033> <0078> +<0034> <0046> +<0035> <0071> +<0036> <0044> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +131 0 obj +<< + /Length 8536 + /Filter /FlateDecode +>> +stream +x{ xS虹sZ+_6֕ Wl`M"%lcf 6[GB,#$MR$mBӿMtKпMӼ ͽ1Ig̙3gq 8ڹiP7}GVY}Hߴ?H 3;5B6evF(Ճ[{?P>uk;C +WLCքVwtqGuk7 i~xz@7esg/ ! .؅W$YW_߻Z0FADnCX|7Hx +0oh~ B^:=tvmv;\;|A"J..]Sc^5`f7|ohLꢤuR{$;I $b1!/)#V0](sRΣV/`$z#(WYG:r@~l %SO& +URXuV=ړT6?aiK+DM32AeA[0(vx_'v?Fl>[#bPVcT2t2S<,B@Z}7ࢼ"I8B]ZT'{^EATvS)uu˽d׵iO:)_`' K9Sy%m`-{@y~6Ɨ().SYP% +7DuR5(6yr@=C ֪C"qʼnSUxm)(qa9Ą2lL TQ8(C YNsZl%2km=P`w$%q +պhBQPho@I7@Y/dU^"d))r4({eMQä6C-.jRA=CMY Co?(䥢o8}$c",Q3QKLQ(۴y;ԑM5d_CkuLr-E> +5#!UZ€ih 2^e(t2- &zf_ͅz'e\ԪtT%X1kӕ0 %LXkS7 EgOQ:_/7CkY.q|T-]QQPAyI&įd3'P⋉+2/^9&b"K4oRu0<.:v[5ޯ\V:UhsX W\ +B:uꕙ~jx٫]),UKrEtz%l$ol ݉jf/@% ӝ1ܠig2cFo3΂ +f#,TH +\tu0 hB+ \qN +a9V6;]t2PtVeڔ+#Hp.:0`aBÀE19]ԯc9E1-V!mFRB +u3.dg2 drv&: Nb8 f8 XpУUt^.t1hJVt1_AUFAk0T pڣYN`LW{^nP(3 g80uSWl@& d[0"ܬ  d*a6߮ }2;0"l@p2JfSwi C[.%C5!VF +:l)Ӻ%],h{:ȇXY@'X B@ <9/qqǡ@K{˙-ҭx#]/;Mv"2 rv TJKrlAǺ%5],fAǕ$_{舔b?qrQFR5c¼@|;KO`bȰV͍l&;k]3O?}f<IܐcYq(D-I,t (APIJ 145[Ғ\7~7]vEܑ]zH^?yƛs 40ssZZpj Ƹ<1f< `KIC-SQK4s9!;8qU3<`&ȢI4e INJN(KE.,' eyԧAȑU]Ҝ=xp̑K&Y@*.Q2# )96O513< ȐFtzUZl~v ]㜈fV_< +)L(C]R5\-gsrPG+u9iÄgwp;.nߗ`mL1 ] "qd t4ÄD!L2?yJʪb,OnT\V.Ž\L]Z'"BbA,"hܶ #f <*1 h\caEel|Q/@*JO !YZ{I  ה7TuDq{Y[olǕ\Îwk'.qC:{JDGn˚[ 50ңnQ[Hq)lO^ݥzpݽҭ)kjӇ/ݳuݲ7r[~@n7BLevF8Q&,p\0yW @B@L҂ȕHI zrP5RE[d1kj$O0ļnƕ}aX'v-ymw[8}}[8c˷zdAzjiG[B_ka{J .p"`: h<#Tny?-F1dSr-i&Y4,Kݢu$"ZE;O9$sڻ]þOߎ/Hc"³5M]2vX`2x<3!M !B +W55# sRɐl!݉&dZ1Mai#tBuǶm;·k9GEoMdvOkB@EbHsD#w|/cMC.y$-;l/>fȄ|((""s5 +5; s"XMtY+u"]\f*)D*THy}h{m{n}wӁ\LJs<')nΈwXz%sr:y#Z-Ir4[S4 XMH  lG_x,i)D$T]cy?gSlA'r.MƏyfNšoٟ8EwLĽ볧okh_;濻3 ?<dBdqjAps\E3F1,ZjL2W9BMn"g8CtEX貵=:ۀ@m` ψz]tY_ L!hKʮ0 =01MT&GyNv!ˉFKs*Mjn%UTyӰW_3^R{0pKi^]ydy'G;m:خ m |_YvM7߱v{bFX[tG_ۻjFkޢM[Ze}~A+Ccĵ;ЁNE&Qv~vB޸\B޸~&],勇,R2G8܄9m2s,dJhylg*DSJU"0JRjL,j)D#\44p\}mέ{KU o{HW,iP}c7i$n!1mEC z68U|BIJMxd`rfFzZ9%)1 #YK:PD |LA˪U-s>V9mF窹+ӝĭvӕO?;U+oZuƼ5 @VQըR% cc& 0!kv5L媁3\r޺h[kg27[NFY<_<6`|;#h.$9CTj{eH2S<O} HSZ1y]g/ER=XD ￝wV9 $ #'P1b@L$1C % +Z\,s?;cm'UD"*D$VlL+eΆvy{D=K {I&ijwQn`Ӟ-)ɼqH6r~뾏μpב_L24rEW掳/F>_%؉)T]dD=~?=|e)~ۗn[Y>@ uǒ7y +[ Fpx`SWuQ.윌HFv͚љљߣ,j/ w!C'CcHbl>1ۍ)AiXZG[u2 I`jVնkbGngf%,V#I%c9)2owGn@%r9l7 ܞiq{|#*q 9>hieeUXU}pYgGWw?^FCo^b) ,0jb9DJ1YzW q#\O$߻˿GrGgcE.q +Ս<K>cYɄlL0[q _Z[ti}X--[YL~χ ɓk8nq+:-q~y _ *Ňv_>{7iܭ/wHxj-bC%YV.1/79+M3= S^3f.J>4̟_^5"5L2~UOdijJ8 aNt02moU3q\⚚bUOV_`Aͤigڼ \Ni{TN U \j*wݻޡݽCccpWCЩ1JK,.^ 6UE%L=LʤjZUfr~uY`'f$`w=6X&iVS93HA)ݚZī/TI2pN=eL`皖{!r/96mTeim>{wGBPƇ cJNqu|{N4_IDZJ +Vmݩ_|ӫO7rቧwl|瑿_ɇ^ySE[crg;H'3Ǘ>fE|y%p8^#~yl`Շk +8Q8C,"xN*8߆G&pVݰ›p3p@,E7gPU?E-%uY k06x%"?AAs+憹ߓ|ry/y*5QCݽ46 MÆ 0o3KkB?s{Wr'Ix)Ħ]^[{-<أ(a^P2 F/Da (A (yF(,$t[A/z( +(lA6^' H_‰PQZX7A HP SaKaH0z$>H.u`-nTς0`H;`L"(S16r(NX a- +nbL҈- ХB;tCl~h]# + +an:q ߪbՆ{N ԃ+UN7kׂ}z66α5՛ Š bB5 F-IPxݠuYL:az3vֳAk>XJ74T[ %^[^*7*nF?AgnaJ!`64sa;qkv`QӠPU^&rWg6G\Y=̂6 sCTp%* Pʡ`.CgԟCPgr`!,P r_ fy0aC\HC@5CS`> +7;n6޴{Ma'Fh_" 5Cx[H=)t1:ԎP̫CWMg3 g gW*x]׆sЮ6?~Wm8OAڀ-dž^oD<:&؏'߀+|! N c=w P[ ?\ +endstream +endobj + +132 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /VPGCJC+NewCMMath-Book-Identity-H + /Encoding /Identity-H + /DescendantFonts [133 0 R] + /ToUnicode 136 0 R +>> +endobj + +133 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /VPGCJC+NewCMMath-Book + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 135 0 R + /DW 0 + /W [0 0 500 1 1 786 2 2 569 3 3 803 4 4 569 5 5 970 6 6 778 7 7 490 8 8 278 9 9 1000 10 10 750 11 11 389 12 12 490 13 13 389 14 14 778 15 15 667 16 16 778 17 17 572 18 18 278 19 21 500 22 22 345 23 23 500 24 24 404 25 25 500 26 26 715 27 27 433 28 28 642 29 29 510.99997 30 31 778 32 32 429 33 33 722 34 34 1056 35 35 648 36 36 339 37 37 579 38 38 727 39 39 649 40 40 388 41 41 607 42 42 521 43 43 683 44 44 778 45 45 278 46 46 778 47 47 1000 48 48 681 49 49 392 50 51 556 52 52 444 53 53 332 54 54 556 55 55 500 56 56 444 57 57 556 58 58 904 59 60 278 61 61 905 62 62 778 63 63 1089 64 64 473 65 65 991 66 66 557 67 68 458] +>> +endobj + +134 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x~, +endstream +endobj + +135 0 obj +<< + /Type /FontDescriptor + /FontName /VPGCJC+NewCMMath-Book + /Flags 131076 + /FontBBox [0 -347 1140 847] + /ItalicAngle 0 + /Ascent 806 + /Descent -194 + /CapHeight 683 + /StemV 95.4 + /CIDSet 134 0 R + /FontFile3 137 0 R +>> +endobj + +136 0 obj +<< + /Length 1670 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +68 beginbfchar +<0001> +<0002> <0031> +<0003> +<0004> <0032> +<0005> +<0006> <2264> +<0007> +<0008> <003A> +<0009> <2192> +<000A> +<000B> <0028> +<000C> +<000D> <0029> +<000E> <2286> +<000F> <2208> +<0010> <003D> +<0011> +<0012> <002C> +<0013> <007B> +<0014> <007D> +<0015> <005C> +<0016> +<0017> <0031> +<0018> +<0019> <0030> +<001A> +<001B> +<001C> +<001D> +<001E> <2282> +<001F> <00D7> +<0020> +<0021> <2115> +<0022> <2211> +<0023> +<0024> <002C> +<0025> +<0026> +<0027> +<0028> +<0029> +<002A> +<002B> +<002C> <2212> +<002D> <007C> +<002E> <003E> +<002F> <21D2> +<0030> <0050> +<0031> <0072> +<0032> <0075> +<0033> <006E> +<0034> <0065> +<0035> <0020> +<0036> <0062> +<0037> <0061> +<0038> <0063> +<0039> <0068> +<003A> <2131FE00> +<003B> <005B> +<003C> <005D> +<003D> +<003E> <00D7> +<003F> +<0040> +<0041> <2131FE00> +<0042> +<0043> <0028> +<0044> <0029> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +137 0 obj +<< + /Length 8518 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xyyXSg?j)i:m&2Ψ.vXk+Qq_@@@@ ,! B֛d$a# kEvqiݵS{ |'E9% 6D9✒ nݘS@**޻ dAqf^fZIfƂ҂/mڰqA@ !gwfAIEdf. dtbQ%Yqɒ1%Ki&n\ꅕV. D 22i9y%cb~Êya:x'u_Hmef9Enq̻wknU훻Qc;l6cm14q1+-~c;p;]ΉtGPwK[?+ڼϻtf-\=x{wqǻqxrğ7yO}e{j{G@xZޯYX0NgO“U.^Uk*?-jYlzw/{pl; CfsҮ`^fFJ5}騡h5Zf=+H_x~b`.} M5&j^PAfNDSAIJ^F 2nl{6&b:v_B)ڨI@?4?(0 >GOM[-y.quP¤1Ien#T60FwF>D sZ<ou-Š%M?Ǘ d`Ah5 5 B@gҚ.RB4ZKRlBl@=B!.ݣ-2@*:! A ܜn vAO5!tiGXHֺ)sjp|J5ŝsAx.)^Y08:>cqQR.VjD*BQe1@>Y^v&O% yue3ǧ&tvԷ {S6VF)Oߛ] 6pqKfU;>'[>{TvIj" ԙ3JH]`TME'\.UJ^~*Ѥ3B)gk 6(:8iW@fV/wQuE?%\r}$t*E3Ly$*DȥN?4š~_ԂܤSmC:ٝ%=MN Ij@ JC"R4}-h*._H\jW!:яmgM^GRodr) +C6_$UZTU.+ +)v:QWSk@4*Cl +֝F<~t zrR2c4x|z6O+/G!*(a[\՗;W:yPM-)mT%Kgv-ޛRQY2F& -n<63~ /B%(J;]nyrGjL1iԴ17f,FI)@.ԍK$SVA!*Q:mB.}ı,Bk,~+)ٛ*n@Ff  MiZ^zPH&WWBcI8&&܅pw#48=>9ǦOxv+ɐʒ,B͜) JT*5́PhIlP͙k iS֙M];id@7<1^,ԓv88; MׯL9F=}ѦP 2N榫pޏROV>cYBdAWkW4Lfو?&62Nʧly_ƵԼچ/yq4ϋ(|uH$*Q[[Z[R~ҽAZ7!q+dS\IU]XŎ}fݛ * r J^nح)J޻g ;F<-P*UBBPRοJ!WE(WI5Yl (;2!S؈"ٜt(j; jdt ts7:Xªk僼4$+/˚mBz%'dV@J'/8Ѕ0 5ND +^~ -#{(6@-xZ2LF0f0Pz7xFؼ/x`J@܅Өc;fcƳ[2j9N8@?9ߙm] a%.ųYA b$Pj0M']u=AGNCf:ſ*L7;#oLWbf1 1φ_2tE@G[B`GHMǬQ2GoTK^ݒv-Y/)ZzCGuCBu+Np&a7n7nK:HN+]*O#֗Cz,L}44n<aM/g,up9>}-ͺ[}wu&?$2&?.U%L/wXO/31wݣKv$`Z|UlqENuNIբC y +ahyAQfζ5{5 \T=w5u_ +p_:Nu]| +r{u[קGši+d +k}+um_ +`ᥕLV7| Uj@QJ9:m~}α?ѱcM? +]uN>8vҎd<b'Th4$ NZqlN"TXK'*@d{6B[sXG&j :#lLaWLIn^/ 'ӄeu lF;D̅wQ7_eC;I]Ey{3bWeX 1 `Oqu5G- rk.ãC̊j]XuF; `@AtURCJ{@ JJ!x17 +! vYiVug.6B :E ^3}o `_ +X%,R%>^a?0>@a`*9㓠)o~aX +}pt?y@.DJ)EG+">Y8ӗkυeh٫y9W^·—fpu7|0 L3/X8vXpmɐYTӆ;Q g޸YVj !nq#5*d#i ۫#l{% s 6Ye, Zfi~'E8=m)`ͺ=*%ua7:'t(7iP]0JMZj!޴N218%Ua?݇.C*]I֌:^mu9zn$~ eDZ1i+D{A +*?t@@^0TڞR+"kT<:8<19}}w8'ic`PA}D% +&΢}U c? +ΉE[z;7he@I:IPn#jI-)1fe-s&("dĢkz#b9ga}> PoT"S~vpǸ-77BP\~$+! +E>!x(!`r\:Ĉs@fRc +1h2 P '$VF$ÌH+Rۅx#CmJEVA%ʫʶ2F4p}?^vZ=E/b@H:b؅9awk.:` :9?~bH,ơ=c^,M[B~S7Dg?GB/ +i/|0f ʪPZ AՉ;"Qν8'5q,PmZ̹4qK?鶸˸\n;qlcska8}g.fH̓ɃSp#&#W4 ,]R pH֡5B8ntX](o}/ Z̶i= 0ڝK7s+-v9aǼ /%%뾌W_-}mAT5JK F~yW?e54=9=Y a@@x HMk[(Tr5!gV nM  (OԒ!?o_15a9m%|zŗl&63nf-ދzl,ۀ@z6lH?+7Lŧz3)ЅcǩkcoI|BQ *su+ŝE}C1!JRx/Iܱ95wWNUOX}cn4j uMQ!h&C=^]CP?ge"0C*5dW +P蕚2mjcjW ף! zzV+꠶WÈK_ca6^H/ŕt +dg +~B;KϽ'VVW ~܈ΎV>{fUjo8=BKœ0D}>Ě0,_ +ؤLM]tˆ +J4iJti(3  VV뚄M4 @(U5rFp| Ng(@Q&0vEJ ¥y]~!PCo"\w<;MPeI=2>ixAT*AU"P5f5oəRgnTcm(,![v +=5L&K.x%J.Soh JI&˅$Ǫv虚hstnz.}'&.aT zJxReU4 F\n:zg\ﭺZ}N./(7:A:geV@1K'{tM`[O{ +z* +PeRhQv2)ejPƬy +j$K'!ۚS GϠ_g/Y] Wcs'0@1\nMrmu"gk-[Kb=<]jGbe:Nk=װY-O:"Q<=x H뗿l_b1eJB_F +rO9A~Vu~XЄ;UsR_OּEPbm"h",QRFbQ\Յ?G3Ҽ<@ZҬjAw]'J&/gǁ AA_s?G>V9'8\ rM SA<Ժ;J7b_dRvF8,3p;9pig}8;'Fgjv0p8S^y PCDɁ%<g)J[0䱋5utfOK|WN2\#J +H{be}t \_ͬ|Yte; # ʢF1Z^ +endstream +endobj + +138 0 obj +[/ICCBased 139 0 R] +endobj + +139 0 obj +<< + /Length 258 + /N 1 + /Range [0 1] + /Filter /FlateDecode +>> +stream +xuJPFOUvDD@`]\ +FMkIRB|&إnऋ(HrTų9` ըa&ʺ:l +3Ŭ*ުnh)&C|>b纝黓AvCƫ+ y') +̵8+/> + /Font << + /f0 120 0 R + /f1 126 0 R + /f2 132 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 0 + /Parent 1 0 R + /Contents 147 0 R +>> +endobj + +147 0 obj +<< + /Length 4450 + /Filter /FlateDecode +>> +stream +x]O9nO3ػ1-(=dA|xG%u\^T*"_}t8|{OwpxA/tA0~_o8ƍqr\]}>zx[=ƛ[st(7'm~J7S<|5*w?]?//ch,ZK<̡hx@h"q5Zz^T[|XFZRujySxAMePg*agX'Z@;H1?@({@ E{~@€9wkѰ3fJ`e,L*ӜMeRՅk9(WwQᯌHS@Iῳ4Vpjnxj}oXo/ {GB3H|$P|V~/ޔ?o-JSW3Yz;`5"&뱽,bj{H4R^¢sfD,zZ΢7 ^q% ɃCcfghnD00DcFZ.{;v:[KdhѠEj}<bIO6{x5~jUm.D}6ڭ'3Pv?=.4;fWhB7 aNl@8)hP |.4CbclŮi0$H # ==[h?1x l$ oWckMrgqwܖ|6'}5Sx$L6^{~>p`hiqCT#]* M.v \@i!Zbd|-<{ +qiS${k=@ᷡ&18&Z0N0eP'OԙE:CC^]{zz6~^:Q.C5.WyNo%=%~ fV1Ʃ` TjF_ԥ9q;<}SkcZy# !)Ktoثϋnף%1cI4>JWpa"[ui3:S>e+1ݿxWm$I}M4 NmҨ6u>qbwEB6hB]dWF@cf +Tp[9pL>̡-?𝺬_/Z#f*ض&~/ddg7 +{ AA r\NbP7o_ FpZ$'E$O75+@k`eY9h7fT'=Ą9$Ҡ9dJ-)'_DX^2minǛĀND-\3Nkx"R#>rk}l)a**I@_T3d\uR?1%"zWݔNTkbH)̠rշ !|[MTj1vEb]m3PJ[NGhvty8"qoXT^@Y^=^]P-q,T.Lf@ 281ڲ0Yٺ#-Mgs$ mv׎2z-&)FkTZ^ }= Qkhԓ"$ 5Qm0I +=P;V)XB°12m$Bs(2ZYapj6ff1{ >o(' ° XZq,=I !8%^gPHQeu 33H ؕcIiotNs|v.Mr4SBivCEq}eRt>MDwE;gtMܺ}3:cfN(:)3@TR +| n +lMU+E.AZu0#htjwu>8#J^CU(R>8PQȥh%S`KMG u@.LQJ{K*JPiBi47*NF9 ϐG{[*J FiصCgQN !!Ms +-UQƮ1f TrIObNB CqWAj4g +<Ӹ3Kp4* ΃<hwЉ]+i0늲s.r1'f"u*Hυ5+pt_=u +EZ9:>3We8|²J6+j/GRa(1D?ŪJjL>S|eQ(QN}~Yy+V N& y+\Arb:6w*S9žyFკAu*XR(0:ރsi͐N = zq'z=1OͅZv~[+d8MyCEPH1=:|U!O_5縮gzU +q]+O]TT!rq.K'BQġa`;ZZ(}0|zmhvl6zv!ձy4]Ԫgȧ4El͐C%;4؁Kj'wa}ͫ:Zn9qhhB *rBXlYF$ $-hݾ[J|d]wuqGaKdQ%lހvv + Q@i߬2 +endstream +endobj + +148 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 138 0 R + >> + /Font << + /f0 120 0 R + /f1 126 0 R + /f2 132 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 1 + /Parent 1 0 R + /Contents 149 0 R +>> +endobj + +149 0 obj +<< + /Length 3353 + /Filter /FlateDecode +>> +stream +x]s$7}T;RB wGu~`?o󇏛w3}> +px|?}ս1ސpw?o~xfs[bbL"SqL ӌo??YC;c~'ޜ@15*ya\X]i Gst=ܸpNiaBdgC)VNETŪ>-e (/)WB{NeP]F" .kQf0mLƱ9>i:7RL|7m5jwхED,+$cf/"x9-_K?mjp>!Zx9թH[n_6̥$/ycOi@#Ϧ+@"Bl +=78$h\B(ĚQd z״>uKl >@ɣ>!a-fdT|?žP 5f 9 ] Cͪh@Y'@R/54ӃRҠAr ` 5X .iB#ΥfB5N,@nLu&+q{U%Ff(FQ˰/ŽS~;/T>9h0(ѐ`Xt"8ʅs⽃`eBWE$J8MIP_ +~EoGpW& ztg޻LۆSo&Rwwn ֻ5N[#h]|+Sʫ:+pdQ*x-;"4C03Y. ]=Mn%]+Fp(i: LC7x7Ӯvo ֆlMl2÷mH?b/ C=wnGXE%,][{6[޴TXPcTe;ׅ;ـ ҄עtӯf~CԎ$l[}b2}vHyvLѝ_230/9+>KI$52 HQ5=O% + rE3ԻiдͪnM8pcϭM5[V !ZΛ5jBR{a"F-;AЯr `֨b'aQ)Bsh=xv~ yRKh҅G*5T=dGƈct/$;zR,aᩎ1zf6BzS)7Yo3smyd/?KQco(kvk!JvYK_UD,; PمUeW +Z-5 ++ (QEeigt*?sBUyEU(^"bn!ެ:H:Љ`*ժSakX;!RkPkg5. 'Џ@ճS!]^~d6F+])lYDfĻ4(R,j%7[K7n aO\ދ\}zO뷳~=w3{MnxxIq0?7淩z`i}7V%ީWzĎ x!xql؄0hԹn"^:i慠K`7UT+i&~*!MVfC0e*^!p+OjGÕZv\ PRY#*J $ /㉨slL"" DUG.ʫ/cOa sX' +endstream +endobj + +150 0 obj +<< + /Creator (Typst 0.14.2) + /ModDate (D:20260315120548+01'00) + /CreationDate (D:20260315120548+01'00) +>> +endobj + +151 0 obj +<< + /Length 996 + /Type /Metadata + /Subtype /XML +>> +stream +Typst 0.14.2en2026-03-15T12:05:48+01:002026-03-15T12:05:48+01:002application/pdfNOWgog1cc+ONvvYWeL1RrQ==NOWgog1cc+ONvvYWeL1RrQ==proof1.7 +endstream +endobj + +152 0 obj +<< + /Type /Catalog + /Pages 1 0 R + /Metadata 151 0 R + /Lang (en) + /StructTreeRoot 9 0 R + /MarkInfo << + /Marked true + /Suspects false + >> + /ViewerPreferences << + /Direction /L2R + >> + /Outlines 2 0 R +>> +endobj + +xref +0 153 +0000000000 65535 f +0000000016 00000 n +0000000090 00000 n +0000000170 00000 n +0000000271 00000 n +0000000420 00000 n +0000000536 00000 n +0000000641 00000 n +0000000762 00000 n +0000000854 00000 n +0000001091 00000 n +0000002568 00000 n +0000003539 00000 n +0000003827 00000 n +0000003904 00000 n +0000004090 00000 n +0000004207 00000 n +0000004317 00000 n +0000004425 00000 n +0000004565 00000 n +0000004650 00000 n +0000004761 00000 n +0000004881 00000 n +0000004973 00000 n +0000005062 00000 n +0000005147 00000 n +0000005252 00000 n +0000005351 00000 n +0000005443 00000 n +0000005532 00000 n +0000005619 00000 n +0000005729 00000 n +0000005822 00000 n +0000005915 00000 n +0000006023 00000 n +0000006100 00000 n +0000006226 00000 n +0000006329 00000 n +0000006422 00000 n +0000006561 00000 n +0000006646 00000 n +0000006757 00000 n +0000006856 00000 n +0000006952 00000 n +0000007041 00000 n +0000007126 00000 n +0000007237 00000 n +0000007345 00000 n +0000007441 00000 n +0000007530 00000 n +0000007657 00000 n +0000007753 00000 n +0000007858 00000 n +0000007951 00000 n +0000008043 00000 n +0000008171 00000 n +0000008267 00000 n +0000008360 00000 n +0000008454 00000 n +0000008546 00000 n +0000008667 00000 n +0000008792 00000 n +0000008886 00000 n +0000008980 00000 n +0000009074 00000 n +0000009151 00000 n +0000009325 00000 n +0000009435 00000 n +0000009529 00000 n +0000009631 00000 n +0000009771 00000 n +0000009877 00000 n +0000009999 00000 n +0000010101 00000 n +0000010195 00000 n +0000010316 00000 n +0000010474 00000 n +0000010568 00000 n +0000010686 00000 n +0000010780 00000 n +0000010874 00000 n +0000010968 00000 n +0000011074 00000 n +0000011213 00000 n +0000011298 00000 n +0000011418 00000 n +0000011560 00000 n +0000011667 00000 n +0000011759 00000 n +0000011848 00000 n +0000011933 00000 n +0000012051 00000 n +0000012165 00000 n +0000012270 00000 n +0000012362 00000 n +0000012451 00000 n +0000012581 00000 n +0000012674 00000 n +0000012785 00000 n +0000012887 00000 n +0000012998 00000 n +0000013129 00000 n +0000013228 00000 n +0000013323 00000 n +0000013434 00000 n +0000013572 00000 n +0000013670 00000 n +0000013768 00000 n +0000013881 00000 n +0000013975 00000 n +0000014118 00000 n +0000014219 00000 n +0000014314 00000 n +0000014412 00000 n +0000014507 00000 n +0000014605 00000 n +0000014721 00000 n +0000014824 00000 n +0000014917 00000 n +0000015004 00000 n +0000015091 00000 n +0000015257 00000 n +0000015527 00000 n +0000015616 00000 n +0000015905 00000 n +0000017251 00000 n +0000026294 00000 n +0000026459 00000 n +0000026728 00000 n +0000026819 00000 n +0000027104 00000 n +0000028548 00000 n +0000037164 00000 n +0000037340 00000 n +0000038189 00000 n +0000038280 00000 n +0000038526 00000 n +0000040278 00000 n +0000048902 00000 n +0000048940 00000 n +0000049299 00000 n +0000049352 00000 n +0000049406 00000 n +0000049460 00000 n +0000049514 00000 n +0000049567 00000 n +0000049621 00000 n +0000049931 00000 n +0000054461 00000 n +0000054771 00000 n +0000058204 00000 n +0000058331 00000 n +0000059417 00000 n +trailer +<< + /Size 153 + /Root 152 0 R + /Info 150 0 R + /ID [(NOWgog1cc+ONvvYWeL1RrQ==) (NOWgog1cc+ONvvYWeL1RrQ==)] +>> +startxref +59654 +%%EOF \ No newline at end of file diff --git a/docs/ayto-sat.typ b/docs/ayto-sat.typ new file mode 100644 index 0000000..34462b0 --- /dev/null +++ b/docs/ayto-sat.typ @@ -0,0 +1,72 @@ +#set page( + paper: "a4", + margin: (x: 2.5cm, y: 3cm), +) +#set text( + font: "FiraCode Nerd Font", + size: 11pt, +) +#set par(justify: true, leading: 0.65em) +#set heading(numbering: "1.") + +// Title Block +#align(center)[ + #text(17pt, weight: "bold")[Mathematical Formulation of the AYTO Solver] + #v(1em) + #text(12pt)[Constraint Satisfaction & Surjective Bipartite Matching] + #v(2em) +] + +This document outlines the mathematical foundation of the parallelized constraint satisfaction solver designed for the logic puzzle from the reality television show *Are You The One?* (AYTO). + += Variables and Sets + +Let $G_1$ be the first group (e.g., group 1 candidates) of size $N$, and $G_2$ be the second group (e.g., group 2 candidates) of size $M$, where $N <= M$. + +The algorithm seeks to find all valid mappings between the two groups. Mathematically, it searches for all valid *surjective functions* $f: G_2 -> G_1$. Surjectivity implies that every person in $G_1$ must be matched with at least one person in $G_2$. + += Constraints + +The function $f$ must satisfy two primary types of constraints: + +== Allowed Mappings (Truth Booths) +Let $A(y) subset.eq G_1$ represent the set of allowed matches for a given $y in G_2$. Initially, $A(y) = G_1$ for all $y$. The "Truth Booths" apply absolute constraints: + +- *Confirmed Match (True):* If $(x, y)$ is a confirmed match, then $A(y) = \{x\}$. +- *Confirmed Non-Match (False):* If $(x, y)$ is a confirmed non-match, then $A(y) = A(y) backslash \{x\}$. + +In the implementation, $A(y)$ is efficiently represented as an $N$-bit integer, where the $i$-th bit is $1$ if $x_i in A(y)$, and $0$ otherwise. + +== Ceremony Constraints +Let $C$ be the set of all ceremonies. Each ceremony $c in C$ consists of a set of guessed pairs $P_c subset G_1 times G_2$ and a score $b_c in NN$ (the "beams"), representing the exact number of correct matches in that guess. + +For every ceremony $c in C$, a valid function $f$ must satisfy: + +$sum_((x,y) in P_c) bb(I)(f(y) = x) = b_c$ + +where $bb(I)$ is the indicator function that equals $1$ if the condition is true and $0$ otherwise. + += Search Space and Pruning + +The algorithm explores the search space using a Depth-First Search (DFS) tree, building the function $f$ sequentially. Let $f_k$ be a partial assignment of the first $k$ elements of $G_2$. + +*Pruning by the Pigeonhole Principle:* \ +At depth $k$, let $U_k subset.eq G_1$ be the set of elements in $G_1$ that have already been assigned a match. +- The number of elements in $G_1$ still needing an assignment is $N - |U_k|$. +- The number of unassigned elements in $G_2$ is $M - k$. + +Because the final function $f$ must be surjective, if the number of required assignments is greater than the number of available slots, the branch is physically impossible and is pruned immediately: + +$N - |U_k| > M - k => "Prune branch"$ + += Objective + +Let $cal(F)$ be the set of all fully assigned, valid functions $f$ that survive the pruning and satisfy all ceremony constraints. + +The algorithm outputs two standard metrics: ++ *Total Possibilities:* $|cal(F)|$ ++ *Marginal Probabilities:* A matrix $P in [0, 1]^(N times M)$, representing the likelihood of each specific pairing across all valid universes. + +For each $x_i in G_1$ and $y_j in G_2$, the probability is calculated as the ratio of valid functions that contain that specific match over the total number of valid functions: + +$P_(i,j) = frac(1,|cal(F)|) sum_(f in cal(F)) bb(I)(f(y_j) = x_i)$