-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathinstall
executable file
·348 lines (319 loc) · 23.2 KB
/
install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
#!/bin/sh
# 64-bit YNAB 4 converter shell script for macOS
# SHELL SCRIPT VERSION: 1.0
# 64-BIT APP VERSION 1.0
APP_URL1="https://www-assets.youneedabudget.com/ynab4/YNAB4_LiveCaptive_4.3.855.dmg"
APP_URL2="https://web.archive.org/web/20190613044706/https://classic.youneedabudget.com/CDNOrigin/download/ynab4/liveCaptive/Mac/YNAB4_LiveCaptive_4.3.855.dmg"
APP_FILE="YNAB4_LiveCaptive_4.3.855.dmg"
APP_SIZE="28MB"
APP_MD5="e37d666b2cf1aa718c78534b1a1ffdc9"
AIR_URL1="http://download.macromedia.com/air/mac/download/32.0/AdobeAIR.dmg"
AIR_URL2="https://web.archive.org/web/20190623201904/http://fpdownload.macromedia.com/air/mac/download/32.0/AdobeAIR.dmg"
AIR_FILE="AdobeAIR.dmg"
AIR_SIZE="20MB"
AIR_MD5="ab54e66e43ccd463d3b582b854afd27c"
install() {
echo "=========================================================="
cat <<EOF
____ ___ _ _ _
/ ___| / | | | (_) |
/ /___ / /| |______| |__ _| |_
| ___ \/ /_| |______| '_ \| | __|
| \_/ |\___ | | |_) | | |_
\_____/ |_/ |_.__/|_|\__|
EOF
echo "=========================================================="
echo "===== 64-bit YNAB 4 converter shell script for macOS ====="
echo "=========================================================="
echo "> This shell script will:"
echo "> 1. Download the 32-bit version of YNAB 4 ($APP_SIZE)"
echo "> 2. Download the 64-bit Adobe AIR runtime ($AIR_SIZE)"
echo "> 3. Convert the 32-bit app to a native 64-bit app"
echo "> 4. You must drag the app to /Applications directory"
echo "=========================================================="
cat <<EOF
IMPORTANT NOTE: This shell script is not affiliated with
YNAB in any way and YNAB has not endorsed this at all.
You Need a Budget and YNAB are registered trademarks of
You Need A Budget LLC and/or one of its subsidiaries.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
EOF
echo "=========================================================="
read -p "Press [ENTER] to continue or [CTRL+C] to cancel"
# Download YNAB 4
echo "> Downloading '$APP_FILE'"
APP_DMG=$(download "$APP_FILE" "$APP_URL1" "$APP_MD5" "$TMPDIR") || \
APP_DMG=$(download "$APP_FILE" "$APP_URL2" "$APP_MD5" "$TMPDIR") || die "Error downloading dependency '$APP_FILE'. Try again."
# Download Adobe AIR runtime
echo "> Downloading '$AIR_FILE'"
AIR_DMG=$(download "$AIR_FILE" "$AIR_URL1" "$AIR_MD5" "$TMPDIR") || \
AIR_DMG=$(download "$AIR_FILE" "$AIR_URL2" "$AIR_MD5" "$TMPDIR") || die "Error downloading dependency '$AIR_FILE'. Try again."
# Extract YNAB 4 package
echo "> Extracting the 32-bit app from $APP_FILE"
VOLUME=$(hdiutil attach $APP_DMG | grep Volumes | awk 'BEGIN {FS="\t"}; {print $3}')
cp -a "$VOLUME/YNAB 4.app" "$TMPDIR/"
hdiutil detach "$VOLUME"
APP_DIR="$TMPDIR/YNAB 4.app"
# Install 64-bit Adobe AIR framework
echo "> Extracting the 64-bit Adobe AIR runtime from $AIR_FILE"
rm -rf "$APP_DIR/Contents/Frameworks/Adobe AIR.framework"
VOLUME=$(hdiutil attach $AIR_DMG | grep Volumes | awk 'BEGIN {FS="\t"}; {print $3}')
cp -a "$VOLUME/Adobe AIR Installer.app/Contents/Frameworks/Adobe AIR.framework" "$APP_DIR/Contents/Frameworks/"
hdiutil detach "$VOLUME"
echo "> Converting the 32-bit app to a native 64-bit app"
PATCH="$TMPDIR/patch"
# Patch and install 64-bit ExtendedAppEntryTemplate64
rm "$APP_DIR/Contents/MacOS/YNAB 4"
echo "$APPPATCH" | xxd -r -p - > "$PATCH"
bspatch "$APP_DIR/Contents/Frameworks/Adobe AIR.framework/Versions/1.0/Resources/ExtendedAppEntryTemplate64" "$APP_DIR/Contents/MacOS/YNAB 4" "$PATCH"
chmod 755 "$APP_DIR/Contents/MacOS/YNAB 4"
# Patch MacUtils extension to 64-bit
sed -i '' 's/MacOS-x86/MacOS-x86-64/' "$APP_DIR/Contents/Resources/META-INF/AIR/extensions/mac/META-INF/ANE/extension.xml"
mv "$APP_DIR/Contents/Resources/META-INF/AIR/extensions/mac/META-INF/ANE/MacOS-x86" "$APP_DIR/Contents/Resources/META-INF/AIR/extensions/mac/META-INF/ANE/MacOS-x86-64"
MAC_PATH="$APP_DIR/Contents/Resources/META-INF/AIR/extensions/mac/META-INF/ANE/MacOS-x86-64/MacUtilsNativeExtension.framework/Versions/A"
echo "$MACPATCH" | xxd -r -p - > "$PATCH"
bspatch "$MAC_PATH/MacUtilsNativeExtension" "$MAC_PATH/MacUtilsNativeExtension" "$PATCH"
rm -rf "$MAC_PATH/Resources/English.lproj"
rm -rf "$MAC_PATH/_CodeSignature"
# Patch Sparkle extension to 64-bit
sed -i '' 's/MacOS-x86/MacOS-x86-64/' "$APP_DIR/Contents/Resources/META-INF/AIR/extensions/sparkle/META-INF/ANE/extension.xml"
mv "$APP_DIR/Contents/Resources/META-INF/AIR/extensions/sparkle/META-INF/ANE/MacOS-x86" "$APP_DIR/Contents/Resources/META-INF/AIR/extensions/sparkle/META-INF/ANE/MacOS-x86-64"
SPARKLE_PATH="$APP_DIR/Contents/Resources/META-INF/AIR/extensions/sparkle/META-INF/ANE/MacOS-x86-64/SparkleNativeExtension.framework/Versions/A"
echo "$SPARKLEPATCH" | xxd -r -p - > "$PATCH"
bspatch "$SPARKLE_PATH/SparkleNativeExtension" "$SPARKLE_PATH/SparkleNativeExtension" "$PATCH"
rm -rf "$SPARKLE_PATH/Resources/English.lproj"
rm -rf "$SPARKLE_PATH/_CodeSignature"
rm -rf "$SPARKLE_PATH/Frameworks"
INSTALLDIR=$(mktemp -d)
if [ ! -d "$INSTALLDIR" ]; then
die "> Failed to create temp directory"
fi
mv "$APP_DIR" "$INSTALLDIR" || die "> Error saving 'YNAB 4.app'"
ln -s "/Applications" "$INSTALLDIR/Applications"
touch "$INSTALLDIR/DRAG APP TO APPLICATIONS DIR"
echo "=========================================================="
cat <<EOF
_ _
| | | |
__| | ___ _ __ ___| |
/ _ |/ _ \| _ \ / _ \ |
| (_| | (_) | | | | __/_|
\__,_|\___/|_| |_|\___(_)
EOF
echo "=========================================================="
echo "> The app 'YNAB 4.app' has been saved to:"
echo "> \"$INSTALLDIR\""
echo "> Drag the app to your /Applications directory to install"
echo "=========================================================="
read -p "Press [ENTER] to open the folder containing the app"
open -R "$INSTALLDIR/YNAB 4.app"
echo "> Done!"
}
download() {
FILE=$4/$1
(cd $4 && curl -L $2 -O)
if [ ! -f "$FILE" ]; then
exit 1
else
MD5=$(md5 "$FILE" | awk '{print $4}')
if [ ! $3 == $MD5 ]; then
exit 1
else
echo "$FILE"
fi
fi
}
die() {
echo "$*" 1>&2
exit 1
}
TMPDIR=$(mktemp -d)
if [ ! -d "$TMPDIR" ]; then
die "> Failed to create temp directory"
fi
trap clean EXIT
function clean() {
if [ -d "$TMPDIR" ]; then
rm -rf "$TMPDIR"
fi
}
# 64-bit patch set
APPPATCH="
42534449464634305300000000000000a300000000000000ac81000000000000425a6839314159265359cf8b60190000267e
407cd8020042000001120000024002200054534c8c4c4c412289ea6831945e6e44eb3d84781a9f50255999e029a1540da2c3
f9858707f177245385090cf8b60190425a68393141592653596590a9b10000277bfdef5820080808000804ee100040084400
18000006020800081003081da000920d123400000d0d034d3412291320623d406868c8d0da65949893c484180c24d80da150
c44cc0f8d029da4b160225a848122e6000459646d84dfda4a2c933cb02d7045e6bcf4e374a976bc078e631c9b0d8600222c8
53da08bc531e0640c20d07d35ae488cc3bf1772453850906590a9b10425a6839314159265359eb3c63270000064580400008
002a204500200031064c405511a1ea65975aacdc21d210f8bb9229c2848759e31938"
SPARKLEPATCH="
42534449464634305301000000000000f104000000000000a037000000000000425a68393141592653590825c2d600019b7f
fffffbf6bffdf753acc0409252400064c84401249010000400981000010184002630010300d54f427a2068d069a699340680
068d3401a1900001c68c99184620184d0601341a064c9a32643080c24489100000d000000000000686d27a84645688caa794
4224340206ac46553201e4a0920dd814c39c48211e3a19792798708fd4ec56ad0ac2984696697812de7306acb59bac878632
bb3954c2eda9f5eaf3d11d9dd19966dc538f2b79f4f0cb911b06154ddb98d904d7753427ed9b746c28a51ef9dc3d2ef249bf
4189237809242f9a65a9fbd74dadfe6e0dc2f044a02004306842c2f6b04c64ecc82bfe504aceeaaecad0908651218d444450
e47f327353b5121d8714d10e476352649bb75556e8ac54545ecc9973129462b8732144e1b1903636386a510467a6d89b4d8d
a1b063841369a6c6f8e3fc5dc914e1424020970b58425a68393141592653595eec183f00029cffffffffffff7ccff5f76bef
cdbbdfdd6cc36eef717a507ffffbe4f9de77ffffffffd0038debb604ea8474e1a9a44f49a51e53d4c43d23d468347a9a00f2
81a686864340064d0d01a0069a64f53434f50f5343400341a680f29a646434f53c9a9e9a9a3c4ca7b150852101a0d1a341a3
40d0003434d01a68000000000000000000d00000000068000d1ea68227a443446a3694f1a6a646936d49ea640000000341a3
400000000000000000000d0001a000343440c8c869a640643400c8323468321a069a1a18800c8321a3406401820d03200d00
0d3400c8d18234068004a6a4149e4d264f50346868c9ea1a0d06801a001a0068000003401a001a0000001a620d0068d0d1a3
21a34173444aa2725253c19a8c4237ea528a380c8143290755408a29132fd0d57bd82fd54d0c627b51f635dbb5f3e2479ce9
57d95413bfbb285ba48fab9962f512ca5505516c5865512a94f58090dbad9283274a9998caa06959141091669cccc4cd6398
03dc9891884e1fdcb8248402acd11879b7f4e9281b3258442115b567c9ed1f886841470d873b11a2a82a970f835a148c4e34
0dc4aa3d71488c92b04f56f7a29d60e13d08011c6cd1988de87a67ffe503eba505bdb0e80008321e7079e53081989f4f0a7b
04eaf561636360f81113344bb5bf30f3e3409b3ca14dfb8e64e02b004e56b62db2681075a741b5fc492d5584b5252651c130
2f616080c834f4851141466fa4df80e98152025386f026603469862593120ce2b4dd9f089a50d2062e2a492e4b9b11338325
fda59962a62fe72a18c4922699b81497030f48386bcecc1b6214b8fb09659344f8858629cd258380e782488019c358a6a619
4d688d0f072a6a1f5132d9a22ca06b0a33829a09aa82a4d710a5d2280402214318ea66114b204d84b8f9c9ae5a6c9bcd104a
848696e4b60aa9d59b2fa987d94926005381421d7ce8c192e9e7cd9dae97988803132a695ae2c28968ca3c12daed3c47a360
5f8e40e400ce40c0c4f266622261e4000e4c004da06662853016476eba53306ee722d7eb6bea4e447a8496d376058090a311
939d6f88216e404cbb6b7f072a8001bb6e053dabe9e45c260254e7db1e0a147725dc522baef29de1a91315486b2a29aadcd9
3453735deaa9baf943e76f8baf82c51ac9a68d4f3e5cb66d1bd8e817e9266cb0cc9c01288185b13a2036191380dc3148913a
e8b26880034a988a82ab92ea2a3e1705f22152e6a047a134694850f0d3899b350b8a24c3542a5551e373056c9c18ab55ce18
130e55e99f4cd9043953ae9a8e9807d05fb60ea74d2683aa9a155c8ac44da2b51248120ab4338468651ccdbe4306ff070bcd
d7dc38f027553a8d43aa7317ffbb9f4c62530382318d74d8e0c07dc8ca90b9714f8d79a14035a521cd797798dd37c0c2734d
6b270d6ff98daeeec15a27f75ed24e4a3de60bea0b9abb4de42c57cdeb6a18b71ab8fd4cf46769489f349ee792970a9503ec
42776e7a32ab85d3e58aeae81e266045423733f6d7c82eab38855aece1cbb3ded5563508fdd89de552a05090bb2e5044e552
0dc2c6ce924ea98cbb739ebd87cad9998dfd2c60023080796215f2a3282040c291304080616129e2a9aa41521484ca5cdac8
74cbdf507f1a06b37e364bd6f37a1feb37e880f176c6a9a238e1fa1cf8d759d417abbf5a6aae9b7d4b813870f9739816cb4b
ee62cb00f66e203131908a4f48b38932f79b096107f0791187fc5dc914e142417bb060fc425a6839314159265359f4373fd3
00001e7fffff90e0404010bdc23c61de22bff7de520122002010010000c884900106000000b000fa9ac35123d41a68d03132
341a0064001e90641a0620d5468f447a9a60d40d034c8680000031310d0d309444d53c93d4f354f51ea1a0d00f50f5000d3c
a00d3d41bd4868d6476c493ac4a2e839b33d884ca0fdce21b528e57a894a87adfc2d44d1fb4018a1fea50b493555c4b22fb5
0f53af1c16b9ac007d7cee44426fbfa70dac6b3fe7503f5559fd272ca54652c442f9b5a5236d2cc2fb25a2dbd7b7841c12c0
45df736835a4626251c829e770ce86e228b98484e5cc4c71673763e2b5aa638c579cd5dc6194144b3cc89e72d2a6a9083882
610434085c2355514720f06506bb290ac12a40a56534b458f4cc06a4f110c73f0fd19144487e43560899110e48f2fb27ef82
216011c7fc5dc914e14243d0dcff4c"
MACPATCH="
425344494646343076030000000000004e0a0000000000003455000000000000425a683931415926535960a5d5f50004e6ff
fffffffffffffdf7fcfe76c8ffaafd354857454e727842024c095b40144158008ac002b00b80014a8c4d304d0c04c8d0d34c
98004c43464604c869a60000118132609899031321a088269a269b54f13536a7aa78c9433d0a7a8f4c90f53324f227a651a7
8287a87a9a34d34c6a00c4d321ea68d000008300988c13261061313026008611808604c0984c11800009a184c4d30204a689
09a4ca1a0001a0680000000340d06403400686400d0d0d0c807a648310b1060d85db9c5549489a4eb2ba470b20b137c911a4
ca61ff269015e0e004df84425ea9dc51d4d720d98695fbf202c18e30accacb5d0f9ba54a0c68beb593934db15adcfef5b379
b2f42b7a251c3995e3c19c20cadd29ff6d9effd88f304ccfc7548ce99243ce30154c6b8baf5905a116ad40951e264892ab9e
bcbb78e299597af57a08ea03b4586feaf0100dd11c34c0c536a6f13502799a579c39a3594586da998678c1de39dfe264795f
854e35ac26525e2e2f4dc4b09a7378d4a54c61c99a2cdedc14d04d0315e4177415d262d25aa8558446159443efe185d8c869
82fea9765f34d7207202d16b5f9346a313fd5a2ca23f6de249d3a691e8f2b06571e0c09db8f048a15e91f866aeb33a139acb
7614f3a141a7aa7b362de4879e489d5706cce8a184f7249df00c4a16222dc252463fb29ca75b3b856f382d846f25d979e0a4
06470458fd0655f699f7b128316a8560a2de818f1d654353b98f44200842100020542d58361972903e78989daa9cddff8efe
eb1bf79a3c5d0cc330c67bc15fe250c4cc024c3305be0fb71fb73872e861861b8366a615eeab16e42ab6baab8179e176d5dc
8e17583afaa58c79cef681db336cc2772f48a92949dd1c4ca04d1209d0843a126724c30c3bc0518d340d3265eaa218a2b3e2
ce3a934cca32f0d10c240a5043397989f994ea662fa82b1f5b334e2b06e1e8448a5c43a4ce878714390874c9e21a10d09938
f0c2707c7bac3b5716acdffeadab2ac84993b8f61395d04991020440ee92490e3a74e24e821342075026bb77c043a3473162
1b22a4e281c732d113bc88488b044909349cb42887071efa3b251cfbbabfeb3414a6a173ad8c3452a53254bc324d05ba4921
09024c210932871cb8643a13242664842661093264c8128932a61cd9c9d09092048c894109dcfe5ad0eeb03496a9a8914ac8
8aeabc9d0b0939ff17724538509060a5d5f5425a68393141592653591cef064700053c7fffffffffffffdffff5ffffffffff
ffffef7df7ffffffffffffff7ffff7ffffffffe007987c710c0d2ac75a1a42901138453d44d1a2328d0c04c268d1a0794cd4
0c41e486419191a0d0d1900da43406469934da6898269934191ea1a06989e441e901ea7a43269a33501a34c9ea64d1b49a32
3d4c9b5044c91a94fd27a14f50f29e90335327ea4680da878901b49faa7a8c8c9fa90006800007a8d06806800d34000d0680
0000000000000000000044d09a34054fd4c34d26004f453c49b124f6a9e9a8cc9341a0f5347a4f48da83434da83268031340
00000d00d0000000680000c990019000c80c7aa2000000000000d0034000000003400001a000d0001a000000000000000000
00d00000008000000000003400d000000000d000006800340006800000000000000000003400000009144426826936827909
ea3d26d134d1e80d23d464327a20c4f5323469b51a68681840d0d191a7a8d0d340c990d0d06984d00346400d1a01a001a0d1
ea68d340f507a4da9b326d49ef626399769a5754a8db1e999937428b7c46c67d4d915a4d31d08f034cb58571a83b70d6d12e
e556706f0450cf1622dc561ad12ed63588eee702bcb39a7ff603276f59b81d62867f52c4a6d191daba13881b22e7e5a217c1
07d9d65940fae3814efee72796198502b7140c411182f66ddc0c83ee25394d448972bf1957fc91426bd55c3eaab5ad2cca30
bfd59bc9686f9c1cda02d65e31ef5905824b92905dea76428e8cdbd593e714aedaff84801756253da0dab0ae655ce44aa860
2be51491424b710a52292f99dcdac5302fd61045f5a559a5f1a342d217d183ba451b6e12c301207c372f5e275ce81ac032c5
9866641d2ff30ec38cccc570b49639aab9f30ea1a2c5a399ac13d1007c16f9678904e6f4a7463f4d5580e9308434195a3cdc
5cd213413d1bf0c38819668803807546d820ea112710f48e114a330fdadb69372a551952ffaaa60e609716b6486d617aa2f1
a53e1af40672a276aec0e187fb1512f050d073a271b25f056ad4a5d995244d0461b6406d1ab8c4c1d52a5dbff828a9e8e8e8
37f9e811ce3cfdff057084981acba7f61b464ddf31dacbc76b422b06924ad18af59282df5a302c4593ab62dcb11bf5ff4bbd
48918fa8822468a618b2cc0a96bb8769550c334a6b8179ecb4722c931685a304e8a74050613da5ff3442da184e92151a2a59
a49d18edce7b27e6a048c3bd7a37dbb4aa1d1315757c02e05d082f0deaa2247e46615dc06d88478dd4e31c2467bba36945c5
0a1c6432a83145dc1280439a05b620f082a52dc5568d5125212b738503629799190f1ab9c33b7312664a6a09b956ef95d073
a4c7055154b144f913412dc41320f6a641cd782507d18bfbed17920acd4cc351ba2900e3b412730360e168c0057a864cf104
1f18955c9976c46c28560eb847eab626de137d0969ce51a49b379b6d8c0c34302d8be697dce64d430e074e514bf989e7a0a1
00bd890a4c2dd729438557fe88eab469bcac67f9abd47cee8516840400b6843b7663819a1ad03126aa230ab133946190f16a
1ab9c37474a0e66b50661d5a86ed37cc2b350ee0100bd8ca8aa3956660a02676136ad4dac55417988112d9a0337af080efc2
30801003897c50480e05ca2ebae632b454898eb2e1a6948425411806edfb15ba0532cc1d786a3339e9c706862efdbed3cd72
60c44581ba4635952e2a75fd1a29f49b331138910d09b2e052c374307050fe7afdb378f62cc367a751a2c15034f20a49b919
e2082242e231c7481523048af1b208708c19993848f8a57a7c28ca8a22d2b2f352015af48f954d2afb9b29ccac0dcb281080
18d68a4dec419cdd3537f4ab2850402e4c8e0fd84c8601509267fa419abb1c4af20983e17ed2476af936ee4a5ae6f2756a02
2eacb87415b10d3b06c409368004d890d89243620a36092ad6801b1010706211068136205470b8b222095a4abd8021b42582
62491092016ba6aeff1c8901ed73fd1542eb66671c052a3240875ddca4953c1a161e7ab55a02f4b33ab345c90511c578040a
f3c5989e11a1c9bc50837814332744f4b23cf660b125ea0cc4ce1f5d2fc4ccf7b965657af3f819bceefb048562c12e85a142
e7770f2e2631a22d025c08c29c982303021256be8ddf1de745a6508c069e93ba3009470867804c53527e575b5f6ad2685f35
300313afa9c47b75776fdf574183a6b58a306cfd5a15dda0dddd6e82096c59dc67f82cecdbccc34f94e6a21a16162eed7c82
4758d1787d2d55ef97905bce2f1b12cd98bb7c3152c117edce8bcdd94a1495d0b9678cce5eef2a5bbeb763d2c805031141c0
40d2c614f5b9a8954e85e3077d6b1ac6d1a9c3f3b12e4c5fd6176113fbaad6d9bd44ab5d45b3e524347da9e8d02afadcde70
78e99898044ec822bbac7fef1da8aeb247dd9b386907556a73935f236001af8354a67a972598f27653fe2afbd44e5f490c43
0b8dbf6913324e87cad7e2d56305234ee302d9e31a9181d6b5dd59a822e6e56165f9f74f8acae72d26ddb21e744c8d3cb1a8
654b51b7d3452faaffcd2fa113a6c01b04543542960590120d6c81659dab136c8d9b88a284b20bce0a0ab1abf48d426c8177
15e925cd1043909016d1a4942408808db8803eca56dce262e7f7f550d5b00d242d52e76694b0a9933a9524fc2decc4a9e0b0
414d9d486716850e1cf0122048e5ae19e04b2c1dc487e96019ac9e215d8c64a9c5ac5b2c14a7a7efb3cc60ed36b0fe36eaac
d217ac3326821d0400405f220a7a59086c2bc7a90e4eb4930aa1100fcb3811af8f0b3227190f52ba4cf1fe7a5a9fce556e6b
2dac82bbbd8bd3625bd544a561658f0ba7305c5c169bc119b602c2d867aed9014334f288d2d080e32b832db533ac0f68b000
d834fb0a086f7202a42457940e338b305307d13c428be5ea2527ed62fd09675f72eed6347691f37ac3f54f3489f1de4cca49
92a44b6e09f61b9ce42bda06e5d866a215ad63985cde91a9bb6a08fded6c31b00927e4238568d00ec197d68f828e075ee0c5
32860a2c48d7f7704a2c31ef2cc8b48928a16e920b42d16fd9f2d10e3f0f3a26a9d033cb7e9b4a180cbe1ab254523a77b773
d867d8151592451a861ca0c032ad13e96029835846135a4e88641b55cf28c15433bc678cd5036d8c26b14187556d4f135ac9
93208a1dfe48872188e36964259d04ad25e56323329c46a2379a99e440a4b3dac40c550d34746d602393892b498ee2c2c068
96e508e0fb0399669acad659b57b8e86765e528daf5fc0b6d97bd2d26b8c0fc0ef219fe04d1011f148a0aca5a80e73134da1
0359b2494637cc3a5bdf8ae9576308a971bf8e4f14a344a0e9000e140abf5d07b7b5e60518810c3744851b189ff189e65f8c
071177114e487d0eb08c3dd376a64680f57287e8ebe40bee9af494ae0da7dab84483a15b15e8e9e3794610cde2dee3e6d09d
5d61d222564e00520f3aef9d89c3ceba5343299bb3f964a7d5d4fa12084437682cf3d9c031b1456e92aa6f632accf4155135
2cadc9c06f74de8c805ef3f04196ea71912dc3ea9add57f6dc419b9427957040901963184028088800680481978df8596a7a
817a5fbcd6c73a7fd4d846503b569a79947089a4958570598306c04f6709d4960d814c76091ee16d661a81edffe2ee48a70a
12039de0c8e0425a68393141592653597db3a657000002fffffffeefffffffffdf7ffffffffffffffffffbe67bdf7d4f6f7f
cf7fdfd7fffdf9e0079ad9f79e03def69aef3bbd03a01a347265c44d44d24fd1329ea7a8d3468d36a7a6937a89e48003d469
ea7a8d1e9a9a66a343134d0190326d4d0c9ea034f50da81a343d469ea68f499a9a7941a34341b5193d4d3d0207a4d01a3d26
9faa681a8241aa7ea7a689a99ea43650de910f29faa19a6a0f5184d01a36a69a0000006800c260131069a0003403400d3400
00680341a1903219044c846a6d464d3291b4ca68000000680d0006400c800003200190000000068000006800000000686834
1a69253d4c14f14f53d20681a1e49a1a340681900000681ea0069a1a34d000327a868000000000000000d000000006880d00
0000000001a0000340000019062000006400680006991a0640309a000000d19340000048a108322680ca9e937929e8c4a78d
1a84fd23427ea8c8f694da46d21bd5309a6218353099a680200fd5068018818801a64c21826101a68d0c09e84da8c8d0473b
2ca2ecc4d473471304ba3076395520c14e8446300cac0398271e27458b12698ae59f4b3c88d36f0a8916bb709f0a00dc0508
24661c10a2e1d2d283506b0e9802bc4081c6120115c6541601e3d3217cb92c5055d92ee1f9a2ef2fdf99d30898c6af1162c1
b356a89ced85fd041351946b46ec92284b652eadab2bf08ee0a5e7a10b1021943490a5400e9034002b69f6de5b076997d2a1
53d0c220aa8eb7d2d841289200a5930944836cbefae214a3ce67d7613b8200065202e471e9c88d30a5063d69b19d6790e16f
523a4ea68266b6cebb24c5799a8c4c98833ca09920cb5bb6dc45517e210360a04444ce915b64c39d3b1baf4eb03d20cdba64
facf288a18f4e1a168981030ca00f1c34259d77235103e28db45e6816a3192044484009a1455ec6ca0be516fda363c5b7a2b
3333f8495cfc2dfa221265fd39ed3a886fc400160b91254887c35ee8ba414da168f50056ff583a39e45c278d5140c8525a68
e4d0e0f23d1ecfd9fcea17660084841c74e30d7191960f3adf1df99749e20d4b4d276780bf736663b9eb4b1d679b549b2947
9a55800ef89f94ca42e08ae163f5329cfcabe6d2b4e055a8af476ccdc3db0a891a3b59e648c326e92960b8062ade0165cdd7
2982a62e48890699cd5b798ddc4d14556ecffd0c212c2224011cb9f7176ff817badaa3d2577bb44f6e7befa37c5d8590d1a4
38e22f8e1fdb0d035e71c7c09a6d2f759bfa5f6c97523872e39094f40df50b73cf676d96fa7df2356d23a65bd02d81377d38
fcbbbaa4f2563b5943a5cf2ca111b958c51c232b2f9b35189ced602e41525811d991143b053dbda2b50cfcec54970084cbb9
c898103ef720ccb0df6599cacaab0b29de836c0054c8a61f9407b01c815b90580258e64c131d8002100e4ede71496a94643e
53014334ccf4dd00fecda735133d08ee519b98f2d5b2baca3b3be6f53c0653401dd311e4146ba1b552df2e07a5a562d58dfa
cbeab69675fb4919124f1ebb829b262ef7a5660b307299233eb1b0e2c5aa9e1e10402901014a7b7e12e2dddcfa4aba30460f
6eab4aff2d9a263637cc55f927b7e604c2d2daa5f67580951e5079e8e4d1fe11c6362fa68dfa3f5841ba97302d3c9350dff8
9a5158bb9f13b4ed773ed4c83a59416b4eb5cd862827688f3eb585f8b1ea26c712df08f82641941c1d1468c88c050c1d7185
3a45a6021e8825ac5ee3e46eb925436c498db6d19ff36ff540971329832c3d48a57a0429e012f3ee9b049c41602239e4b4c2
5049a55cdf18cca2812a92a1c092006aa0425881828bf743415a84dbc551d8200c59d95714209822b2f9126cc09550a43955
6ee7647e5a6e323e854345a29325186bec75356e00075065dc00e488055555485dd7e5a80d0f8ce20ed90b87314007c4e0c8
fac6f0a8079168a281d6476a862c6401a4dd8e0115a27a48a83ac6bfcf41d1e560b371f23a9c6582a613346430ed25e3c733
de74c0958e378787b45d48108711c5bc43c62ca341fd7144c03e8a31188555312205a34eba08948895c3a06768247c569cd3
b09dd2ed335f067d8b32f2de835c0ad9f1b5a300bd56ae98aff4fbeb75b7613ac6e9d565af52472bc0803690da39b7ceccb6
0b64bfda556e559e1b3e5ab99f8261438db3c724cdc0724b7786dfc134ad74c11453bce7fd8b4dc220948462825c9b58ca50
348d28dd13024a7823300bcd36a44a38615d5c433510c72251c2debfc7894a59c0c5833bfecdbeb21d4d5c15fda995a6f91f
50084ada3ad49a1f3576ebd3e921189ae8dbc108d1f3f592736c694b0cc5c00972abd709132ae1288c084668805f02aaaa81
405040881881b08ce0c386c1bb2e24e5742ecf805a80dbae3a2b0e0380c6e1a0e603849a7899de7c4544a83850d97fa0f8f5
f0d170b3f3bddfbed0ec3a00b3c43382d0692f60979b108fc27a37b16f78c92ba4f2ae68638120d184c5c95bcb81357ef29c
9c97aa4365b88f5f50475b046224fd5c983266736b3ecdb305845caa60deb2c26315814e58092aff2b0176c9ace1b5b21675
f3664ec632d40d8556726cb8c882fa139406427b926122e52b259727165c673ebd7fbd8947c975187489102e1820523d0cc9
efc2e0ab4db0312b99a5c24ca2b091953853984b0a5322c141c513ac28ce11cea2b05681210e7442b95bc7bf4068b11696a8
66ec4b197c2655e2b0ceb78e36f461c3cc34e831d54f701c00ddcae18f0f6ab96e71aea38e46802d0c9c2148452280c72e08
ee160ee8028cc905642627e52d9afcc78424541701e8e4dadbda317dd06670b689967c203c6c2c5a790671fbce7ebc674368
bcd6c8e1da3131cb130ad57502386245191c58ac2270c9367306d280e2eaa4e0f830bbee56e9775bb3132cb88b9b6d8d4149
51b8ba714c0f8594a12013ad627ccfb8de25c2c250b166a2c39dd700048d3ae994c2f65e08d10e931fff36defe7e59a0e206
38c040d218f4200420e0263421b49aec20904980348374d005888882060d80da1b49b4c6036dd9604069b4da18d263481a60
deba50ab626c74e94cc9f4e58912ddb12927e44cdb72254b104b4864585471502ae5faefa9622ccd9d2086956c24d9850e04
a5a3202d66d86666084bc142c231e33d50af54b0d701304f89926f8c4a4ff7f358160e3e0917924f6e81a2fd1011bcda646c
64920e66fdbc6198c421767cdaf53ca9ca15cb11b8f33056bc19b5844ed016da45a6abbb6c49443902ae48cabf50db4ec303
0a3baaa840241b63148007bd5504f41294443e7eb405e97e51b92d9b24db546b48a962dbbccf4744a3cfc491091c1a094469
6c508489c998058a6ee56d6600b38db3f3a9a9d9a23081f568d50bd0fb90bdcd7c49905646019a27436665b05290f02212e0
e2400004ce0b13c2ff8bb9229c28483ed9d32b80"
install